Handle a empty string as "0" when checking numeric uat values, because
authorstig <stig@f5534014-38df-0310-8fa8-9805f1628bb7>
Sun, 8 Mar 2009 22:36:43 +0000 (22:36 +0000)
committerstig <stig@f5534014-38df-0310-8fa8-9805f1628bb7>
Sun, 8 Mar 2009 22:36:43 +0000 (22:36 +0000)
strtol() will set errno on some platforms and not on other platforms.
With this change we don't need to set a value in DLT_USER header size
and trailer size.

Also remove an unused strdup.

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@27664 f5534014-38df-0310-8fa8-9805f1628bb7

epan/uat.c

index 5f2016cbf18ca3092a9787652c3638ffd4faf60f..6b8e7ae58eb730aef16e47e37c3e7f3cf34f9b72 100644 (file)
@@ -265,6 +265,7 @@ gboolean uat_save(uat_t* uat, char** error) {
        }
 
        *error = NULL;
+       g_free (fname);
 
        fprintf(fp,"# This file is automatically generated, DO NOT MODIFY.\n");
 
@@ -415,26 +416,30 @@ gboolean uat_fld_chk_proto(void* u1 _U_, const char* strptr, unsigned len, void*
 }
 
 gboolean uat_fld_chk_num_dec(void* u1 _U_, const char* strptr, unsigned len, void* u2 _U_, void* u3 _U_, const char** err) {
-       char* str = ep_strndup(strptr,len);
-       long i = strtol(str,&str,10);
+    if (len > 0) {
+        char* str = ep_strndup(strptr,len);
+        long i = strtol(str,&str,10);
 
-       if ( ( i == 0) && (errno == ERANGE || errno == EINVAL) ) {
-               *err = strerror(errno);
-               return FALSE;
-       }
+        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_, const char** err) {
-       char* str = ep_strndup(strptr,len);
-       long i = strtol(str,&str,16);
+    if (len > 0) {
+        char* str = ep_strndup(strptr,len);
+        long i = strtol(str,&str,16);
 
-       if ( ( i == 0) && (errno == ERANGE || errno == EINVAL) ) {
-               *err = strerror(errno);
-               return FALSE;
-       }
+        if ( ( i == 0) && (errno == ERANGE || errno == EINVAL) ) {
+            *err = strerror(errno);
+            return FALSE;
+        }
+    }
 
        *err = NULL;
        return TRUE;