diff options
author | William Jon McCann <jmccann@redhat.com> | 2008-02-25 19:19:31 -0500 |
---|---|---|
committer | William Jon McCann <jmccann@redhat.com> | 2008-02-25 19:19:31 -0500 |
commit | 9e78825cef3db4e13cffbfd024bda365403aa6ba (patch) | |
tree | 53ea184b8e5accd21d353d1d3a55eb156501663a /src/ck-event-logger.c | |
parent | 414f7cc1e62474da69058884c5b683dc20e3a8f6 (diff) |
always create the directories we need
Diffstat (limited to 'src/ck-event-logger.c')
-rw-r--r-- | src/ck-event-logger.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/ck-event-logger.c b/src/ck-event-logger.c index b821df9..2fded87 100644 --- a/src/ck-event-logger.c +++ b/src/ck-event-logger.c @@ -97,8 +97,10 @@ ck_event_logger_queue_event (CkEventLogger *event_logger, static gboolean open_log_file (CkEventLogger *event_logger) { - int flags; - int fd; + int flags; + int fd; + int res; + char *dirname; /* * Likely errors on rotate: ENFILE, ENOMEM, ENOSPC @@ -108,6 +110,20 @@ open_log_file (CkEventLogger *event_logger) flags |= O_NOFOLLOW; #endif + dirname = g_path_get_dirname (event_logger->priv->log_filename); + /* always make sure we have a directory */ + errno = 0; + res = g_mkdir_with_parents (dirname, + S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); + if (res < 0) { + g_warning ("Unable to create directory %s (%s)", + dirname, + g_strerror (errno)); + g_free (dirname); + return FALSE; + } + g_free (dirname); + retry: errno = 0; fd = g_open (event_logger->priv->log_filename, flags, 0600); @@ -115,7 +131,7 @@ retry: if (errno == ENOENT) { fd = g_open (event_logger->priv->log_filename, O_CREAT | O_EXCL | O_APPEND, - S_IRUSR | S_IWUSR | S_IRGRP | S_IRGRP | S_IROTH); + S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); if (fd < 0) { g_warning ("Couldn't create log file %s (%s)", event_logger->priv->log_filename, |