[virtio-9p] Add support to v9fs_string_alloc_printf() for handling %lu.
authorVenkateswararao Jujjuri (JV) <jvrao@linux.vnet.ibm.com>
Thu, 7 Oct 2010 00:09:42 +0000 (17:09 -0700)
committerAnthony Liguori <aliguori@us.ibm.com>
Wed, 20 Oct 2010 17:10:59 +0000 (12:10 -0500)
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
hw/virtio-9p.c

index 0e8772257b8a35d3b0206fdc22d622082e3d99e8..daade77ed918ae6e858ba331237283e5fa99a23c 100644 (file)
@@ -321,6 +321,14 @@ static int number_to_string(void *arg, char type)
         } while (num);
         break;
     }
+    case 'U': {
+        unsigned long num = *(unsigned long *)arg;
+        do {
+            ret++;
+            num = num/10;
+        } while (num);
+        break;
+    }
     default:
         printf("Number_to_string: Unknown number format\n");
         return -1;
@@ -338,6 +346,7 @@ v9fs_string_alloc_printf(char **strp, const char *fmt, va_list ap)
     int nr_args = 0;
     char *arg_char_ptr;
     unsigned int arg_uint;
+    unsigned long arg_ulong;
 
     /* Find the number of %'s that denotes an argument */
     for (iter = strstr(iter, "%"); iter; iter = strstr(iter, "%")) {
@@ -363,6 +372,14 @@ v9fs_string_alloc_printf(char **strp, const char *fmt, va_list ap)
             arg_uint = va_arg(ap2, unsigned int);
             len += number_to_string((void *)&arg_uint, 'u');
             break;
+        case 'l':
+            if (*++iter == 'u') {
+                arg_ulong = va_arg(ap2, unsigned long);
+                len += number_to_string((void *)&arg_ulong, 'U');
+            } else {
+                return -1;
+            }
+            break;
         case 's':
             arg_char_ptr = va_arg(ap2, char *);
             len += strlen(arg_char_ptr);