* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
+
+#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <locale.h>
+#include <libintl.h>
+#define _(str) gettext(str)
-#include "cfg.h"
+#include <cfg.h>
+#include <pio.h>
#include <plog.h>
static const char *KEY_SENSORS = "/apps/psensor/sensors";
static GConfClient *client;
+static char *user_dir;
+
static char *get_string(const char *key, const char *default_value)
{
char *value;
g_object_unref(client);
client = NULL;
}
+
+ if (user_dir) {
+ free(user_dir);
+ user_dir = NULL;
+ }
}
struct config *config_load()
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;
+}
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
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);
}