X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=parser%2Fparse.c;h=636b451f2b5d3a937b76279ebdf971bc3b767655;hb=6253283a06f062657a5b12cb68b7321f966971ad;hp=196ba93b43e2015310071c9de7d4c78da908a260;hpb=b645e3720d497fa0111c1b34f0484d1b17358d14;p=chaz%2Fopenbox diff --git a/parser/parse.c b/parser/parse.c index 196ba93b..636b451f 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; @@ -251,11 +248,11 @@ gboolean parse_bool(xmlDocPtr doc, xmlNodePtr node) { xmlChar *c = xmlNodeListGetString(doc, node->children, TRUE); gboolean b = FALSE; - if (!xmlStrcasecmp(c, (const xmlChar*) "true")) + if (c && !xmlStrcasecmp(c, (const xmlChar*) "true")) b = TRUE; - else if (!xmlStrcasecmp(c, (const xmlChar*) "yes")) + else if (c && !xmlStrcasecmp(c, (const xmlChar*) "yes")) b = TRUE; - else if (!xmlStrcasecmp(c, (const xmlChar*) "on")) + else if (c && !xmlStrcasecmp(c, (const xmlChar*) "on")) b = TRUE; xmlFree(c); return b; @@ -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; @@ -511,22 +508,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; }