# HG changeset patch # User zas_ # Date 1220182044 0 # Node ID 650c02c0c8ff5f1b1b2389748e1a9d25eec5db51 # Parent 9962b24b6b437575b6c22e1fe29cd81860f1b3b2 Move quoted_value() and escquote_value() to misc.[ch]. diff -r 9962b24b6b43 -r 650c02c0c8ff src/collect-io.c --- a/src/collect-io.c Sun Aug 31 10:51:41 2008 +0000 +++ b/src/collect-io.c Sun Aug 31 11:27:24 2008 +0000 @@ -17,12 +17,11 @@ #include "collect.h" #include "filedata.h" #include "layout_util.h" -#include "rcfile.h" +#include "misc.h" #include "secure_save.h" #include "thumb.h" #include "ui_fileops.h" - #define GQ_COLLECTION_MARKER "#" GQ_APPNAME #define GQ_COLLECTION_FAIL_MIN 300 diff -r 9962b24b6b43 -r 650c02c0c8ff src/filedata.c --- a/src/filedata.c Sun Aug 31 10:51:41 2008 +0000 +++ b/src/filedata.c Sun Aug 31 11:27:24 2008 +0000 @@ -16,8 +16,6 @@ #include "filefilter.h" #include "cache.h" -#include "rcfile.h" -#include "secure_save.h" #include "thumb_standard.h" #include "ui_fileops.h" diff -r 9962b24b6b43 -r 650c02c0c8ff src/filefilter.c --- a/src/filefilter.c Sun Aug 31 10:51:41 2008 +0000 +++ b/src/filefilter.c Sun Aug 31 11:27:24 2008 +0000 @@ -15,12 +15,11 @@ #include "filefilter.h" #include "cache.h" -#include "rcfile.h" +#include "misc.h" #include "secure_save.h" #include "thumb_standard.h" #include "ui_fileops.h" - /* *----------------------------------------------------------------------------- * file filtering diff -r 9962b24b6b43 -r 650c02c0c8ff src/misc.c --- a/src/misc.c Sun Aug 31 10:51:41 2008 +0000 +++ b/src/misc.c Sun Aug 31 11:27:24 2008 +0000 @@ -108,3 +108,81 @@ return g_build_filename(home, G_DIR_SEPARATOR_S, NULL); #endif } + +/* + returns text without quotes or NULL for empty or broken string + any text up to first '"' is skipped + tail is set to point at the char after the second '"' + or at the ending \0 + +*/ + +gchar *quoted_value(const gchar *text, const gchar **tail) +{ + const gchar *ptr; + gint c = 0; + gint l = strlen(text); + gchar *retval = NULL; + + if (tail) *tail = text; + + if (l == 0) return retval; + + while (c < l && text[c] != '"') c++; + if (text[c] == '"') + { + gint e; + c++; + ptr = text + c; + e = c; + while (e < l) + { + if (text[e-1] != '\\' && text[e] == '"') break; + e++; + } + if (text[e] == '"') + { + if (e - c > 0) + { + gchar *substring = g_strndup(ptr, e - c); + + if (substring) + { + retval = g_strcompress(substring); + g_free(substring); + } + } + } + if (tail) *tail = text + e + 1; + } + else + /* for compatibility with older formats (<0.3.7) + * read a line without quotes too */ + { + c = 0; + while (c < l && text[c] != '\n' && !g_ascii_isspace(text[c])) c++; + if (c != 0) + { + retval = g_strndup(text, c); + } + if (tail) *tail = text + c; + } + + return retval; +} + +gchar *escquote_value(const gchar *text) +{ + gchar *e; + + if (!text) return g_strdup("\"\""); + + e = g_strescape(text, ""); + if (e) + { + gchar *retval = g_strdup_printf("\"%s\"", e); + g_free(e); + return retval; + } + return g_strdup("\"\""); +} diff -r 9962b24b6b43 -r 650c02c0c8ff src/misc.h --- a/src/misc.h Sun Aug 31 10:51:41 2008 +0000 +++ b/src/misc.h Sun Aug 31 11:27:24 2008 +0000 @@ -17,5 +17,7 @@ gchar *utf8_validate_or_convert(const gchar *text); gint utf8_compare(const gchar *s1, const gchar *s2, gboolean case_sensitive); gchar *expand_tilde(const gchar *filename); +gchar *quoted_value(const gchar *text, const gchar **tail); +gchar *escquote_value(const gchar *text); #endif /* MISC_H */ diff -r 9962b24b6b43 -r 650c02c0c8ff src/rcfile.c --- a/src/rcfile.c Sun Aug 31 10:51:41 2008 +0000 +++ b/src/rcfile.c Sun Aug 31 11:27:24 2008 +0000 @@ -19,95 +19,18 @@ #include "bar_exif.h" #include "editors.h" #include "filefilter.h" +#include "misc.h" #include "pixbuf-renderer.h" #include "secure_save.h" #include "slideshow.h" #include "ui_fileops.h" - /* *----------------------------------------------------------------------------- * line write/parse routines (private) *----------------------------------------------------------------------------- */ -/* - returns text without quotes or NULL for empty or broken string - any text up to first '"' is skipped - tail is set to point at the char after the second '"' - or at the ending \0 - -*/ - -gchar *quoted_value(const gchar *text, const gchar **tail) -{ - const gchar *ptr; - gint c = 0; - gint l = strlen(text); - gchar *retval = NULL; - - if (tail) *tail = text; - - if (l == 0) return retval; - - while (c < l && text[c] != '"') c++; - if (text[c] == '"') - { - gint e; - c++; - ptr = text + c; - e = c; - while (e < l) - { - if (text[e-1] != '\\' && text[e] == '"') break; - e++; - } - if (text[e] == '"') - { - if (e - c > 0) - { - gchar *substring = g_strndup(ptr, e - c); - - if (substring) - { - retval = g_strcompress(substring); - g_free(substring); - } - } - } - if (tail) *tail = text + e + 1; - } - else - /* for compatibility with older formats (<0.3.7) - * read a line without quotes too */ - { - c = 0; - while (c < l && text[c] != '\n' && !g_ascii_isspace(text[c])) c++; - if (c != 0) - { - retval = g_strndup(text, c); - } - if (tail) *tail = text + c; - } - - return retval; -} - -gchar *escquote_value(const gchar *text) -{ - gchar *e; - - if (!text) return g_strdup("\"\""); - - e = g_strescape(text, ""); - if (e) - { - gchar *retval = g_strdup_printf("\"%s\"", e); - g_free(e); - return retval; - } - return g_strdup("\"\""); -} static void write_char_option(SecureSaveInfo *ssi, gchar *label, gchar *text) { diff -r 9962b24b6b43 -r 650c02c0c8ff src/rcfile.h --- a/src/rcfile.h Sun Aug 31 10:51:41 2008 +0000 +++ b/src/rcfile.h Sun Aug 31 11:27:24 2008 +0000 @@ -14,9 +14,6 @@ #ifndef RCFILE_H #define RCFILE_H -gchar *quoted_value(const gchar *text, const gchar **tail); -gchar *escquote_value(const gchar *text); - gboolean save_options_to(const gchar *utf8_path, ConfOptions *options); gboolean load_options_from(const gchar *utf8_path, ConfOptions *options);