Debug trace curl_mprintf() on x86_64 and ia64 systems.
authorYang Tse <yangsita@gmail.com>
Sun, 24 Aug 2008 16:01:15 +0000 (16:01 +0000)
committerYang Tse <yangsita@gmail.com>
Sun, 24 Aug 2008 16:01:15 +0000 (16:01 +0000)
lib/mprintf.c

index 1bbf53a..fea8e51 100644 (file)
@@ -182,6 +182,19 @@ struct asprintf {
 
 int curl_msprintf(char *buffer, const char *format, ...);
 
+static int trace_this(void)
+{
+  const char * host = OS;
+  const char * arc1 = "x86_64";
+  const char * arc2 = "ia64";
+
+  if(0 == memcmp(host, arc1, strlen(arc1)))
+    return 1;
+  if(0 == memcmp(host, arc2, strlen(arc2)))
+    return 1;
+  return 0;
+}
+
 static long dprintf_DollarString(char *input, char **end)
 {
   int number=0;
@@ -582,30 +595,66 @@ static long dprintf_Pass1(const char *format, va_stack_t *vto, char **endpos,
 #ifdef HAVE_LONG_LONG_TYPE
         if((vto[i].flags & FLAGS_LONGLONG) && (vto[i].flags & FLAGS_UNSIGNED)) {
           va_unsigned_long_long = va_arg(arglist, mp_uintmax_t);
+          if(trace_this())
+            printf("va_unsigned_long_long = %llu\n",
+                    va_unsigned_long_long);
           vto[i].data.num.as_unsigned = (mp_uintmax_t)va_unsigned_long_long;
+          if(trace_this())
+            printf("vto[i].data.num.as_unsigned = %llu\n",
+                    vto[i].data.num.as_unsigned);
         }
         else if(vto[i].flags & FLAGS_LONGLONG) {
           va_signed_long_long = va_arg(arglist, mp_intmax_t);
+          if(trace_this())
+            printf("va_signed_long_long = %lld\n",
+                    va_signed_long_long);
           vto[i].data.num.as_signed = (mp_intmax_t)va_signed_long_long;
+          if(trace_this())
+            printf("vto[i].data.num.as_signed = %lld\n",
+                    vto[i].data.num.as_signed);
         }
         else
 #endif
         {
           if((vto[i].flags & FLAGS_LONG) && (vto[i].flags & FLAGS_UNSIGNED)) {
             va_unsigned_long = va_arg(arglist, unsigned long);
+            if(trace_this())
+              printf("va_unsigned_long = %lu\n",
+                      va_unsigned_long);
             vto[i].data.num.as_unsigned = (mp_uintmax_t)va_unsigned_long;
+            if(trace_this())
+              printf("vto[i].data.num.as_unsigned = %llu\n",
+                      vto[i].data.num.as_unsigned);
           }
           else if(vto[i].flags & FLAGS_LONG) {
             va_signed_long = va_arg(arglist, long);
+            if(trace_this())
+              printf("va_signed_long = %ld\n",
+                      va_signed_long);
             vto[i].data.num.as_signed = (mp_intmax_t)va_signed_long;
+            if(trace_this())
+              printf("vto[i].data.num.as_signed = %lld\n",
+                      vto[i].data.num.as_signed);
           }
           else if(vto[i].flags & FLAGS_UNSIGNED) {
             va_unsigned_int = va_arg(arglist, unsigned int);
+            if(trace_this())
+              printf("va_unsigned_int = %u\n",
+                      va_unsigned_int);
             vto[i].data.num.as_unsigned = (mp_uintmax_t)va_unsigned_int;
+            if(trace_this())
+              printf("vto[i].data.num.as_unsigned = %llu\n",
+                      vto[i].data.num.as_unsigned);
           }
           else {
             va_signed_int = va_arg(arglist, int);
+            if(trace_this())
+              printf("va_signed_int = %d\n",
+                      va_signed_int);
             vto[i].data.num.as_signed = (mp_intmax_t)va_signed_int;
+            if(trace_this())
+              printf("vto[i].data.num.as_signed = %lld\n",
+                      vto[i].data.num.as_signed);
           }
         }
         break;
@@ -777,13 +826,25 @@ static int dprintf_formatf(
       base = 10;
 
       signed_num = p->data.num.as_signed;
+      if(trace_this())
+        printf("1 signed_num = %lld\n", signed_num);
       is_neg = (signed_num < (mp_intmax_t)0) ? 1 : 0;
+      if(trace_this())
+        printf("is_neg = %d\n", is_neg);
       if(is_neg) {
         /* signed_num might fail to hold absolute negative minimum by 1 */
         signed_num += (mp_intmax_t)1;
+        if(trace_this())
+          printf("2 signed_num = %lld\n", signed_num);
         signed_num = -signed_num;
+        if(trace_this())
+          printf("3 signed_num = %lld\n", signed_num);
         num = (mp_uintmax_t)signed_num;
+        if(trace_this())
+          printf("4 num = %llu\n", num);
         num += (mp_uintmax_t)0x1;
+        if(trace_this())
+          printf("5 num = %llu\n", num);
       }
 
       goto number;