diff options
-rw-r--r-- | sdn.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -38,6 +38,7 @@ #include <fcntl.h> #include <pwd.h> #include <grp.h> +#include <libgen.h> #include <sys/inotify.h> #include <sys/xattr.h> @@ -252,9 +253,11 @@ fun xdg_config_find (const string &suffix) -> unique_ptr<ifstream> { fun xdg_config_write (const string &suffix) -> unique_ptr<fstream> { auto dir = xdg_config_home (); if (dir[0] == '/') { - // TODO: try to create the end directory - if (fstream fs {dir + "/" PROJECT_NAME "/" + suffix, - fstream::in | fstream::out | fstream::trunc}) + auto path = dir + "/" PROJECT_NAME "/" + suffix; + if (!fork ()) + _exit (-execlp ("mkdir", "mkdir", "-p", + dirname (strdup (path.c_str ())), NULL)); + if (fstream fs {path, fstream::in | fstream::out | fstream::trunc}) return make_unique<fstream> (move (fs)); } return nullptr; |