diff options
author | Guy Harris <guy@alum.mit.edu> | 2015-12-17 19:18:33 -0800 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2015-12-18 03:19:03 +0000 |
commit | d222dd398904dda499cb6fe2d5f300643076c2b1 (patch) | |
tree | 2ed0f5f624edd872ec333a4858ceed8da3d67dee /epan/prefs.c | |
parent | 4bec4b0167961bf557f82fb20ba3e95e4dfd3f86 (diff) | |
download | wireshark-d222dd398904dda499cb6fe2d5f300643076c2b1.tar.gz wireshark-d222dd398904dda499cb6fe2d5f300643076c2b1.tar.bz2 wireshark-d222dd398904dda499cb6fe2d5f300643076c2b1.zip |
Provide routines to set string-like and range preferences from a string.
That gets rid of some duplicate code.
Change-Id: I4b65c6c73929d18602f6b0425e4f3dbbabbf0127
Reviewed-on: https://code.wireshark.org/review/12713
Reviewed-by: Guy Harris <guy@alum.mit.edu>
Diffstat (limited to 'epan/prefs.c')
-rw-r--r-- | epan/prefs.c | 84 |
1 files changed, 52 insertions, 32 deletions
diff --git a/epan/prefs.c b/epan/prefs.c index ec288b1864..c6e7b1e9a4 100644 --- a/epan/prefs.c +++ b/epan/prefs.c @@ -1023,6 +1023,23 @@ register_string_like_preference(module_t *module, const char *name, } /* + * For use by UI code that sets preferences. + */ +void +prefs_set_string_like_value(pref_t *pref, const gchar *value, gboolean *changed) +{ + if (*pref->varp.string) { + if (strcmp(*pref->varp.string, value) != 0) { + *changed = TRUE; + g_free((void *)*pref->varp.string); + *pref->varp.string = g_strdup(value); + } + } else if (value) { + *pref->varp.string = g_strdup(value); + } +} + +/* * Register a preference with a character-string value. */ void @@ -1107,6 +1124,36 @@ prefs_register_range_preference(module_t *module, const char *name, preference->stashed_val.range = NULL; } +static gboolean +prefs_set_range_value_work(pref_t *pref, const gchar *value, + gboolean return_range_errors, gboolean *changed) +{ + range_t *newrange; + + if (range_convert_str_work(&newrange, value, pref->info.max_value, + return_range_errors) != CVT_NO_ERROR) { + return FALSE; /* number was bad */ + } + + if (!ranges_are_equal(*pref->varp.range, newrange)) { + *changed = TRUE; + g_free(*pref->varp.range); + *pref->varp.range = newrange; + } else { + g_free(newrange); + } + return TRUE; +} + +/* + * For use by UI code that sets preferences. + */ +gboolean +prefs_set_range_value(pref_t *pref, const gchar *value, gboolean *changed) +{ + return prefs_set_range_value_work(pref, value, TRUE, changed); +} + /* * Register a static text 'preference'. It can be used to add explanatory * text inline with other preferences in the GUI. @@ -1456,15 +1503,7 @@ column_hidden_set_cb(pref_t* pref, const gchar* value, gboolean* changed) fmt_data *cfmt; pref_t *format_pref; - if (*pref->varp.string) { - if (strcmp(*pref->varp.string, value) != 0) { - *changed = TRUE; - g_free((void *)*pref->varp.string); - *pref->varp.string = g_strdup(value); - } - } else if (value) { - *pref->varp.string = g_strdup(value); - } + prefs_set_string_like_value(pref, value, changed); /* * Set the "visible" flag for the existing columns; we need to @@ -1995,11 +2034,7 @@ colorized_frame_reset_cb(pref_t* pref) static prefs_set_pref_e colorized_frame_set_cb(pref_t* pref, const gchar* value, gboolean* changed) { - if (strcmp(*pref->varp.string, value) != 0) { - *changed = TRUE; - g_free((void *)*pref->varp.string); - *pref->varp.string = g_strdup(value); - } + prefs_set_string_like_value(pref, value, changed); return PREFS_SET_OK; } @@ -4394,29 +4429,14 @@ set_pref(gchar *pref_name, const gchar *value, void *private_data _U_, case PREF_STRING: case PREF_FILENAME: case PREF_DIRNAME: - if (strcmp(*pref->varp.string, value) != 0) { - module->prefs_changed = TRUE; - g_free((void *)*pref->varp.string); - *pref->varp.string = g_strdup(value); - } + prefs_set_string_like_value(pref, value, &module->prefs_changed); break; case PREF_RANGE: { - range_t *newrange; - - if (range_convert_str_work(&newrange, value, pref->info.max_value, - return_range_errors) != CVT_NO_ERROR) { + if (!prefs_set_range_value_work(pref, value, return_range_errors, + &module->prefs_changed)) return PREFS_SET_SYNTAX_ERR; /* number was bad */ - } - - if (!ranges_are_equal(*pref->varp.range, newrange)) { - module->prefs_changed = TRUE; - g_free(*pref->varp.range); - *pref->varp.range = newrange; - } else { - g_free (newrange); - } break; } |