From 6e373c88c0664a70365d3b55660ba8c6e23df8d4 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Thu, 5 Jun 2014 00:01:29 +0200 Subject: [PATCH] added get_psensor_user_dir fct --- src/cfg.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++- src/cfg.h | 10 ++++++++++ src/main.c | 12 ++++-------- 3 files changed, 60 insertions(+), 9 deletions(-) diff --git a/src/cfg.c b/src/cfg.c index a5014ff..5db601c 100644 --- a/src/cfg.c +++ b/src/cfg.c @@ -16,12 +16,21 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA */ + +#include #include #include #include #include +#include +#include + +#include +#include +#define _(str) gettext(str) -#include "cfg.h" +#include +#include #include static const char *KEY_SENSORS = "/apps/psensor/sensors"; @@ -101,6 +110,8 @@ static const char *KEY_NOTIFICATION_SCRIPT = "/apps/psensor/notif_script"; static GConfClient *client; +static char *user_dir; + static char *get_string(const char *key, const char *default_value) { char *value; @@ -546,6 +557,11 @@ void config_cleanup() g_object_unref(client); client = NULL; } + + if (user_dir) { + free(user_dir); + user_dir = NULL; + } } struct config *config_load() @@ -692,3 +708,32 @@ void config_save(const struct config *c) c->temperature_unit, NULL); } + +const char *get_psensor_user_dir() +{ + const char *home; + + log_fct_enter(); + + if (!user_dir) { + home = getenv("HOME"); + + if (!home) + return NULL; + + user_dir = path_append(home, ".psensor"); + + if (mkdir(user_dir, 0700) == -1 && errno != EEXIST) { + log_err(_("Failed to create the directory %s: %s"), + user_dir, + strerror(errno)); + + free(user_dir); + user_dir = NULL; + } + } + + log_fct_exit(); + + return user_dir; +} diff --git a/src/cfg.h b/src/cfg.h index a63bcb0..9ba4be9 100644 --- a/src/cfg.h +++ b/src/cfg.h @@ -122,4 +122,14 @@ void config_set_sensor_position(const char *, int); char *config_get_notif_script(); void config_set_notif_script(const char *); + +/* + * Returns the user directory containing psensor data (configuration + * and log). + * Corresponds to $HOME/.psensor/ + * Creates the directory if it does not exist; + * Returns NULL if it cannot be determined. + */ +const char *get_psensor_user_dir(); + #endif diff --git a/src/main.c b/src/main.c index 99d249e..91fff89 100644 --- a/src/main.c +++ b/src/main.c @@ -327,23 +327,19 @@ static void associate_preferences(struct psensor **sensors) static void log_init() { - char *home, *path, *dir; + const char *dir; + char *path; - home = getenv("HOME"); + dir = get_psensor_user_dir(); - if (!home) + if (!dir) return ; - dir = malloc(strlen(home)+1+strlen(".psensor")+1); - sprintf(dir, "%s/%s", home, ".psensor"); - mkdir(dir, 0777); - path = malloc(strlen(dir)+1+strlen("log")+1); sprintf(path, "%s/%s", dir, "log"); log_open(path); - free(dir); free(path); } -- 2.7.4