From 7725546b83707d675c466dd1b9eb96380ad2f067 Mon Sep 17 00:00:00 2001 From: Laurent Monin Date: Sun, 31 Aug 2008 11:27:24 +0000 Subject: [PATCH] Move quoted_value() and escquote_value() to misc.[ch]. --- src/collect-io.c | 3 +- src/filedata.c | 2 -- src/filefilter.c | 3 +- src/misc.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++ src/misc.h | 2 ++ src/rcfile.c | 79 +----------------------------------------------- src/rcfile.h | 3 -- 7 files changed, 83 insertions(+), 87 deletions(-) diff --git a/src/collect-io.c b/src/collect-io.c index fd84f33f..941964a7 100644 --- a/src/collect-io.c +++ b/src/collect-io.c @@ -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 --git a/src/filedata.c b/src/filedata.c index c2b41a60..7ac66015 100644 --- a/src/filedata.c +++ b/src/filedata.c @@ -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 --git a/src/filefilter.c b/src/filefilter.c index b1c16f9c..481051e1 100644 --- a/src/filefilter.c +++ b/src/filefilter.c @@ -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 --git a/src/misc.c b/src/misc.c index 47bbdc35..d52e1e6f 100644 --- a/src/misc.c +++ b/src/misc.c @@ -108,3 +108,81 @@ gchar *expand_tilde(const gchar *filename) 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 --git a/src/misc.h b/src/misc.h index 6489ae54..692a3f65 100644 --- a/src/misc.h +++ b/src/misc.h @@ -17,5 +17,7 @@ gdouble get_zoom_increment(void); 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 --git a/src/rcfile.c b/src/rcfile.c index 255460e9..135b1e9f 100644 --- a/src/rcfile.c +++ b/src/rcfile.c @@ -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 --git a/src/rcfile.h b/src/rcfile.h index a565dd9a..a7628380 100644 --- a/src/rcfile.h +++ b/src/rcfile.h @@ -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); -- 2.20.1