Fixed va_arg() to work for small args (as in stdarg.h).

This commit is contained in:
Bruce Evans 1997-06-21 16:20:55 +00:00
parent 8a77722ad7
commit c8f8a520f6
2 changed files with 12 additions and 18 deletions

View File

@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)varargs.h 8.2 (Berkeley) 3/22/94
* $Id: varargs.h,v 1.5 1997/02/22 09:35:22 peter Exp $
* $Id: varargs.h,v 1.6 1997/02/28 07:12:34 bde Exp $
*/
#ifndef _VARARGS_H_
@ -44,6 +44,9 @@
typedef char *va_list;
#define __va_size(type) \
(((sizeof(type) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
#ifdef __GNUC__
#define va_alist __builtin_va_alist
#endif
@ -54,16 +57,10 @@ typedef char *va_list;
#endif
#define va_start(ap) \
ap = (char *)&va_alist
((ap) = (va_list)&va_alist)
#ifdef KERNEL
#define va_arg(ap, type) \
((type *)(ap += sizeof(type)))[-1]
#else
#define va_arg(ap, type) \
((type *)(ap += sizeof(type) < sizeof(int) ? \
(abort(), 0) : sizeof(type)))[-1]
#endif
(*(type *)((ap) += __va_size(type), (ap) - __va_size(type)))
#define va_end(ap)

View File

@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)varargs.h 8.2 (Berkeley) 3/22/94
* $Id: varargs.h,v 1.5 1997/02/22 09:35:22 peter Exp $
* $Id: varargs.h,v 1.6 1997/02/28 07:12:34 bde Exp $
*/
#ifndef _VARARGS_H_
@ -44,6 +44,9 @@
typedef char *va_list;
#define __va_size(type) \
(((sizeof(type) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
#ifdef __GNUC__
#define va_alist __builtin_va_alist
#endif
@ -54,16 +57,10 @@ typedef char *va_list;
#endif
#define va_start(ap) \
ap = (char *)&va_alist
((ap) = (va_list)&va_alist)
#ifdef KERNEL
#define va_arg(ap, type) \
((type *)(ap += sizeof(type)))[-1]
#else
#define va_arg(ap, type) \
((type *)(ap += sizeof(type) < sizeof(int) ? \
(abort(), 0) : sizeof(type)))[-1]
#endif
(*(type *)((ap) += __va_size(type), (ap) - __va_size(type)))
#define va_end(ap)