diff --git a/src/main-utils.c b/src/main-utils.c index 7385e9c2a..862428022 100644 --- a/src/main-utils.c +++ b/src/main-utils.c @@ -29,6 +29,7 @@ #include #include +#include #include #include @@ -111,6 +112,31 @@ nm_main_utils_write_pidfile (const char *pidfile) return success; } +void +nm_main_utils_ensure_statedir () +{ + gs_free char *parent = NULL; + int errsv; + + parent = g_path_get_dirname (NMSTATEDIR); + + /* Ensure parent state directories exists */ + if ( parent + && parent[0] == '/' + && parent[1] != '\0' + && g_mkdir_with_parents (parent, 0755) != 0) { + errsv = errno; + fprintf (stderr, "Cannot create parents for '%s': %s", NMSTATEDIR, g_strerror (errsv)); + exit (1); + } + /* Ensure state directory exists */ + if (g_mkdir_with_parents (NMSTATEDIR, 0700) != 0) { + errsv = errno; + fprintf (stderr, "Cannot create '%s': %s", NMSTATEDIR, g_strerror (errsv)); + exit (1); + } +} + void nm_main_utils_ensure_rundir () { diff --git a/src/main-utils.h b/src/main-utils.h index cae97b57a..10ba3135f 100644 --- a/src/main-utils.h +++ b/src/main-utils.h @@ -27,6 +27,7 @@ void nm_main_utils_ensure_root (void); void nm_main_utils_setup_signals (GMainLoop *main_loop); +void nm_main_utils_ensure_statedir (void); void nm_main_utils_ensure_rundir (void); gboolean nm_main_utils_write_pidfile (const char *pidfile); diff --git a/src/main.c b/src/main.c index bf1224dfd..4616155d9 100644 --- a/src/main.c +++ b/src/main.c @@ -309,12 +309,7 @@ main (int argc, char *argv[]) nm_main_utils_ensure_not_running_pidfile (global_opt.pidfile); - /* Ensure state directory exists */ - if (g_mkdir_with_parents (NMSTATEDIR, 0700) != 0) { - fprintf (stderr, "Cannot create '%s': %s", NMSTATEDIR, strerror (errno)); - exit (1); - } - + nm_main_utils_ensure_statedir (); nm_main_utils_ensure_rundir (); /* When running from the build directory, determine our build directory