X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=parser%2Fparse.c;h=ed66f088f6ba33f715b805fce01a25e5123a427e;hb=b69ee77256dccee0764c07416fe9bc7db9e5a12d;hp=f2dcb09d86e2798f9c1fe31bdcc86da823efe070;hpb=62e068eabd23405bf5378165892a337926b3ec24;p=chaz%2Fopenbox diff --git a/parser/parse.c b/parser/parse.c index f2dcb09d..ed66f088 100644 --- a/parser/parse.c +++ b/parser/parse.c @@ -46,7 +46,7 @@ static void destfunc(struct Callback *c) g_free(c); } -ObParseInst* parse_startup() +ObParseInst* parse_startup(void) { ObParseInst *i = g_new(ObParseInst, 1); i->callbacks = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, @@ -79,25 +79,21 @@ void parse_register(ObParseInst *i, const gchar *tag, g_hash_table_insert(i->callbacks, c->tag, c); } -gboolean parse_load_rc(const gchar *type, xmlDocPtr *doc, xmlNodePtr *root) +gboolean parse_load_rc(const gchar *file, xmlDocPtr *doc, xmlNodePtr *root) { GSList *it; gboolean r = FALSE; - gchar *fname; - if (type == NULL) - fname = g_strdup("rc.xml"); - else - fname = g_strdup_printf("rc-%s.xml", type); + if (file && parse_load(file, "openbox_config", doc, root)) + return TRUE; for (it = xdg_config_dir_paths; !r && it; it = g_slist_next(it)) { gchar *path; - path = g_build_filename(it->data, "openbox", fname, NULL); + path = g_build_filename(it->data, "openbox", "rc.xml", NULL); r = parse_load(path, "openbox_config", doc, root); g_free(path); } - g_free(fname); return r; } @@ -165,6 +161,7 @@ gboolean parse_load(const gchar *path, const gchar *rootname, xmlDocPtr *doc, xmlNodePtr *root) { struct stat s; + if (stat(path, &s) < 0) return FALSE; @@ -373,7 +370,7 @@ static GSList* split_paths(const gchar *paths) return list; } -void parse_paths_startup() +void parse_paths_startup(void) { const gchar *path; @@ -411,7 +408,7 @@ void parse_paths_startup() xdg_config_dir_paths = slist_path_add(xdg_config_dir_paths, g_strdup(xdg_config_home_path), (GSListFunc) g_slist_prepend); - + path = g_getenv("XDG_DATA_DIRS"); if (path && path[0] != '\0') /* not unset or empty */ xdg_data_dir_paths = split_paths(path); @@ -435,7 +432,7 @@ void parse_paths_startup() (GSListFunc) g_slist_prepend); } -void parse_paths_shutdown() +void parse_paths_shutdown(void) { GSList *it; @@ -459,14 +456,16 @@ void parse_paths_shutdown() gchar *parse_expand_tilde(const gchar *f) { - gchar **spl; gchar *ret; + GRegex *regex; if (!f) return NULL; - spl = g_strsplit(f, "~", 0); - ret = g_strjoinv(g_get_home_dir(), spl); - g_strfreev(spl); + + regex = g_regex_new("(?:^|(?<=[ \\t]))~(?=[/ \\t$])", G_REGEX_MULTILINE | G_REGEX_RAW, 0, NULL); + ret = g_regex_replace_literal(regex, f, -1, 0, g_get_home_dir(), 0, NULL); + g_regex_unref(regex); + return ret; } @@ -511,22 +510,22 @@ gboolean parse_mkdir_path(const gchar *path, gint mode) return ret; } -const gchar* parse_xdg_config_home_path() +const gchar* parse_xdg_config_home_path(void) { return xdg_config_home_path; } -const gchar* parse_xdg_data_home_path() +const gchar* parse_xdg_data_home_path(void) { return xdg_data_home_path; } -GSList* parse_xdg_config_dir_paths() +GSList* parse_xdg_config_dir_paths(void) { return xdg_config_dir_paths; } -GSList* parse_xdg_data_dir_paths() +GSList* parse_xdg_data_dir_paths(void) { return xdg_data_dir_paths; }