diff options
-rw-r--r-- | scripts/lib/util.js | 5 | ||||
-rw-r--r-- | src/util.c | 1323 |
2 files changed, 705 insertions, 623 deletions
diff --git a/scripts/lib/util.js b/scripts/lib/util.js index b3e0189e..c4ad60f9 100644 --- a/scripts/lib/util.js +++ b/scripts/lib/util.js @@ -84,7 +84,10 @@ { var key; for (key in this) - callback(key, this[key], this); + { + if (this.hasOwnProperty(key)) + callback(key, this[key], this); + } } }); } @@ -29,615 +29,679 @@ /* util_string_replace(const char *haystack, const char *needle, const char *replace) return: char * (alloc){{{*/ char * -util_get_temp_filename(const char *prefix) { - struct timeval t; - gettimeofday(&t, NULL); - char *filename = g_strdup_printf("%s%lu", prefix, t.tv_usec + t.tv_sec*1000000); - char *cache_path = g_build_filename(dwb.files[FILES_CACHEDIR], filename, NULL); - g_free(filename); - - return cache_path; +util_get_temp_filename(const char *prefix) +{ + struct timeval t; + gettimeofday(&t, NULL); + char *filename = g_strdup_printf("%s%lu", prefix, t.tv_usec + t.tv_sec*1000000); + char *cache_path = g_build_filename(dwb.files[FILES_CACHEDIR], filename, NULL); + g_free(filename); + + return cache_path; } char * -util_string_replace(const char *haystack, const char *needle, const char *replacement) { - char *ret = NULL; - if ( haystack && needle) { //&& (token = g_regex_split_simple(needle, haystack, 0, 0)) && g_strcmp0(token[0], haystack)) { - GRegex *regex = g_regex_new(needle, 0, 0, NULL); - ret = g_regex_replace_literal(regex, haystack, -1, 0, replacement, 0, NULL); - g_regex_unref(regex); - } - return ret; +util_string_replace(const char *haystack, const char *needle, const char *replacement) +{ + char *ret = NULL; + if ( haystack && needle) + { + GRegex *regex = g_regex_new(needle, 0, 0, NULL); + ret = g_regex_replace_literal(regex, haystack, -1, 0, replacement, 0, NULL); + g_regex_unref(regex); + } + return ret; }/*}}}*/ /* util_cut_text(char *text, int start, int end) {{{*/ void -util_cut_text(char *text, int start, int end) { - int length = strlen(text); - int del = end - start; +util_cut_text(char *text, int start, int end) +{ + int length = strlen(text); + int del = end - start; - memmove(&text[start], &text[end], length - end); - memset(&text[length-del], '\0', del); + memmove(&text[start], &text[end], length - end); + memset(&text[length-del], '\0', del); }/*}}}*/ /* util_is_hex(const char *string) {{{*/ gboolean -util_is_hex(const char *string) { - char *dup, *loc; - dup = loc = g_strdup(string); - gboolean ret = !strtok(dup, "1234567890abcdefABCDEF"); +util_is_hex(const char *string) +{ + char *dup, *loc; + dup = loc = g_strdup(string); + gboolean ret = !strtok(dup, "1234567890abcdefABCDEF"); - g_free(loc); - return ret; + g_free(loc); + return ret; }/*}}}*/ /* util_modmask_to_char(guint modmask) return char*{{{*/ char * -dwb_modmask_to_string(guint modmask) { - char *mod[7]; - int i=0; - for (; i<7 && modmask; i++) { - if (modmask & GDK_CONTROL_MASK) { - mod[i] = "Control"; - modmask ^= GDK_CONTROL_MASK; - } - else if (modmask & GDK_MOD1_MASK) { - mod[i] = "Mod1"; - modmask ^= GDK_MOD1_MASK; - } - else if (modmask & GDK_MOD4_MASK) { - mod[i] = "Mod4"; - modmask ^= GDK_MOD4_MASK; - } - else if (modmask & GDK_SHIFT_MASK) { - mod[i] = "Shift"; - modmask ^= GDK_SHIFT_MASK; - } - else if (modmask & DWB_NUMMOD_MASK) { - mod[i] = "[n]"; - modmask ^= DWB_NUMMOD_MASK; +dwb_modmask_to_string(guint modmask) +{ + char *mod[7]; + int i=0; + for (; i<7 && modmask; i++) { + if (modmask & GDK_CONTROL_MASK) + { + mod[i] = "Control"; + modmask ^= GDK_CONTROL_MASK; + } + else if (modmask & GDK_MOD1_MASK) + { + mod[i] = "Mod1"; + modmask ^= GDK_MOD1_MASK; + } + else if (modmask & GDK_MOD4_MASK) + { + mod[i] = "Mod4"; + modmask ^= GDK_MOD4_MASK; + } + else if (modmask & GDK_SHIFT_MASK) + { + mod[i] = "Shift"; + modmask ^= GDK_SHIFT_MASK; + } + else if (modmask & DWB_NUMMOD_MASK) + { + mod[i] = "[n]"; + modmask ^= DWB_NUMMOD_MASK; + } } - } - mod[i] = NULL; - char *line = g_strjoinv(" ", mod); - return line; + mod[i] = NULL; + char *line = g_strjoinv(" ", mod); + return line; }/*}}}*/ /* util_keyval_to_char (guint keyval) return: char * (alloc) {{{*/ char * -util_keyval_to_char(guint keyval, gboolean ignore_whitespace) { - char *key = NULL; - guint32 unichar; - int length; - if ( (unichar = gdk_keyval_to_unicode(keyval)) ) { - if (ignore_whitespace && !g_unichar_isgraph(unichar)) - return NULL; - key = g_malloc0_n(6, sizeof(char)); - if ( key && (length = g_unichar_to_utf8(unichar, key))) { - memset(&key[length], '\0', 6-length); - return key; +util_keyval_to_char(guint keyval, gboolean ignore_whitespace) +{ + char *key = NULL; + guint32 unichar; + int length; + if ( (unichar = gdk_keyval_to_unicode(keyval)) ) + { + if (ignore_whitespace && !g_unichar_isgraph(unichar)) + return NULL; + key = g_malloc0_n(6, sizeof(char)); + if ( key && (length = g_unichar_to_utf8(unichar, key))) + { + memset(&key[length], '\0', 6-length); + return key; + } + else + g_free(key); } - else - g_free(key); - } - return NULL; + return NULL; }/*}}}*/ Arg * -util_arg_new() { - Arg *ret = dwb_malloc(sizeof(Arg)); - ret->n = 0; - ret->i = 0; - ret->d = 0; - ret->p = NULL; - ret->arg = NULL; - ret->b = false; - ret->e = NULL; - return ret; +util_arg_new() +{ + Arg *ret = dwb_malloc(sizeof(Arg)); + ret->n = 0; + ret->i = 0; + ret->d = 0; + ret->p = NULL; + ret->arg = NULL; + ret->b = false; + ret->e = NULL; + return ret; } /* util_char_to_arg(char *value, DwbType type) return: Arg*{{{*/ Arg * -util_char_to_arg(char *value, DwbType type) { - errno = 0; - Arg *ret = util_arg_new(); - if (type == BOOLEAN && !value) { - ret->b = false; - } - else if (value || type == CHAR) { - if (value) { - g_strstrip(value); - if (strlen(value) == 0) { - if (type == CHAR) { - return ret; - } - g_free(ret); - return NULL; - } - } - if (type == BOOLEAN) { - if(value == NULL || !g_ascii_strcasecmp(value, "false") || !g_strcmp0(value, "0")) { +util_char_to_arg(char *value, DwbType type) +{ + errno = 0; + Arg *ret = util_arg_new(); + if (type == BOOLEAN && !value) ret->b = false; - } - else { - ret->b = true; - } - } - else if (type == INTEGER) { - long n = strtol(value, NULL, 10); - if (n != LONG_MAX && n != LONG_MIN && !errno ) { - ret->i = n; - } - } - else if (type == DOUBLE) { - char *end = NULL; - double d = g_strtod(value, &end); - if (! *end) { - ret->d = d; - } - } - else if (type == CHAR) { - ret->p = !value || (value && !g_strcmp0(value, "null")) ? NULL : g_strdup(value); - } - else if (type == COLOR_CHAR) { - int length = strlen(value); - if (value[0] == '#' && (length == 4 || length == 7) && util_is_hex(&value[1])) { - ret->p = g_strdup(value); - } + else if (value || type == CHAR) + { + if (value) { + g_strstrip(value); + if (strlen(value) == 0) + { + if (type == CHAR) + return ret; + g_free(ret); + return NULL; + } + } + if (type == BOOLEAN) + { + if(value == NULL || !g_ascii_strcasecmp(value, "false") || !g_strcmp0(value, "0")) + ret->b = false; + else + ret->b = true; + } + else if (type == INTEGER) + { + long n = strtol(value, NULL, 10); + if (n != LONG_MAX && n != LONG_MIN && !errno ) + ret->i = n; + } + else if (type == DOUBLE) + { + char *end = NULL; + double d = g_strtod(value, &end); + if (! *end) + ret->d = d; + } + else if (type == CHAR) + ret->p = !value || (value && !g_strcmp0(value, "null")) ? NULL : g_strdup(value); + else if (type == COLOR_CHAR) + { + int length = strlen(value); + if (value[0] == '#' && (length == 4 || length == 7) && util_is_hex(&value[1])) + ret->p = g_strdup(value); + } } - } - return ret; + return ret; }/*}}}*/ /* util_arg_to_char(Arg *arg, DwbType type) {{{*/ char * -util_arg_to_char(Arg *arg, DwbType type) { - char *value = NULL; - if (type == BOOLEAN) { - if (arg->b) - value = g_strdup("true"); - else - value = g_strdup("false"); - } - else if (type == DOUBLE) { - value = g_strdup_printf("%.2f", arg->d); - } - else if (type == INTEGER) { - value = g_strdup_printf("%d", arg->i); - } - else if (type == CHAR || type == COLOR_CHAR) { - if (arg->p) { - char *tmp = (char*) arg->p; - value = g_strdup(tmp); +util_arg_to_char(Arg *arg, DwbType type) +{ + char *value = NULL; + if (type == BOOLEAN) + { + if (arg->b) + value = g_strdup("true"); + else + value = g_strdup("false"); + } + else if (type == DOUBLE) + value = g_strdup_printf("%.2f", arg->d); + else if (type == INTEGER) + value = g_strdup_printf("%d", arg->i); + else if (type == CHAR || type == COLOR_CHAR) + { + if (arg->p) + { + char *tmp = (char*) arg->p; + value = g_strdup(tmp); + } } - } - return value; + return value; }/*}}}*/ /* util_navigation_sort_first {{{*/ int -util_navigation_compare_first(Navigation *a, Navigation *b) { - return (g_strcmp0(a->first, b->first)); +util_navigation_compare_first(Navigation *a, Navigation *b) +{ + return (g_strcmp0(a->first, b->first)); }/*}}}*/ /* util_navigation_compare_uri {{{*/ int -util_navigation_compare_uri(Navigation *a, const char *uri) { - return (g_strcmp0(a->first, uri)); +util_navigation_compare_uri(Navigation *a, const char *uri) +{ + return (g_strcmp0(a->first, uri)); }/*}}}*/ /* util_navigation_sort_first {{{*/ int -util_navigation_compare_second(Navigation *a, Navigation *b) { - return (g_strcmp0(a->second, b->second)); +util_navigation_compare_second(Navigation *a, Navigation *b) +{ + return (g_strcmp0(a->second, b->second)); }/*}}}*/ int -util_quickmark_compare(Quickmark *a, Quickmark *b) { - return g_strcmp0(a->key, b->key); +util_quickmark_compare(Quickmark *a, Quickmark *b) +{ + return g_strcmp0(a->key, b->key); } int -util_quickmark_compare_uri(Quickmark *a, const char *uri) { - return g_strcmp0(a->nav->first, uri); +util_quickmark_compare_uri(Quickmark *a, const char *uri) +{ + return g_strcmp0(a->nav->first, uri); } /* util_keymap_sort_first(KeyMap *, KeyMap *) {{{*/ int -util_keymap_sort_first(KeyMap *a, KeyMap *b) { - return g_strcmp0(a->map->n.first, b->map->n.first); +util_keymap_sort_first(KeyMap *a, KeyMap *b) +{ + return g_strcmp0(a->map->n.first, b->map->n.first); }/*}}}*/ /* util_keymap_sort_second(KeyMap *, KeyMap *) {{{*/ int -util_keymap_sort_second(KeyMap *a, KeyMap *b) { - return g_strcmp0(a->map->n.second, b->map->n.second); +util_keymap_sort_second(KeyMap *a, KeyMap *b) +{ + return g_strcmp0(a->map->n.second, b->map->n.second); }/*}}}*/ /* util_web_settings_sort_first(WebSettings *a, WebSettings *b) {{{*/ int -util_web_settings_sort_first(WebSettings *a, WebSettings *b) { - return g_strcmp0(a->n.first, b->n.first); +util_web_settings_sort_first(WebSettings *a, WebSettings *b) +{ + return g_strcmp0(a->n.first, b->n.first); }/*}}}*/ /* util_web_settings_sort_second (WebSettings *a, WebSettings *b) {{{*/ int -util_web_settings_sort_second(WebSettings *a, WebSettings *b) { - return g_strcmp0(a->n.second, b->n.second); +util_web_settings_sort_second(WebSettings *a, WebSettings *b) +{ + return g_strcmp0(a->n.second, b->n.second); }/*}}}*/ /*util_get_directory_content(GString **, const char *filename) {{{*/ void -util_get_directory_content(GString *buffer, const char *dirname, const char *extension) { - GDir *dir; - char *content; - GError *error = NULL; - const char *filename; - char *filepath; - char *firstdot; - - if ( (dir = g_dir_open(dirname, 0, NULL)) ) { - while ( (filename = g_dir_read_name(dir)) ) { - if (*filename == '.') - continue; - if (extension) { - firstdot = strchr(filename, '.'); - if (!firstdot) - continue; - if (g_strcmp0(firstdot+1, extension)) - continue; - } - filepath = g_build_filename(dirname, filename, NULL); - if (g_file_get_contents(filepath, &content, NULL, &error)) { - g_string_append(buffer, content); - } - else { - fprintf(stderr, "Cannot read %s: %s\n", filename, error->message); - g_clear_error(&error); - } - g_free(filepath); - g_free(content); +util_get_directory_content(GString *buffer, const char *dirname, const char *extension) +{ + GDir *dir; + char *content; + GError *error = NULL; + const char *filename; + char *filepath; + char *firstdot; + + if ( (dir = g_dir_open(dirname, 0, NULL)) ) + { + while ( (filename = g_dir_read_name(dir)) ) + { + if (*filename == '.') + continue; + if (extension) + { + firstdot = strchr(filename, '.'); + if (!firstdot) + continue; + if (g_strcmp0(firstdot+1, extension)) + continue; + } + filepath = g_build_filename(dirname, filename, NULL); + if (g_file_get_contents(filepath, &content, NULL, &error)) + g_string_append(buffer, content); + else + { + fprintf(stderr, "Cannot read %s: %s\n", filename, error->message); + g_clear_error(&error); + } + g_free(filepath); + g_free(content); + } + g_dir_close (dir); } - g_dir_close (dir); - } }/*}}}*/ void -util_rmdir(const char *path, gboolean only_content, gboolean recursive) { - GDir *dir = g_dir_open(path, 0, NULL); - if (dir == NULL) - return; - const char *filename = NULL; - char *fullpath = NULL; - while ( (filename = g_dir_read_name(dir)) ) { - fullpath = g_build_filename(path, filename, NULL); - if (!g_file_test(fullpath, G_FILE_TEST_IS_DIR)) { - unlink(fullpath); - } - else if (recursive) { - util_rmdir(fullpath, false, true); - rmdir(fullpath); +util_rmdir(const char *path, gboolean only_content, gboolean recursive) +{ + GDir *dir = g_dir_open(path, 0, NULL); + if (dir == NULL) + return; + const char *filename = NULL; + char *fullpath = NULL; + while ( (filename = g_dir_read_name(dir)) ) + { + fullpath = g_build_filename(path, filename, NULL); + if (!g_file_test(fullpath, G_FILE_TEST_IS_DIR)) + unlink(fullpath); + else if (recursive) + { + util_rmdir(fullpath, false, true); + rmdir(fullpath); + } + g_free(fullpath); } - g_free(fullpath); - } - if (filename == NULL && !only_content) { - rmdir(path); - } - g_dir_close(dir); + if (filename == NULL && !only_content) + rmdir(path); + + g_dir_close(dir); } /* util_get_file_content(const char *filename) return: char * (alloc) {{{*/ char * -util_get_file_content(const char *filename, gsize *length) { - GError *error = NULL; - char *content = NULL; - if (!(g_file_test(filename, G_FILE_TEST_IS_REGULAR) && g_file_get_contents(filename, &content, length, &error))) { - fprintf(stderr, "Cannot open %s: %s\n", filename, error ? error->message : "file not found"); - g_clear_error(&error); - } - return content; +util_get_file_content(const char *filename, gsize *length) +{ + GError *error = NULL; + char *content = NULL; + if (!(g_file_test(filename, G_FILE_TEST_IS_REGULAR) && g_file_get_contents(filename, &content, length, &error))) + { + fprintf(stderr, "Cannot open %s: %s\n", filename, error ? error->message : "file not found"); + g_clear_error(&error); + } + return content; }/*}}}*/ char ** -util_get_lines(const char *filename) { - char **ret = NULL; - char *content = util_get_file_content(filename, NULL); - if (content) { - ret = g_strsplit(content, "\n", -1); - g_free(content); - } - return ret; +util_get_lines(const char *filename) +{ + char **ret = NULL; + char *content = util_get_file_content(filename, NULL); + if (content) { + ret = g_strsplit(content, "\n", -1); + g_free(content); + } + return ret; } char * -util_expand_home(char *buffer, const char *filename, size_t length) { - if (*filename == '~') { - const char *home = g_getenv("HOME"); - snprintf(buffer, length, "%s%s", home, filename+1); - } - else - strncpy(buffer, filename, length); - return buffer; +util_expand_home(char *buffer, const char *filename, size_t length) +{ + if (*filename == '~') + { + const char *home = g_getenv("HOME"); + snprintf(buffer, length, "%s%s", home, filename+1); + } + else + strncpy(buffer, filename, length); + return buffer; } char * -util_normalize_filename(char *buffer, const char *filename, size_t length) { - char *tmp = buffer; - for (size_t i=0; *filename != 0 && i<length-1; i++, filename++, buffer++) { - *buffer = *filename == '/' ? '_' : *filename; - } - *buffer = 0; - return tmp; +util_normalize_filename(char *buffer, const char *filename, size_t length) +{ + char *tmp = buffer; + for (size_t i=0; *filename != 0 && i<length-1; i++, filename++, buffer++) + { + *buffer = *filename == '/' ? '_' : *filename; + } + *buffer = 0; + return tmp; } /* util_set_file_content(const char *filename, const char *content) {{{*/ gboolean -util_set_file_content(const char *filename, const char *content) { - GError *error = NULL; - gboolean ret = true; - char *link = NULL; - char *dname = NULL; - char *realpath = NULL; - char buffer[PATH_MAX]; - if (content == NULL || filename == NULL) - return false; - - filename = util_expand_home(buffer, filename, sizeof(buffer)); - if (g_file_test(filename, G_FILE_TEST_IS_SYMLINK)) { - link = g_file_read_link(filename, &error); - if (link == NULL) { - fprintf(stderr, "Cannot save %s : %s\n", filename, error->message); - g_clear_error(&error); - return false; - } - dname = g_path_get_dirname(filename); - realpath = g_build_filename(dname, link, NULL); - g_free(link); - g_free(dname); - filename = realpath; - } - if (!g_file_set_contents(filename, content, -1, &error)) { - fprintf(stderr, "Cannot save %s : %s", filename, error->message); - g_clear_error(&error); - ret = false; - } - g_free(realpath); - return ret; +util_set_file_content(const char *filename, const char *content) +{ + GError *error = NULL; + gboolean ret = true; + char *link = NULL; + char *dname = NULL; + char *realpath = NULL; + char buffer[PATH_MAX]; + if (content == NULL || filename == NULL) + return false; + + filename = util_expand_home(buffer, filename, sizeof(buffer)); + if (g_file_test(filename, G_FILE_TEST_IS_SYMLINK)) + { + link = g_file_read_link(filename, &error); + if (link == NULL) + { + fprintf(stderr, "Cannot save %s : %s\n", filename, error->message); + g_clear_error(&error); + return false; + } + dname = g_path_get_dirname(filename); + realpath = g_build_filename(dname, link, NULL); + g_free(link); + g_free(dname); + filename = realpath; + } + if (!g_file_set_contents(filename, content, -1, &error)) + { + fprintf(stderr, "Cannot save %s : %s", filename, error->message); + g_clear_error(&error); + ret = false; + } + g_free(realpath); + return ret; }/*}}}*/ /* util_build_path() return: char * (alloc) {{{*/ char * -util_build_path() { +util_build_path() +{ char *path = g_build_filename(g_get_user_config_dir(), dwb.misc.name, NULL); - if (!g_file_test(path, G_FILE_TEST_IS_DIR)) { + if (!g_file_test(path, G_FILE_TEST_IS_DIR)) g_mkdir_with_parents(path, 0755); - } return path; }/*}}}*/ /* dwb_check_directory(char *filename (alloc) ) return: char * (alloc) {{{*/ char * -util_check_directory(char *filename) { - GError *error = NULL; - char *ret = filename; - g_return_val_if_fail(filename != NULL, NULL); - if (g_file_test(filename, G_FILE_TEST_IS_SYMLINK)) { - ret = g_file_read_link(filename, &error); - if (error != NULL) { - fprintf(stderr, "Cannot read link %s : %s, creating a new directory\n", filename, error->message); - g_mkdir_with_parents(filename, 0700); - ret = filename; - g_clear_error(&error); - } - else { - g_free(filename); +util_check_directory(char *filename) +{ + GError *error = NULL; + char *ret = filename; + g_return_val_if_fail(filename != NULL, NULL); + if (g_file_test(filename, G_FILE_TEST_IS_SYMLINK)) + { + ret = g_file_read_link(filename, &error); + if (error != NULL) + { + fprintf(stderr, "Cannot read link %s : %s, creating a new directory\n", filename, error->message); + g_mkdir_with_parents(filename, 0700); + ret = filename; + g_clear_error(&error); + } + else + g_free(filename); } - } - else if (! g_file_test(filename, G_FILE_TEST_IS_DIR) ) { - g_mkdir_with_parents(filename, 0700); - } - return ret; + else if (! g_file_test(filename, G_FILE_TEST_IS_DIR) ) + g_mkdir_with_parents(filename, 0700); + return ret; }/*}}}*/ /* util_get_data_dir(const char *) return char * (alloc) {{{*/ char * -util_get_system_data_dir(const char *dir) { - char *path = NULL; - path = g_build_filename(SYSTEM_DATA_DIR, dwb.misc.name, dir, NULL); - if (g_file_test(path, G_FILE_TEST_IS_DIR)) { - return path; - } - g_free(path); - return NULL; +util_get_system_data_dir(const char *dir) +{ + char *path = NULL; + path = g_build_filename(SYSTEM_DATA_DIR, dwb.misc.name, dir, NULL); + if (g_file_test(path, G_FILE_TEST_IS_DIR)) + return path; + g_free(path); + return NULL; }/*}}}*/ /* util_get_user_data_dir {{{*/ char * -util_get_user_data_dir(const char *dir) { - const gchar *data_dir = g_get_user_data_dir(); - - char *path = g_build_filename(data_dir, dwb.misc.name, dir, NULL); - if (path != NULL && !g_file_test(path, G_FILE_TEST_IS_DIR)) { - g_free(path); - return NULL; - } - return path; +util_get_user_data_dir(const char *dir) +{ + const gchar *data_dir = g_get_user_data_dir(); + + char *path = g_build_filename(data_dir, dwb.misc.name, dir, NULL); + if (path != NULL && !g_file_test(path, G_FILE_TEST_IS_DIR)) + { + g_free(path); + return NULL; + } + return path; }/*}}}*/ char * -util_get_data_dir(const char *dir) { - char *path; - if ( (path = util_get_user_data_dir(dir)) ) - return path; - if ( (path = util_get_system_data_dir(dir)) ) - return path; - return NULL; +util_get_data_dir(const char *dir) +{ + char *path; + if ( (path = util_get_user_data_dir(dir)) ) + return path; + if ( (path = util_get_system_data_dir(dir)) ) + return path; + return NULL; } /* util_get_data_file(const char *filename) return: filename (alloc) or NULL {{{*/ char * -util_get_data_file(const char *filename, const char *dir) { - if (filename == NULL) - return NULL; - char *path = NULL; - char *ret = NULL; - char *basename = g_path_get_basename(filename); - path = util_get_user_data_dir(dir); - if (path != NULL) { - ret = g_build_filename(path, basename, NULL); - if (g_file_test(ret, G_FILE_TEST_EXISTS)) - goto clean; - } - - path = util_get_system_data_dir(dir); - if (path != NULL) { - ret = g_build_filename(path, basename, NULL); - if (g_file_test(ret, G_FILE_TEST_EXISTS)) - goto clean; - } - ret = g_strdup(filename); +util_get_data_file(const char *filename, const char *dir) +{ + if (filename == NULL) + return NULL; + char *path = NULL; + char *ret = NULL; + char *basename = g_path_get_basename(filename); + path = util_get_user_data_dir(dir); + if (path != NULL) + { + ret = g_build_filename(path, basename, NULL); + if (g_file_test(ret, G_FILE_TEST_EXISTS)) + goto clean; + } + + path = util_get_system_data_dir(dir); + if (path != NULL) + { + ret = g_build_filename(path, basename, NULL); + if (g_file_test(ret, G_FILE_TEST_EXISTS)) + goto clean; + } + ret = g_strdup(filename); clean: - g_free(path); - g_free(basename); - return ret; + g_free(path); + g_free(basename); + return ret; }/*}}}*/ /* util_file_remove_line const char *filename, const char *line {{{*/ int -util_file_remove_line(const char *filename, const char *line) { - int ret = 1; - char *content = util_get_file_content(filename, NULL); - char **lines = g_strsplit(content, "\n", -1); - const char *tmp; - GString *buffer = g_string_new(NULL); - int last_non_empty = g_strv_length(lines)-1; - for (int i=0; i<last_non_empty; i++) { - tmp = lines[i]; - while (g_ascii_isspace(*tmp)) - tmp++; - if (*tmp == '\0' || *tmp == '#') - g_string_append_printf(buffer, "%s\n", lines[i]); - else if (*tmp != '\0' && STRCMP_FIRST_WORD(tmp, line)) { - g_string_append_printf(buffer, "%s\n", lines[i]); +util_file_remove_line(const char *filename, const char *line) +{ + int ret = 1; + char *content = util_get_file_content(filename, NULL); + char **lines = g_strsplit(content, "\n", -1); + const char *tmp; + GString *buffer = g_string_new(NULL); + int last_non_empty = g_strv_length(lines)-1; + for (int i=0; i<last_non_empty; i++) + { + tmp = lines[i]; + while (g_ascii_isspace(*tmp)) + tmp++; + if (*tmp == '\0' || *tmp == '#') + g_string_append_printf(buffer, "%s\n", lines[i]); + else if (*tmp != '\0' && STRCMP_FIRST_WORD(tmp, line)) + g_string_append_printf(buffer, "%s\n", lines[i]); } - } - g_file_set_contents(filename, buffer->str, -1, NULL); + g_file_set_contents(filename, buffer->str, -1, NULL); - g_string_free(buffer, true); - g_free(content); - g_strfreev(lines); + g_string_free(buffer, true); + g_free(content); + g_strfreev(lines); - return ret; + return ret; }/*}}}*/ /* NAVIGATION {{{*/ /* dwb_navigation_new(const char *uri, const char *title) {{{*/ Navigation * -dwb_navigation_new(const char *uri, const char *title) { - Navigation *nv = dwb_malloc(sizeof(Navigation)); - nv->first = uri ? g_strdup(uri) : NULL; - nv->second = title ? g_strdup(title) : NULL; - return nv; +dwb_navigation_new(const char *uri, const char *title) +{ + Navigation *nv = dwb_malloc(sizeof(Navigation)); + nv->first = uri ? g_strdup(uri) : NULL; + nv->second = title ? g_strdup(title) : NULL; + return nv; }/*}}}*/ Navigation * -dwb_navigation_dup(Navigation *n) { - return dwb_navigation_new(n->first, n->second); +dwb_navigation_dup(Navigation *n) +{ + return dwb_navigation_new(n->first, n->second); } /* dwb_navigation_new_from_line(const char *text){{{*/ Navigation * -dwb_navigation_new_from_line(const char *text) { - char **line; - Navigation *nv = NULL; - if (text == NULL) - return NULL; - while (g_ascii_isspace(*text)) - text++; - - if (*text != '\0') { - line = g_strsplit(text, " ", 2); - nv = dwb_navigation_new(line[0], line[1]); - g_strfreev(line); - } - return nv; +dwb_navigation_new_from_line(const char *text) +{ + char **line; + Navigation *nv = NULL; + if (text == NULL) + return NULL; + while (g_ascii_isspace(*text)) + text++; + + if (*text != '\0') + { + line = g_strsplit(text, " ", 2); + nv = dwb_navigation_new(line[0], line[1]); + g_strfreev(line); + } + return nv; }/*}}}*/ /* dwb_navigation_free(Navigation *n){{{*/ void -dwb_navigation_free(Navigation *n) { - if (n != NULL) { - g_free(n->first); - g_free(n->second); - g_free(n); - } +dwb_navigation_free(Navigation *n) +{ + if (n != NULL) + { + g_free(n->first); + g_free(n->second); + g_free(n); + } }/*}}}*/ /*}}}*/ /* QUICKMARK {{{*/ /* dwb_quickmark_new(const char *uri, const char *title, const char *key) {{{*/ Quickmark * -dwb_quickmark_new(const char *uri, const char *title, const char *key) { - Quickmark *q = dwb_malloc(sizeof(Quickmark)); - q->key = key ? g_strdup(key) : NULL; - q->nav = dwb_navigation_new(uri, title); - return q; +dwb_quickmark_new(const char *uri, const char *title, const char *key) +{ + Quickmark *q = dwb_malloc(sizeof(Quickmark)); + q->key = key ? g_strdup(key) : NULL; + q->nav = dwb_navigation_new(uri, title); + return q; }/* }}} */ /* dwb_quickmark_new_from_line(const char *line) {{{*/ Quickmark * -dwb_quickmark_new_from_line(const char *line) { - Quickmark *q = NULL; - char **token; - if (line == NULL) - return NULL; - while (g_ascii_isspace(*line)) - line++; - if (*line != '\0') { - token = g_strsplit(line, " ", 3); - q = dwb_quickmark_new(token[1], token[2], token[0]); - g_strfreev(token); - } - return q; +dwb_quickmark_new_from_line(const char *line) +{ + Quickmark *q = NULL; + char **token; + if (line == NULL) + return NULL; + while (g_ascii_isspace(*line)) + line++; + if (*line != '\0') + { + token = g_strsplit(line, " ", 3); + q = dwb_quickmark_new(token[1], token[2], token[0]); + g_strfreev(token); + } + return q; }/*}}}*/ /* dwb_quickmark_free(Quickmark *q) {{{*/ void -dwb_quickmark_free(Quickmark *q) { - if (q != NULL) { - g_free(q->key); - dwb_navigation_free(q->nav); - g_free(q); - } +dwb_quickmark_free(Quickmark *q) +{ + if (q != NULL) + { + g_free(q->key); + dwb_navigation_free(q->nav); + g_free(q); + } }/*}}}*/ /*}}}*/ /* dwb_return(const char *) return char * (alloc) {{{*/ char * -dwb_return(const char *ret) { - return ret && strlen(ret) > 0 ? g_strdup(ret) : NULL; +dwb_return(const char *ret) +{ + return ret && strlen(ret) > 0 ? g_strdup(ret) : NULL; }/*}}}*/ /* dwb_malloc(size_t size) return: void* {{{*/ void * -dwb_malloc(size_t size) { - void *r; - if ( !(r = malloc(size)) ) { - fprintf(stderr, "Cannot malloc %d bytes of memory", (int)size); - dwb_end(); - exit(EXIT_SUCCESS); - } - return r; +dwb_malloc(size_t size) +{ + void *r; + if ( !(r = malloc(size)) ) + { + fprintf(stderr, "Cannot malloc %d bytes of memory", (int)size); + dwb_end(); + exit(EXIT_SUCCESS); + } + return r; }/*}}}*/ /* util_domain_from_uri (char *uri) return: char* {{{*/ char * -util_domain_from_uri(const char *uri) { - if (!uri) - return NULL; +util_domain_from_uri(const char *uri) +{ + if (!uri) + return NULL; - char *uri_p = (char*)uri; - char *p = NULL; - char domain[STRING_LENGTH] = { 0 }; + char *uri_p = (char*)uri; + char *p = NULL; + char domain[STRING_LENGTH] = { 0 }; - if ( (p = strstr(uri, "://")) ) { - uri_p = p + 3; - } - if ( (p = strchr(uri_p, '/')) != NULL ) { - strncpy(domain, uri_p, MIN((unsigned int)(p - uri_p), sizeof(domain))); - } - char *ret = domain[0] ? domain : uri_p; - return g_strdup(ret); + if ( (p = strstr(uri, "://")) ) + uri_p = p + 3; + if ( (p = strchr(uri_p, '/')) != NULL ) + strncpy(domain, uri_p, MIN((unsigned int)(p - uri_p), sizeof(domain))); + char *ret = domain[0] ? domain : uri_p; + return g_strdup(ret); }/*}}}*/ /* util_compare_path(char *uri) return: char* {{{*/ int -util_compare_path(const char *a, const char *b) { - if (a == NULL) - return 1; - else if (b == NULL) - return -1; - return strcasecmp(g_strrstr(a, "/"), g_strrstr(b, "/")); +util_compare_path(const char *a, const char *b) +{ + if (a == NULL) + return 1; + else if (b == NULL) + return -1; + return strcasecmp(g_strrstr(a, "/"), g_strrstr(b, "/")); }/*}}}*/ /* util_basename(const char *path) return: char * {{{*/ @@ -646,208 +710,223 @@ util_compare_path(const char *a, const char *b) { */ /* dwb_comp_get_path(GList *, char *) return GList* */ char * -util_basename(const char *path) { - int l = strlen(path); - if (path[l-1] == '/') - return NULL; +util_basename(const char *path) +{ + int l = strlen(path); + if (path[l-1] == '/') + return NULL; - char *ret = strrchr(path, '/'); - if (ret && l > 1) { - ret++; - } - return ret; + char *ret = strrchr(path, '/'); + if (ret && l > 1) + ret++; + return ret; }/*}}}*/ /* util_file_add(const char *filename, const char *text, int append, int max){{{*/ gboolean -util_file_add(const char *filename, const char *text, int append, int max) { - if (!text) - return false; - - FILE *file; - char buffer[STRING_LENGTH]; - GString *content = g_string_new(NULL); - char *tmp; - - if (!append) - g_string_append_printf(content, "%s\n", text); - - gboolean ret = false; - if ( (file = fopen(filename, "r"))) { - for (int i=0; fgets(buffer, sizeof(buffer), file) && (max < 0 || i < max); i++) { - tmp = buffer; - while (g_ascii_isspace(*tmp) && *tmp != '\n') - tmp++; - if (*tmp == '#' || *tmp == '\n') - g_string_append(content, buffer); - else if (STRCMP_FIRST_WORD(text, tmp) && STRCMP_SKIP_NEWLINE(text, tmp) ) { - g_string_append(content, buffer); - } +util_file_add(const char *filename, const char *text, int append, int max) +{ + if (!text) + return false; + + FILE *file; + char buffer[STRING_LENGTH]; + GString *content = g_string_new(NULL); + char *tmp; + + if (!append) + g_string_append_printf(content, "%s\n", text); + + gboolean ret = false; + if ( (file = fopen(filename, "r"))) + { + for (int i=0; fgets(buffer, sizeof(buffer), file) && (max < 0 || i < max); i++) + { + tmp = buffer; + while (g_ascii_isspace(*tmp) && *tmp != '\n') + tmp++; + if (*tmp == '#' || *tmp == '\n') + g_string_append(content, buffer); + else if (STRCMP_FIRST_WORD(text, tmp) && STRCMP_SKIP_NEWLINE(text, tmp) ) + g_string_append(content, buffer); + } + fclose(file); } - fclose(file); - } - if (append) - g_string_append_printf(content, "%s\n", text); - ret = util_set_file_content(filename, content->str); - - g_string_free(content, true); - return ret; + if (append) + g_string_append_printf(content, "%s\n", text); + ret = util_set_file_content(filename, content->str); + + g_string_free(content, true); + return ret; } gboolean -util_file_add_navigation(const char *filename, const Navigation *n, int append, int max) { - gboolean ret; - char *text = g_strdup_printf("%s %s", n->first, n->second); - ret = util_file_add(filename, text, append, max); - g_free(text); - return ret; +util_file_add_navigation(const char *filename, const Navigation *n, int append, int max) +{ + gboolean ret; + char *text = g_strdup_printf("%s %s", n->first, n->second); + ret = util_file_add(filename, text, append, max); + g_free(text); + return ret; }/*}}}*/ void -gtk_box_insert(GtkBox *box, GtkWidget *child, gboolean expand, gboolean fill, gint padding, int position, GtkPackType packtype) { - if (packtype == GTK_PACK_START) - gtk_box_pack_start(box, child, expand, fill, padding); - else - gtk_box_pack_end(box, child, expand, fill, padding); - gtk_box_reorder_child(box, child, position); +gtk_box_insert(GtkBox *box, GtkWidget *child, gboolean expand, gboolean fill, gint padding, int position, GtkPackType packtype) +{ + if (packtype == GTK_PACK_START) + gtk_box_pack_start(box, child, expand, fill, padding); + else + gtk_box_pack_end(box, child, expand, fill, padding); + gtk_box_reorder_child(box, child, position); } void -gtk_widget_remove_from_parent(GtkWidget *widget) { - g_object_ref(widget); - GtkWidget *parent = gtk_widget_get_parent(widget); - gtk_container_remove(GTK_CONTAINER(parent), widget); +gtk_widget_remove_from_parent(GtkWidget *widget) +{ + g_object_ref(widget); + GtkWidget *parent = gtk_widget_get_parent(widget); + gtk_container_remove(GTK_CONTAINER(parent), widget); } char * -util_strcasestr(const char *haystack, const char *needle) { - if (needle == NULL || ! *needle ) - return (char *) haystack; - for (; *haystack; haystack++) { - if (tolower((int)*haystack) == tolower((int)*needle)) { - const char *h = haystack, *n = needle; - for (; *h && *n && tolower((int)*h) == tolower((int)*n); ++h, ++n); - if (! *n ) - return (char*)haystack; +util_strcasestr(const char *haystack, const char *needle) +{ + if (needle == NULL || ! *needle ) + return (char *) haystack; + for (; *haystack; haystack++) { + if (tolower((int)*haystack) == tolower((int)*needle)) + { + const char *h = haystack, *n = needle; + for (; *h && *n && tolower((int)*h) == tolower((int)*n); ++h, ++n); + if (! *n ) + return (char*)haystack; + } } - } - return NULL; + return NULL; } int -util_strlen_trailing_space(const char *str) { - int len; - for (len=0; *str != '\0'; str++, len++); - return len; +util_strlen_trailing_space(const char *str) +{ + int len; + for (len=0; *str != '\0'; str++, len++); + return len; } const char * -util_str_chug(const char *str) { - if (str == NULL) +util_str_chug(const char *str) +{ + if (str == NULL) + return str; + while (g_ascii_isspace(*str)) + str++; return str; - while (g_ascii_isspace(*str)) - str++; - return str; } gchar * -util_create_json(int n, ...) { - va_list args; - va_start(args, n); - const gchar *key, *cval; - gdouble dval; - gint ival; guint uival; gulong ulval; glong lval; - gboolean bval; - gchar *ret; - - gint type; - setlocale(LC_NUMERIC, "C"); - - GString *string = g_string_new("{"); - - for (int i=0; i<n; i++) { - type = va_arg(args, gint); - key = va_arg(args, gchar*); - g_string_append_printf(string, "\"%s\":", key); - switch (type) { - case CHAR : - cval = va_arg(args, gchar*); - if (cval == NULL) { - g_string_append(string, "null"); - } - else { - g_string_append_c(string, '"'); - while (*cval) { - if ( *cval == '"' - || *cval == '/' - || *cval == '\\' - || *cval == '\b' - || *cval == '\f' - || *cval == '\n' - || *cval == '\r' - || *cval == '\t') - g_string_append_c(string, '\\'); - g_string_append_c(string, *cval); - cval++; - } - g_string_append_c(string, '"'); +util_create_json(int n, ...) +{ + va_list args; + va_start(args, n); + const gchar *key, *cval; + gdouble dval; + gint ival; guint uival; gulong ulval; glong lval; + gboolean bval; + gchar *ret; + + gint type; + setlocale(LC_NUMERIC, "C"); + + GString *string = g_string_new("{"); + + for (int i=0; i<n; i++) + { + type = va_arg(args, gint); + key = va_arg(args, gchar*); + g_string_append_printf(string, "\"%s\":", key); + switch (type) + { + case CHAR : + cval = va_arg(args, gchar*); + if (cval == NULL) + g_string_append(string, "null"); + else + { + g_string_append_c(string, '"'); + while (*cval) { + if ( *cval == '"' + || *cval == '/' + || *cval == '\\' + || *cval == '\b' + || *cval == '\f' + || *cval == '\n' + || *cval == '\r' + || *cval == '\t') + g_string_append_c(string, '\\'); + g_string_append_c(string, *cval); + cval++; + } + g_string_append_c(string, '"'); + } + break; + case INTEGER : + ival = va_arg(args, gint); + g_string_append_printf(string, "%d", ival); + break; + case UINTEGER : + uival = va_arg(args, guint); + g_string_append_printf(string, "%u", uival); + break; + case LONG : + lval = va_arg(args, glong); + g_string_append_printf(string, "%ld", lval); + break; + case ULONG : + ulval = va_arg(args, gulong); + g_string_append_printf(string, "%lu", ulval); + break; + case DOUBLE : + dval = va_arg(args, double); + g_string_append_printf(string, "%f", dval); + break; + case BOOLEAN: + bval = va_arg(args, gboolean); + g_string_append_printf(string, "%s", bval ? "true" : "false"); + break; + default : g_string_append(string, "null"); break; } - break; - case INTEGER : - ival = va_arg(args, gint); - g_string_append_printf(string, "%d", ival); - break; - case UINTEGER : - uival = va_arg(args, guint); - g_string_append_printf(string, "%u", uival); - break; - case LONG : - lval = va_arg(args, glong); - g_string_append_printf(string, "%ld", lval); - break; - case ULONG : - ulval = va_arg(args, gulong); - g_string_append_printf(string, "%lu", ulval); - break; - case DOUBLE : - dval = va_arg(args, double); - g_string_append_printf(string, "%f", dval); - break; - case BOOLEAN: - bval = va_arg(args, gboolean); - g_string_append_printf(string, "%s", bval ? "true" : "false"); - break; - default : g_string_append(string, "null"); break; + if (i<n-1) + g_string_append_c(string, ','); } - if (i<n-1) - g_string_append_c(string, ','); - } - va_end(args); - g_string_append_c(string, '}'); - ret = string->str; - g_string_free(string, false); - return ret; + va_end(args); + g_string_append_c(string, '}'); + ret = string->str; + g_string_free(string, false); + return ret; } Sanitize -util_string_to_sanitize(const char *string) { - Sanitize s = 0; - if (string == NULL || *string == 0) - return SANITIZE_ALL; - char **token = g_strsplit(string, " ", -1); - for (int i=0; token[i]; i++) { - if (!strcmp(token[i], "history")) - s |= SANITIZE_HISTORY; - else if (!strcmp(token[i], "cookies")) - s |= SANITIZE_COOKIES; - else if (!strcmp(token[i], "cache")) - s |= SANITIZE_CACHE; - else if (!strcmp(token[i], "all")) - s |= SANITIZE_ALL; - else if (!strcmp(token[i], "session")) - s |= SANITIZE_SESSION; - else if (!strcmp(token[i], "allsessions")) - s |= SANITIZE_ALLSESSIONS; - else { - s = SANITIZE_ERROR; - break; +util_string_to_sanitize(const char *string) +{ + Sanitize s = 0; + if (string == NULL || *string == 0) + return SANITIZE_ALL; + char **token = g_strsplit(string, " ", -1); + for (int i=0; token[i]; i++) + { + if (!strcmp(token[i], "history")) + s |= SANITIZE_HISTORY; + else if (!strcmp(token[i], "cookies")) + s |= SANITIZE_COOKIES; + else if (!strcmp(token[i], "cache")) + s |= SANITIZE_CACHE; + else if (!strcmp(token[i], "all")) + s |= SANITIZE_ALL; + else if (!strcmp(token[i], "session")) + s |= SANITIZE_SESSION; + else if (!strcmp(token[i], "allsessions")) + s |= SANITIZE_ALLSESSIONS; + else + { + s = SANITIZE_ERROR; + break; + } } - } - g_strfreev(token); - return s; + g_strfreev(token); + return s; } |