summaryrefslogtreecommitdiff
path: root/epan/uat.c
diff options
context:
space:
mode:
authorLuis Ontanon <luis.ontanon@gmail.com>2007-02-07 20:45:14 +0000
committerLuis Ontanon <luis.ontanon@gmail.com>2007-02-07 20:45:14 +0000
commit9422dfd0849a130d03812a5712ae54f6f350a6dd (patch)
treea07b25c2e10bbeb88d2f10e54310cdc5d56ea2fb /epan/uat.c
parent8144684c113165ec937efdc094f520e5510ff8d2 (diff)
downloadwireshark-9422dfd0849a130d03812a5712ae54f6f350a6dd.tar.gz
UAT: filed definitions for proto (a dissector hanlde obtained by name)
UATify user-DLTs svn path=/trunk/; revision=20740
Diffstat (limited to 'epan/uat.c')
-rw-r--r--epan/uat.c46
1 files changed, 39 insertions, 7 deletions
diff --git a/epan/uat.c b/epan/uat.c
index bda15e7613..e911163c6b 100644
--- a/epan/uat.c
+++ b/epan/uat.c
@@ -302,16 +302,48 @@ gboolean uat_fld_chk_str(void* u1 _U_, const char* strptr, unsigned len _U_, voi
}
gboolean uat_fld_chk_proto(void* u1 _U_, const char* strptr, unsigned len, void* u2 _U_, void* u3 _U_, char** err) {
- char* name = ep_strndup(strptr,len);
- g_strdown(name);
- g_strchug(name);
- if (find_dissector(name)) {
- *err = NULL;
- return TRUE;
+ if (len) {
+ char* name = ep_strndup(strptr,len);
+ g_strdown(name);
+ g_strchug(name);
+
+ if (find_dissector(name)) {
+ *err = NULL;
+ return TRUE;
+ } else {
+ *err = "dissector not found";
+ return FALSE;
+ }
} else {
- *err = "dissector not found";
+ *err = NULL;
+ return TRUE;
+ }
+}
+
+gboolean uat_fld_chk_num_dec(void* u1 _U_, const char* strptr, unsigned len, void* u2 _U_, void* u3 _U_, char** err) {
+ char* str = ep_strndup(strptr,len);
+ long i = strtol(str,&str,10);
+
+ if ( ( i == 0) && (errno == ERANGE || errno == EINVAL) ) {
+ *err = strerror(errno);
return FALSE;
}
+
+ *err = NULL;
+ return TRUE;
+}
+
+gboolean uat_fld_chk_num_hex(void* u1 _U_, const char* strptr, unsigned len, void* u2 _U_, void* u3 _U_, char** err) {
+ char* str = ep_strndup(strptr,len);
+ long i = strtol(str,&str,16);
+
+ if ( ( i == 0) && (errno == ERANGE || errno == EINVAL) ) {
+ *err = strerror(errno);
+ return FALSE;
+ }
+
+ *err = NULL;
+ return TRUE;
}
gboolean uat_fld_chk_enum(void* u1 _U_, const char* strptr, unsigned len, void* v, void* u3 _U_, char** err) {