diff options
author | June McEnroe <june@causal.agency> | 2019-12-01 21:05:46 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2019-12-01 21:05:46 -0500 |
commit | 02b0e2c95fc083808af3723b2055ac9fb6968891 (patch) | |
tree | b86dd68c3c0d0344621bb593a923f4ad8cf0675b /litterbox.h | |
parent | Change database file name to litterbox.sqlite (diff) | |
download | litterbox-02b0e2c95fc083808af3723b2055ac9fb6968891.tar.gz litterbox-02b0e2c95fc083808af3723b2055ac9fb6968891.zip |
Rename header file to database.h
Diffstat (limited to 'litterbox.h')
-rw-r--r-- | litterbox.h | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/litterbox.h b/litterbox.h deleted file mode 100644 index 5a9a4f6..0000000 --- a/litterbox.h +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 2019 C. McEnroe <june@causal.agency> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. - */ - -#include <err.h> -#include <errno.h> -#include <limits.h> -#include <sqlite3.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/stat.h> -#include <sysexits.h> - -#define DATABASE_PATH "litterbox/litterbox.sqlite" - -static inline sqlite3 *dbOpenPath(char *path, int flags) { - char *base = strrchr(path, '/'); - if (flags & SQLITE_OPEN_CREATE && base) { - *base = '\0'; - int error = mkdir(path, 0700); - if (error && errno != EEXIST) err(EX_CANTCREAT, "%s", path); - *base = '/'; - } - sqlite3 *db; - int error = sqlite3_open_v2(path, &db, flags, NULL); - if (!error) return db; - if (error == SQLITE_CANTOPEN) { - sqlite3_close(db); - return NULL; - } - errx(EX_NOINPUT, "%s: %s", path, sqlite3_errmsg(db)); -} - -static inline sqlite3 *dbOpen(int flags) { - const char *home = getenv("HOME"); - const char *dataHome = getenv("XDG_DATA_HOME"); - const char *dataDirs = getenv("XDG_DATA_DIRS"); - - char path[PATH_MAX]; - if (dataHome) { - snprintf(path, sizeof(path), "%s/" DATABASE_PATH, dataHome); - } else { - if (!home) errx(EX_CONFIG, "HOME unset"); - snprintf(path, sizeof(path), "%s/.local/share/" DATABASE_PATH, home); - } - sqlite3 *db = dbOpenPath(path, flags); - if (db) return db; - - if (!dataDirs) dataDirs = "/usr/local/share:/usr/share"; - while (*dataDirs) { - size_t len = strcspn(dataDirs, ":"); - snprintf(path, sizeof(path), "%.*s/" DATABASE_PATH, (int)len, dataDirs); - db = dbOpenPath(path, flags); - if (db) return db; - dataDirs += len; - if (*dataDirs) dataDirs++; - } - return NULL; -} |