diff options
author | Michal Labedzki <michal.labedzki@tieto.com> | 2015-12-11 09:34:08 +0100 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2015-12-20 08:21:02 +0000 |
commit | 9bb3f6be4c18822267a64633c298e1a8f1809221 (patch) | |
tree | de9b8934c58f239e29d0227039ad7f55f3d42f06 /epan | |
parent | 7e0ec2c8eb3c88e70992dc40b130c76177b83a30 (diff) |
Qt: Add missing multi-field column validation
GTK already has it, but Qt forgot about it, so multi-field custom column
works ok if previously saved in GTK-shark. Invalid validation prevent from
modifying and saving multi-field custom column in Qt version.
While at it, rename "custom field" to "custom fields" to ensure
we think about multi-field custom column.
Change-Id: I99588150ccb38be11b75f5dd5b0f6443e7055ebb
Reviewed-on: https://code.wireshark.org/review/12685
Petri-Dish: Michal Labedzki <michal.labedzki@tieto.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r-- | epan/column-info.h | 4 | ||||
-rw-r--r-- | epan/column-utils.c | 32 | ||||
-rw-r--r-- | epan/column.c | 26 | ||||
-rw-r--r-- | epan/column.h | 6 | ||||
-rw-r--r-- | epan/prefs.c | 62 |
5 files changed, 65 insertions, 65 deletions
diff --git a/epan/column-info.h b/epan/column-info.h index e78ef3a575..f2c0ef25fe 100644 --- a/epan/column-info.h +++ b/epan/column-info.h @@ -48,9 +48,9 @@ typedef struct { gint col_fmt; /**< Format of column */ gboolean *fmt_matx; /**< Specifies which formats apply to a column */ gchar *col_title; /**< Column titles */ - gchar *col_custom_field; /**< Custom column field */ + gchar *col_custom_fields; /**< Custom column fields */ gint col_custom_occurrence;/**< Custom column field occurrence */ - GSList *col_custom_field_ids; /**< Custom column field id */ + GSList *col_custom_fields_ids;/**< Custom column fields id */ struct epan_dfilter *col_custom_dfilter; /**< Compiled custom column field */ const gchar *col_data; /**< Column data */ gchar *col_buf; /**< Buffer into which to copy data for column */ diff --git a/epan/column-utils.c b/epan/column-utils.c index 261e459cd6..61f6d84589 100644 --- a/epan/column-utils.c +++ b/epan/column-utils.c @@ -55,7 +55,7 @@ col_setup(column_info *cinfo, const gint num_cols) cinfo->col_first = g_new(int, NUM_COL_FMTS); cinfo->col_last = g_new(int, NUM_COL_FMTS); for (i = 0; i < num_cols; i++) { - cinfo->columns[i].col_custom_field_ids = NULL; + cinfo->columns[i].col_custom_fields_ids = NULL; } cinfo->col_expr.col_expr = g_new(const gchar*, num_cols + 1); cinfo->col_expr.col_expr_val = g_new(gchar*, num_cols + 1); @@ -75,13 +75,13 @@ col_custom_ids_free_wrapper(gpointer data, gpointer user_data _U_) } static void -col_custom_field_ids_free(GSList** custom_field_id) +col_custom_fields_ids_free(GSList** custom_fields_id) { - if (*custom_field_id != NULL) { - g_slist_foreach(*custom_field_id, col_custom_ids_free_wrapper, NULL); - g_slist_free(*custom_field_id); + if (*custom_fields_id != NULL) { + g_slist_foreach(*custom_fields_id, col_custom_ids_free_wrapper, NULL); + g_slist_free(*custom_fields_id); } - *custom_field_id = NULL; + *custom_fields_id = NULL; } /* Cleanup all the data structures for constructing column data; undoes @@ -96,12 +96,12 @@ col_cleanup(column_info *cinfo) col_item = &cinfo->columns[i]; g_free(col_item->fmt_matx); g_free(col_item->col_title); - g_free(col_item->col_custom_field); + g_free(col_item->col_custom_fields); dfilter_free(col_item->col_custom_dfilter); /* col_item->col_data points to col_buf or static memory */ g_free(col_item->col_buf); g_free(cinfo->col_expr.col_expr_val[i]); - col_custom_field_ids_free(&col_item->col_custom_field_ids); + col_custom_fields_ids_free(&col_item->col_custom_fields_ids); } g_free(cinfo->columns); @@ -305,10 +305,10 @@ void col_custom_set_edt(epan_dissect_t *edt, column_info *cinfo) i <= cinfo->col_last[COL_CUSTOM]; i++) { col_item = &cinfo->columns[i]; if (col_item->fmt_matx[COL_CUSTOM] && - col_item->col_custom_field && - col_item->col_custom_field_ids) { + col_item->col_custom_fields && + col_item->col_custom_fields_ids) { col_item->col_data = col_item->col_buf; - cinfo->col_expr.col_expr[i] = epan_custom_set(edt, col_item->col_custom_field_ids, + cinfo->col_expr.col_expr[i] = epan_custom_set(edt, col_item->col_custom_fields_ids, col_item->col_custom_occurrence, col_item->col_buf, cinfo->col_expr.col_expr_val[i], @@ -331,17 +331,17 @@ col_custom_prime_edt(epan_dissect_t *edt, column_info *cinfo) int i_list = 0; col_item = &cinfo->columns[i]; - col_custom_field_ids_free(&col_item->col_custom_field_ids); + col_custom_fields_ids_free(&col_item->col_custom_fields_ids); if (col_item->fmt_matx[COL_CUSTOM] && col_item->col_custom_dfilter) { epan_dissect_prime_dfilter(edt, col_item->col_custom_dfilter); - if (col_item->col_custom_field) { + if (col_item->col_custom_fields) { gchar **fields; guint i_field = 0; /* Not using a GRegex here would improve performance. */ - fields = g_regex_split(cinfo->prime_regex, col_item->col_custom_field, + fields = g_regex_split(cinfo->prime_regex, col_item->col_custom_fields, G_REGEX_MATCH_ANCHORED); for (i_field =0; i_field < g_strv_length(fields); i_field += 1) { @@ -355,8 +355,8 @@ col_custom_prime_edt(epan_dissect_t *edt, column_info *cinfo) idx = g_new(int, 1); *idx = id; - col_item->col_custom_field_ids = - g_slist_insert(col_item->col_custom_field_ids, idx, i_list); + col_item->col_custom_fields_ids = + g_slist_insert(col_item->col_custom_fields_ids, idx, i_list); i_list += 1; } } diff --git a/epan/column.c b/epan/column.c index ca482c8127..1ec3312501 100644 --- a/epan/column.c +++ b/epan/column.c @@ -728,7 +728,7 @@ set_column_resolved(const gint col, gboolean resolved) } const gchar * -get_column_custom_field(const gint col) +get_column_custom_fields(const gint col) { GList *clp = g_list_nth(prefs.col_list, col); fmt_data *cfmt; @@ -738,11 +738,11 @@ get_column_custom_field(const gint col) cfmt = (fmt_data *) clp->data; - return(cfmt->custom_field); + return(cfmt->custom_fields); } void -set_column_custom_field(const gint col, const char *custom_field) +set_column_custom_fields(const gint col, const char *custom_fields) { GList *clp = g_list_nth(prefs.col_list, col); fmt_data *cfmt; @@ -752,8 +752,8 @@ set_column_custom_field(const gint col, const char *custom_field) cfmt = (fmt_data *) clp->data; - g_free (cfmt->custom_field); - cfmt->custom_field = g_strdup (custom_field); + g_free (cfmt->custom_fields); + cfmt->custom_fields = g_strdup (custom_fields); } gint @@ -797,8 +797,8 @@ get_column_tooltip(const gint col) cfmt = (fmt_data *) clp->data; if (cfmt->fmt == COL_CUSTOM) { - header_field_info *hfi = proto_registrar_get_byname(cfmt->custom_field); - /* Check if this is a valid custom_field */ + header_field_info *hfi = proto_registrar_get_byname(cfmt->custom_fields); + /* Check if this is a valid custom_fields */ if (hfi != NULL) { if (hfi->parent != -1) { /* Prefix with protocol name */ @@ -811,7 +811,7 @@ get_column_tooltip(const gint col) tooltip_text = g_strdup_printf("%s (%s)", hfi->name, hfi->abbrev); } } else { - tooltip_text = g_strdup_printf("Unknown Field: %s", get_column_custom_field(col)); + tooltip_text = g_strdup_printf("Unknown Field: %s", get_column_custom_fields(col)); } } else { tooltip_text = g_strdup(col_format_desc(cfmt->fmt)); @@ -835,17 +835,17 @@ build_column_format_array(column_info *cinfo, const gint num_cols, const gboolea col_item->col_title = g_strdup(get_column_title(i)); if (col_item->col_fmt == COL_CUSTOM) { - col_item->col_custom_field = g_strdup(get_column_custom_field(i)); + col_item->col_custom_fields = g_strdup(get_column_custom_fields(i)); col_item->col_custom_occurrence = get_column_custom_occurrence(i); - if(!dfilter_compile(col_item->col_custom_field, &col_item->col_custom_dfilter, NULL)) { + if(!dfilter_compile(col_item->col_custom_fields, &col_item->col_custom_dfilter, NULL)) { /* XXX: Should we issue a warning? */ - g_free(col_item->col_custom_field); - col_item->col_custom_field = NULL; + g_free(col_item->col_custom_fields); + col_item->col_custom_fields = NULL; col_item->col_custom_occurrence = 0; col_item->col_custom_dfilter = NULL; } } else { - col_item->col_custom_field = NULL; + col_item->col_custom_fields = NULL; col_item->col_custom_occurrence = 0; col_item->col_custom_dfilter = NULL; } diff --git a/epan/column.h b/epan/column.h index af19b07ca2..365652e2e4 100644 --- a/epan/column.h +++ b/epan/column.h @@ -33,7 +33,7 @@ extern "C" { typedef struct _fmt_data { gchar *title; /* title of the column */ int fmt; /* format of column */ - gchar *custom_field; /* field name for COL_CUSTOM */ + gchar *custom_fields; /* fields names for COL_CUSTOM */ gint custom_occurrence; /* optional ordinal of occurrence of that field */ gboolean visible; /* if FALSE, hide this column */ gboolean resolved; /* if TRUE, show a more human-readable name */ @@ -64,9 +64,9 @@ gboolean get_column_resolved(const gint); WS_DLL_PUBLIC void set_column_resolved(const gint, gboolean); WS_DLL_PUBLIC -const gchar *get_column_custom_field(const gint); +const gchar *get_column_custom_fields(const gint); WS_DLL_PUBLIC -void set_column_custom_field(const gint, const char *); +void set_column_custom_fields(const gint, const char *); WS_DLL_PUBLIC gint get_column_custom_occurrence(const gint); WS_DLL_PUBLIC diff --git a/epan/prefs.c b/epan/prefs.c index 7aa333d533..860ef4d314 100644 --- a/epan/prefs.c +++ b/epan/prefs.c @@ -1557,10 +1557,10 @@ column_hidden_to_str_cb(pref_t* pref, gboolean default_val) while (clp) { gchar *prefs_fmt; cfmt = (fmt_data *) clp->data; - if ((cfmt->fmt == COL_CUSTOM) && (cfmt->custom_field)) { + if ((cfmt->fmt == COL_CUSTOM) && (cfmt->custom_fields)) { prefs_fmt = g_strdup_printf("%s:%s:%d:%c", col_format_to_string(cfmt->fmt), - cfmt->custom_field, + cfmt->custom_fields, cfmt->custom_occurrence, cfmt->resolved ? 'R' : 'U'); } else { @@ -1646,11 +1646,11 @@ column_format_init_cb(pref_t* pref, GList** value) dest_cfmt = g_new(fmt_data,1); dest_cfmt->title = g_strdup(src_cfmt->title); dest_cfmt->fmt = src_cfmt->fmt; - if (src_cfmt->custom_field) { - dest_cfmt->custom_field = g_strdup(src_cfmt->custom_field); + if (src_cfmt->custom_fields) { + dest_cfmt->custom_fields = g_strdup(src_cfmt->custom_fields); dest_cfmt->custom_occurrence = src_cfmt->custom_occurrence; } else { - dest_cfmt->custom_field = NULL; + dest_cfmt->custom_fields = NULL; dest_cfmt->custom_occurrence = 0; } dest_cfmt->visible = src_cfmt->visible; @@ -1681,11 +1681,11 @@ column_format_reset_cb(pref_t* pref) dest_cfmt = g_new(fmt_data,1); dest_cfmt->title = g_strdup(src_cfmt->title); dest_cfmt->fmt = src_cfmt->fmt; - if (src_cfmt->custom_field) { - dest_cfmt->custom_field = g_strdup(src_cfmt->custom_field); + if (src_cfmt->custom_fields) { + dest_cfmt->custom_fields = g_strdup(src_cfmt->custom_fields); dest_cfmt->custom_occurrence = src_cfmt->custom_occurrence; } else { - dest_cfmt->custom_field = NULL; + dest_cfmt->custom_fields = NULL; dest_cfmt->custom_occurrence = 0; } dest_cfmt->visible = src_cfmt->visible; @@ -1734,7 +1734,7 @@ column_format_set_cb(pref_t* pref, const gchar* value, gboolean* changed _U_) try_convert_to_custom_column(&col_l_elt->data); } else { /* We don't need the custom column field on this pass. */ - g_free(cfmt_check.custom_field); + g_free(cfmt_check.custom_fields); } /* Go past the format. */ @@ -1799,8 +1799,8 @@ column_format_is_default_cb(pref_t* pref) def_cfmt = (fmt_data *) def_col->data; if ((g_strcmp0(cfmt->title, def_cfmt->title) != 0) || (cfmt->fmt != def_cfmt->fmt) || - (((cfmt->fmt == COL_CUSTOM) && (cfmt->custom_field)) && - ((g_strcmp0(cfmt->custom_field, def_cfmt->custom_field) != 0) || + (((cfmt->fmt == COL_CUSTOM) && (cfmt->custom_fields)) && + ((g_strcmp0(cfmt->custom_fields, def_cfmt->custom_fields) != 0) || (cfmt->resolved != def_cfmt->resolved)))) { is_default = FALSE; break; @@ -1828,10 +1828,10 @@ column_format_to_str_cb(pref_t* pref, gboolean default_val) while (clp) { cfmt = (fmt_data *) clp->data; col_l = g_list_append(col_l, g_strdup(cfmt->title)); - if ((cfmt->fmt == COL_CUSTOM) && (cfmt->custom_field)) { + if ((cfmt->fmt == COL_CUSTOM) && (cfmt->custom_fields)) { prefs_fmt = g_strdup_printf("%s:%s:%d:%c", col_format_to_string(cfmt->fmt), - cfmt->custom_field, + cfmt->custom_fields, cfmt->custom_occurrence, cfmt->resolved ? 'R' : 'U'); } else { @@ -2865,7 +2865,7 @@ parse_column_format(fmt_data *cfmt, const char *fmt) gchar **cust_format_info; char *p; int col_fmt; - gchar *col_custom_field = NULL; + gchar *col_custom_fields = NULL; long col_custom_occurrence = 0; gboolean col_resolved = TRUE; @@ -2877,17 +2877,17 @@ parse_column_format(fmt_data *cfmt, const char *fmt) /* Yes. */ col_fmt = COL_CUSTOM; cust_format_info = g_strsplit(&fmt[cust_format_len+1],":",3); /* add 1 for ':' */ - col_custom_field = g_strdup(cust_format_info[0]); - if (col_custom_field && cust_format_info[1]) { + col_custom_fields = g_strdup(cust_format_info[0]); + if (col_custom_fields && cust_format_info[1]) { col_custom_occurrence = strtol(cust_format_info[1], &p, 10); if (p == cust_format_info[1] || *p != '\0') { /* Not a valid number. */ - g_free(col_custom_field); + g_free(col_custom_fields); g_strfreev(cust_format_info); return FALSE; } } - if (col_custom_field && cust_format_info[1] && cust_format_info[2]) { + if (col_custom_fields && cust_format_info[1] && cust_format_info[2]) { col_resolved = (cust_format_info[2][0] == 'U') ? FALSE : TRUE; } g_strfreev(cust_format_info); @@ -2898,7 +2898,7 @@ parse_column_format(fmt_data *cfmt, const char *fmt) } cfmt->fmt = col_fmt; - cfmt->custom_field = col_custom_field; + cfmt->custom_fields = col_custom_fields; cfmt->custom_occurrence = (int)col_custom_occurrence; cfmt->resolved = col_resolved; return TRUE; @@ -3074,7 +3074,7 @@ pre_init_prefs(void) parse_column_format(cfmt, col_fmt[(i * 2) + 1]); cfmt->visible = TRUE; cfmt->resolved = TRUE; - cfmt->custom_field = NULL; + cfmt->custom_fields = NULL; cfmt->custom_occurrence = 0; prefs.col_list = g_list_append(prefs.col_list, cfmt); } @@ -3724,8 +3724,8 @@ prefs_is_column_visible(const gchar *cols_hidden, fmt_data *cfmt) */ if (cfmt->fmt != cfmt_hidden.fmt) { /* No. */ - g_free(cfmt_hidden.custom_field); - cfmt_hidden.custom_field = NULL; + g_free(cfmt_hidden.custom_fields); + cfmt_hidden.custom_fields = NULL; continue; } if (cfmt->fmt == COL_CUSTOM) { @@ -3733,18 +3733,18 @@ prefs_is_column_visible(const gchar *cols_hidden, fmt_data *cfmt) * A custom column has to have the * same custom field and occurrence. */ - if (cfmt_hidden.custom_field && cfmt->custom_field) { - if (strcmp(cfmt->custom_field, - cfmt_hidden.custom_field) != 0) { + if (cfmt_hidden.custom_fields && cfmt->custom_fields) { + if (strcmp(cfmt->custom_fields, + cfmt_hidden.custom_fields) != 0) { /* Different fields. */ - g_free(cfmt_hidden.custom_field); - cfmt_hidden.custom_field = NULL; + g_free(cfmt_hidden.custom_fields); + cfmt_hidden.custom_fields = NULL; continue; } if (cfmt->custom_occurrence != cfmt_hidden.custom_occurrence) { /* Different occurrences. */ - g_free(cfmt_hidden.custom_field); - cfmt_hidden.custom_field = NULL; + g_free(cfmt_hidden.custom_fields); + cfmt_hidden.custom_fields = NULL; continue; } } @@ -3754,7 +3754,7 @@ prefs_is_column_visible(const gchar *cols_hidden, fmt_data *cfmt) * OK, they match, so it's one of the hidden fields, * hence not visible. */ - g_free(cfmt_hidden.custom_field); + g_free(cfmt_hidden.custom_fields); g_free(cols); return FALSE; } @@ -5020,7 +5020,7 @@ free_col_info(GList *list) cfmt = (fmt_data *)list->data; g_free(cfmt->title); - g_free(cfmt->custom_field); + g_free(cfmt->custom_fields); g_free(cfmt); list = g_list_next(list); } |