wiretap: fix return value of wtap_register_file_type_subtypes().

It was returning the length of the array *after* we added the new entry,
which is the index that would be used for the *next* entry added.
Return, instead, the length of the array *before* we add the new entry.
This commit is contained in:
Guy Harris 2021-02-17 21:40:21 -08:00
parent 43ffb5436c
commit a931d73e64
1 changed files with 15 additions and 13 deletions

View File

@ -1359,6 +1359,7 @@ int
wtap_register_file_type_subtypes(const struct file_type_subtype_info* fi)
{
struct file_type_subtype_info* finfo;
guint file_type_subtype;
/*
* Check for required fields (description and name).
@ -1387,38 +1388,39 @@ wtap_register_file_type_subtypes(const struct file_type_subtype_info* fi)
* (and because entry 0, for WTAP_FILE_TYPE_SUBTYPE_UNKNOWN,
* has a null name pointer).
*/
for (guint i = wtap_num_builtin_file_types_subtypes;
i < file_type_subtype_table_arr->len; i++) {
if (file_type_subtype_table[i].name == NULL) {
for (file_type_subtype = wtap_num_builtin_file_types_subtypes;
file_type_subtype < file_type_subtype_table_arr->len;
file_type_subtype++) {
if (file_type_subtype_table[file_type_subtype].name == NULL) {
/*
* We found such an entry.
*
* Get the pointer from the GArray, so that we get a
* non-const pointer.
*/
finfo = &g_array_index(file_type_subtype_table_arr, struct file_type_subtype_info, i);
finfo = &g_array_index(file_type_subtype_table_arr, struct file_type_subtype_info, file_type_subtype);
/*
* Fill in the entry with the new values.
*/
*finfo = *fi;
return (gint)i;
return (gint)file_type_subtype;
}
}
/*
* There aren't any free slots, so add a new entry.
* Append this entry to the end of the array, change
* file_type_subtype_table in case the array had to get reallocated,
* increment the number of entries (XXX - just use the array
* length!), and return subtype, which is now set to the
* old number of entries, which is now the index of the new
* entry.
* Get the number of current number of entries, which will
* be the index of the new entry, then append this entry
* to the end of the array, change file_type_subtype_table
* in case the array had to get reallocated, and return
* the index of the new entry.
*/
g_array_append_val(file_type_subtype_table_arr,*fi);
file_type_subtype = file_type_subtype_table_arr->len;
g_array_append_val(file_type_subtype_table_arr, *fi);
file_type_subtype_table = (const struct file_type_subtype_info*)(void *)file_type_subtype_table_arr->data;
return file_type_subtype_table_arr->len;
return file_type_subtype;
}
/* De-registers a file writer - they can never be removed from the GArray, but we can "clear" an entry.