00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _STDARG_H
00022 #define _STDARG_H
00023
00024 #ifdef __GNUC__
00025
00026
00027 typedef char *va_list;
00028
00029
00030
00031
00032
00033 #define __va_rounded_size(TYPE) \
00034 (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
00035
00036 #if __GNUC__ < 2
00037
00038 #ifndef __sparc__
00039 #define va_start(AP, LASTARG) \
00040 (AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG)))
00041 #else
00042 #define va_start(AP, LASTARG) \
00043 (__builtin_saveregs (), \
00044 AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG)))
00045 #endif
00046
00047 void va_end (va_list);
00048 #define va_end(AP)
00049
00050 #define va_arg(AP, TYPE) \
00051 (AP += __va_rounded_size (TYPE), \
00052 *((TYPE *) (AP - __va_rounded_size (TYPE))))
00053
00054 #else
00055
00056 #ifndef __sparc__
00057 #define va_start(AP, LASTARG) \
00058 (AP = ((char *) __builtin_next_arg ()))
00059 #else
00060 #define va_start(AP, LASTARG) \
00061 (__builtin_saveregs (), AP = ((char *) __builtin_next_arg ()))
00062 #endif
00063
00064 void va_end (va_list);
00065 #define va_end(AP)
00066
00067 #define va_arg(AP, TYPE) \
00068 (AP = ((char *) (AP)) += __va_rounded_size (TYPE), \
00069 *((TYPE *) ((char *) (AP) - __va_rounded_size (TYPE))))
00070
00071 #endif
00072
00073 #else
00074
00075 typedef char *va_list;
00076
00077 #define __vasz(x) ((sizeof(x)+sizeof(int)-1) & ~(sizeof(int) -1))
00078
00079 #define va_start(ap, parmN) ((ap) = (va_list)&parmN + __vasz(parmN))
00080 #define va_arg(ap, type) \
00081 (*((type *)((va_list)((ap) = (void *)((va_list)(ap) + __vasz(type))) \
00082 - __vasz(type))))
00083 #define va_copy(ap2, ap) (ap2) = (ap)
00084 #define va_end(ap)
00085
00086 #endif
00087
00088 #endif