Coherent4.2.10/include/stdarg.h

/* (-lgl
 *	Coherent 386 release 4.2
 *	Copyright (c) 1982, 1993 by Mark Williams Company.
 *	All rights reserved. May not be copied without permission.
 *	For copying permission and licensing info, write licensing@mwc.com
 -lgl) */

#ifndef	__STDARG_H__
#define	__STDARG_H__

/*
 * Please note that passing a type to va_arg() that would be widened when
 * promoted to integer type causes undefined behavior. This includes char,
 * short and enumeration types (since many translators use the narrowest
 * possible width for storing an enumeration).
 */

#include <common/ccompat.h>
#include <common/__valist.h>

typedef	__va_list		va_list;

/*
 * As a convenience, we round sizes up to a minimum size of "int". This may
 * help people who are confused about what the implementation is permitted
 * to do with enumeration types, for instance. Note that this does introduce
 * some dependence on the endianness of the machine, however, because those
 * machines which are big-endian will have put padding below the datum.
 */

#define	__size_to_int(type)	(sizeof (type) < sizeof (int) ? \
				 sizeof (int) : sizeof (type))
#if	_I386
# define	__size_to_datum(type)	__size_to_int (type)
#else
# define	__size_to_datum(type)	sizeof (type)
#endif


#define	va_start(ap, pN)	(ap = (va_list) \
					((char *) & pN + __size_to_int (pN)))
#define	va_arg(ap, type)	\
	((* (type *) ((ap += __size_to_int (type)) - __size_to_datum (type))))
#define	va_end(ap)		((void) 0)

#endif	/* ! defined (__STDARG_H__) */