This commit is contained in:
Paul 2000-09-11 23:41:29 +00:00
parent af942304af
commit ae882b7dfb
13 changed files with 84 additions and 74 deletions

View file

@ -1,4 +1,7 @@
#include <stdio.h>
//#include <stdio.h>
#include "system\vsprintf.h"
// Linux Kernel Source Tour
// http://www.tamacom.com/tour/linux/index.html
@ -6,17 +9,6 @@
// stdarg defs from MSVC
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define va_end(ap) ( ap = (va_list)0 )
typedef char *va_list;
// linux/lib/string.c
static int strnlen(const char * s, int count)
@ -134,7 +126,7 @@ static char * number(char * str, long num, int base, int size, int precision
return str;
}
extern int vsprintf(char *buf, const char *fmt, va_list args)
extern int __vsprintf(char *buf, const char *fmt, __va_list args)
{
int len;
unsigned long num;
@ -174,7 +166,7 @@ extern int vsprintf(char *buf, const char *fmt, va_list args)
else if (*fmt == '*') {
++fmt;
/* it's the next argument */
field_width = va_arg(args, int);
field_width = __va_arg(args, int);
if (field_width < 0) {
field_width = -field_width;
flags |= LEFT;
@ -190,7 +182,7 @@ extern int vsprintf(char *buf, const char *fmt, va_list args)
else if (*fmt == '*') {
++fmt;
/* it's the next argument */
precision = va_arg(args, int);
precision = __va_arg(args, int);
}
if (precision < 0)
precision = 0;
@ -211,13 +203,13 @@ extern int vsprintf(char *buf, const char *fmt, va_list args)
if (!(flags & LEFT))
while (--field_width > 0)
*str++ = ' ';
*str++ = (unsigned char) va_arg(args, int);
*str++ = (unsigned char) __va_arg(args, int);
while (--field_width > 0)
*str++ = ' ';
continue;
case 's':
s = va_arg(args, char *);
s = __va_arg(args, char *);
if (!s)
s = "<NULL>";
@ -238,17 +230,17 @@ extern int vsprintf(char *buf, const char *fmt, va_list args)
flags |= ZEROPAD;
}
str = number(str,
(unsigned long) va_arg(args, void *), 16,
(unsigned long) __va_arg(args, void *), 16,
field_width, precision, flags);
continue;
case 'n':
if (qualifier == 'l') {
long * ip = va_arg(args, long *);
long * ip = __va_arg(args, long *);
*ip = (str - buf);
} else {
int * ip = va_arg(args, int *);
int * ip = __va_arg(args, int *);
*ip = (str - buf);
}
continue;
@ -280,16 +272,16 @@ extern int vsprintf(char *buf, const char *fmt, va_list args)
continue;
}
if (qualifier == 'l')
num = va_arg(args, unsigned long);
num = __va_arg(args, unsigned long);
else if (qualifier == 'h')
if (flags & SIGN)
num = va_arg(args, short);
num = __va_arg(args, short);
else
num = va_arg(args, unsigned short);
num = __va_arg(args, unsigned short);
else if (flags & SIGN)
num = va_arg(args, int);
num = __va_arg(args, int);
else
num = va_arg(args, unsigned int);
num = __va_arg(args, unsigned int);
str = number(str, num, base, field_width, precision, flags);
}
*str = '\0';