32bit fixes
authornotaz <notasas@gmail.com>
Thu, 17 Sep 2015 23:39:17 +0000 (01:39 +0200)
committernotaz <notasas@gmail.com>
Thu, 17 Sep 2015 23:39:17 +0000 (01:39 +0200)
tools/cmpmrg_text.c
tools/masm_tools.h

index 38acd6d..561c9b2 100644 (file)
@@ -474,7 +474,7 @@ static int check_equiv(uint8_t *d_obj, uint8_t *d_exe, int maxlen)
                                        break;
 
                        if ((jo == len && je != len) || (jo != len && je == len)) {
-                               printf("invalid equiv_op #%ld\n", op - equiv_ops);
+                               printf("invalid equiv_op #%td\n", op - equiv_ops);
                                return -1;
                        }
                        if (jo == len)
index 717001f..cee4d62 100644 (file)
@@ -1,7 +1,3 @@
-#if __SIZEOF_LONG__ != 8
-#error fix ret/strtoul to do 64bit
-#endif
-
 static unsigned long parse_number(const char *number)
 {
   int len = strlen(number);
@@ -27,9 +23,16 @@ static unsigned long parse_number(const char *number)
   }
   if (bad)
     aerr("number parsing failed (%s)\n", number);
-  if (neg)
+#if __SIZEOF_LONG__ > 4
+  // if this happens, callers must be fixed too
+  if (ret > 0xfffffffful)
+    aerr("number too large? (%s)\n", number);
+#endif
+  if (neg) {
+    if (ret > 0x7fffffff)
+      aerr("too large negative? (%s)\n", number);
     ret = -ret;
+  }
   return ret;
 }
 
-