diff options
author | Guy Harris <guy@alum.mit.edu> | 2006-03-19 20:45:45 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2006-03-19 20:45:45 +0000 |
commit | 7db8eea5c68284a468924639eecc2ca8959225d0 (patch) | |
tree | 8615d9607a760ce4721551cd031660083076cd49 /epan/ftypes/ftype-guid.c | |
parent | 624db0dc41ab9bad1bacbd95462d6dffa4afba61 (diff) |
Make the GUIDs in various data structures e_guid_t's rather than arrays
of 16 bytes. Use "sizeof" for the size of e_guid_t's, and use structure
assignment to copy GUID values.
Make functions such as append_h225ras_call() and new_h225ras_call() take
pointers to e_guid_t's as arguments.
Define GUID_LEN in epan/guid-utils.h and use it as the length of a GUID
in a packet. (Note that "sizeof e_guid_t" is not guaranteed to be 16,
although it is guaranteed to be the size of an e_guid_t.)
When constructing a display filter that matches a GUID, use
guid_to_str() to construct the string for the GUID.
svn path=/trunk/; revision=17676
Diffstat (limited to 'epan/ftypes/ftype-guid.c')
-rw-r--r-- | epan/ftypes/ftype-guid.c | 165 |
1 files changed, 82 insertions, 83 deletions
diff --git a/epan/ftypes/ftype-guid.c b/epan/ftypes/ftype-guid.c index 6c78fe9cea..08104453c8 100644 --- a/epan/ftypes/ftype-guid.c +++ b/epan/ftypes/ftype-guid.c @@ -30,139 +30,138 @@ #include <ftypes-int.h> #include <epan/guid-utils.h> -#define GUID_LEN 16 - static void guid_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied) { - fv->value.guid = *(e_guid_t*)value; + g_assert(!already_copied); + fv->value.guid = *(e_guid_t*)value; } static gpointer value_get(fvalue_t *fv) { - return &(fv->value.guid); + return &(fv->value.guid); } static gboolean get_guid(char *s, e_guid_t *guid) { - size_t i, n; - char *p, digits[9]; - static const char fmt[] = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"; - - n = strlen(s); - if (n != strlen(fmt)) - return FALSE; - for (i=0; i<n; i++) { - if (fmt[i] == 'X') { - if (!isxdigit((guchar)s[i])) - return FALSE; - } else { - if (s[i] != fmt[i]) - return FALSE; - } - } - - p = s; - strncpy(digits, p, 8); + size_t i, n; + char *p, digits[9]; + static const char fmt[] = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"; + + n = strlen(s); + if (n != strlen(fmt)) + return FALSE; + for (i=0; i<n; i++) { + if (fmt[i] == 'X') { + if (!isxdigit((guchar)s[i])) + return FALSE; + } else { + if (s[i] != fmt[i]) + return FALSE; + } + } + + p = s; + strncpy(digits, p, 8); digits[8] = '\0'; - guid->data1 = strtoul(digits, NULL, 16); + guid->data1 = strtoul(digits, NULL, 16); p += 9; - strncpy(digits, p, 4); + strncpy(digits, p, 4); digits[4] = '\0'; - guid->data2 = (guint16)strtoul(digits, NULL, 16); + guid->data2 = (guint16)strtoul(digits, NULL, 16); p += 5; - strncpy(digits, p, 4); + strncpy(digits, p, 4); digits[4] = '\0'; - guid->data3 = (guint16)strtoul(digits, NULL, 16); + guid->data3 = (guint16)strtoul(digits, NULL, 16); p += 5; - for (i=0; i < sizeof(guid->data4); i++) { - if (*p == '-') p++; - digits[0] = *(p++); - digits[1] = *(p++); - digits[2] = '\0'; - guid->data4[i] = (guint8)strtoul(digits, NULL, 16); - } - return TRUE; + for (i=0; i < sizeof(guid->data4); i++) { + if (*p == '-') p++; + digits[0] = *(p++); + digits[1] = *(p++); + digits[2] = '\0'; + guid->data4[i] = (guint8)strtoul(digits, NULL, 16); + } + return TRUE; } static gboolean guid_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { - e_guid_t guid; + e_guid_t guid; - if (!get_guid(s, &guid)) { - logfunc("\"%s\" is not a valid GUID.", s); - return FALSE; - } + if (!get_guid(s, &guid)) { + logfunc("\"%s\" is not a valid GUID.", s); + return FALSE; + } - fv->value.guid = guid; - return TRUE; + fv->value.guid = guid; + return TRUE; } static int guid_repr_len(fvalue_t *fv _U_, ftrepr_t rtype _U_) { - return GUID_STR_LEN; + return GUID_STR_LEN; } static void guid_to_repr(fvalue_t *fv, ftrepr_t rtype _U_, char *buf) { - guid_to_str_buf(&fv->value.guid, buf, GUID_STR_LEN); + guid_to_str_buf(&fv->value.guid, buf, GUID_STR_LEN); } static gboolean cmp_eq(fvalue_t *a, fvalue_t *b) { - return memcmp(&a->value.guid, &b->value.guid, sizeof(e_guid_t)) == 0; + return memcmp(&a->value.guid, &b->value.guid, sizeof(e_guid_t)) == 0; } static gboolean cmp_ne(fvalue_t *a, fvalue_t *b) { - return memcmp(&a->value.guid, &b->value.guid, sizeof(e_guid_t)) != 0; + return memcmp(&a->value.guid, &b->value.guid, sizeof(e_guid_t)) != 0; } void ftype_register_guid(void) { - static ftype_t guid_type = { - "GUID", /* name */ - "Globally Unique Identifier", /* pretty_name */ - GUID_LEN, /* wire_size */ - NULL, /* new_value */ - NULL, /* free_value */ - guid_from_unparsed, /* val_from_unparsed */ - NULL, /* val_from_string */ - guid_to_repr, /* val_to_string_repr */ - guid_repr_len, /* len_string_repr */ - - guid_fvalue_set, /* set_value */ - NULL, /* set_value_integer */ - NULL, /* set_value_integer64 */ - NULL, /* set_value_floating */ - - value_get, /* get_value */ - NULL, /* get_value_integer */ - NULL, /* get_value_integer64 */ - NULL, /* get_value_floating */ - - cmp_eq, - cmp_ne, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, /* cmp_matches */ - - NULL, - NULL, - }; - - ftype_register(FT_GUID, &guid_type); + static ftype_t guid_type = { + "GUID", /* name */ + "Globally Unique Identifier", /* pretty_name */ + GUID_LEN, /* wire_size */ + NULL, /* new_value */ + NULL, /* free_value */ + guid_from_unparsed, /* val_from_unparsed */ + NULL, /* val_from_string */ + guid_to_repr, /* val_to_string_repr */ + guid_repr_len, /* len_string_repr */ + + guid_fvalue_set, /* set_value */ + NULL, /* set_value_integer */ + NULL, /* set_value_integer64 */ + NULL, /* set_value_floating */ + + value_get, /* get_value */ + NULL, /* get_value_integer */ + NULL, /* get_value_integer64 */ + NULL, /* get_value_floating */ + + cmp_eq, + cmp_ne, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, /* cmp_matches */ + + NULL, + NULL, + }; + + ftype_register(FT_GUID, &guid_type); } |