much improved functions for maknig directories, props to Logan
This commit is contained in:
parent
138d98fc3f
commit
5cadc1bff5
3 changed files with 42 additions and 13 deletions
|
@ -163,7 +163,9 @@ void session_startup(gint *argc, gchar ***argv)
|
||||||
|
|
||||||
sm_sessions_path = g_build_filename(parse_xdg_data_home_path(),
|
sm_sessions_path = g_build_filename(parse_xdg_data_home_path(),
|
||||||
"openbox", "sessions", NULL);
|
"openbox", "sessions", NULL);
|
||||||
parse_mkdir_path(sm_sessions_path, 0700);
|
if (!parse_mkdir_path(sm_sessions_path, 0700))
|
||||||
|
g_warning(_("unable to make directory '%s': %s"),
|
||||||
|
sm_sessions_path, g_strerror(errno));
|
||||||
|
|
||||||
if (save_file)
|
if (save_file)
|
||||||
session_load(save_file);
|
session_load(save_file);
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include "parse.h"
|
#include "parse.h"
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
@ -386,21 +387,45 @@ gchar *parse_expand_tilde(const gchar *f)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void parse_mkdir_path(const gchar *path, gint mode)
|
gboolean parse_mkdir(const gchar *path, gint mode)
|
||||||
{
|
{
|
||||||
gchar *c, *e;
|
gboolean ret = TRUE;
|
||||||
|
|
||||||
g_assert(path[0] == '/');
|
g_return_val_if_fail(path != NULL, FALSE);
|
||||||
|
g_return_val_if_fail(path[0] != '\0', FALSE);
|
||||||
|
|
||||||
|
if (!g_file_test(path, G_FILE_TEST_IS_DIR))
|
||||||
|
if (mkdir(path, mode) == -1)
|
||||||
|
ret = FALSE;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean parse_mkdir_path(const gchar *path, gint mode)
|
||||||
|
{
|
||||||
|
gboolean ret = TRUE;
|
||||||
|
|
||||||
|
g_return_val_if_fail(path != NULL, FALSE);
|
||||||
|
g_return_val_if_fail(path[0] == '/', FALSE);
|
||||||
|
|
||||||
|
if (!g_file_test(path, G_FILE_TEST_IS_DIR)) {
|
||||||
|
gchar *c, *e;
|
||||||
|
|
||||||
c = g_strdup(path);
|
c = g_strdup(path);
|
||||||
e = c;
|
e = c;
|
||||||
while ((e = strchr(e + 1, '/'))) {
|
while ((e = strchr(e + 1, '/'))) {
|
||||||
*e = '\0';
|
*e = '\0';
|
||||||
mkdir(c, mode);
|
if (!(ret = parse_mkdir(c, mode)))
|
||||||
|
goto parse_mkdir_path_end;
|
||||||
*e = '/';
|
*e = '/';
|
||||||
}
|
}
|
||||||
mkdir(c, mode);
|
ret = parse_mkdir(c, mode);
|
||||||
|
|
||||||
|
parse_mkdir_path_end:
|
||||||
g_free(c);
|
g_free(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
const gchar* parse_xdg_config_home_path()
|
const gchar* parse_xdg_config_home_path()
|
||||||
|
|
|
@ -79,8 +79,10 @@ GSList* parse_xdg_data_dir_paths();
|
||||||
/*! Expands the ~ character to the home directory throughout the given
|
/*! Expands the ~ character to the home directory throughout the given
|
||||||
string */
|
string */
|
||||||
gchar *parse_expand_tilde(const gchar *f);
|
gchar *parse_expand_tilde(const gchar *f);
|
||||||
|
/*! Makes a directory */
|
||||||
|
gboolean parse_mkdir(const gchar *path, gint mode);
|
||||||
/*! Makes a directory and all its parents */
|
/*! Makes a directory and all its parents */
|
||||||
void parse_mkdir_path(const gchar *path, gint mode);
|
gboolean parse_mkdir_path(const gchar *path, gint mode);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue