Added a test case for #157.
This commit is contained in:
parent
073451dd44
commit
a2b5202081
81
tests/plat/bugs/bug-157-i80-varargs_c.c
Normal file
81
tests/plat/bugs/bug-157-i80-varargs_c.c
Normal file
|
@ -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;
|
||||
}
|
Loading…
Reference in a new issue