Added a test case for #157.
authorDavid Given <dg@cowlark.com>
Tue, 12 Feb 2019 21:08:08 +0000 (22:08 +0100)
committerDavid Given <dg@cowlark.com>
Tue, 12 Feb 2019 21:08:08 +0000 (22:08 +0100)
tests/plat/bugs/bug-157-i80-varargs_c.c [new file with mode: 0644]

diff --git a/tests/plat/bugs/bug-157-i80-varargs_c.c b/tests/plat/bugs/bug-157-i80-varargs_c.c
new file mode 100644 (file)
index 0000000..5eb34ec
--- /dev/null
@@ -0,0 +1,81 @@
+#include <stdio.h>
+#include <stdarg.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include "test.h"
+
+static char buf[34];
+
+char * __ultostr(unsigned long val, int radix)
+{
+   register char *p;
+   register int c;
+
+   if( radix > 36 || radix < 2 ) return 0;
+
+   p = buf+sizeof(buf);
+   *--p = '\0';
+
+   do
+   {
+      c = val%radix;
+      val/=radix;
+      if( c > 9 ) *--p = 'a'-10+c; else *--p = '0'+c;
+   }
+   while(val);
+   return p;
+}
+
+char * __ltostr(long val, int radix)
+{
+   char *p;
+   int flg = 0;
+   if( val < 0 ) { flg++; val= -val; }
+   p = __ultostr(val, radix);
+   if(p && flg) *--p = '-';
+   return p;
+}
+
+void demo(int lval, va_list ap)
+{
+    char *ptmp = __ltostr((long) ((lval) ?
+                           va_arg(ap, long) :
+                           va_arg(ap, int)), 10);
+    ASSERT(strcmp(ptmp, "35") == 0);
+}
+
+void demo2(int lval, va_list ap)
+{
+    long l;
+    char *ptmp;
+    
+    l = (lval) ?va_arg(ap, long) :
+                va_arg(ap, int);
+    ptmp = __ltostr(l, 10);
+    ASSERT(strcmp(ptmp, "35") == 0);
+}
+
+void doit1(char *x, ...)
+{
+    va_list ptr;
+    va_start(ptr, x);
+    demo(0,ptr);
+    va_end(ptr);
+}
+
+void doit2(char *x, ...)
+{
+    va_list ptr;
+    va_start(ptr, x);
+    demo2(0,ptr);
+    va_end(ptr);
+}
+
+int main(int argc, char *argv[])
+{
+    doit1("", 35);
+    doit2("", 35);
+    finished();
+    return 0;
+}