From c2643afa7fc0563dd6bdf3b2b693b0447e6fcf1f Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sat, 29 Aug 2015 03:08:23 +0200 Subject: add stdarg.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- include/stdarg.h | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 include/stdarg.h (limited to 'include/stdarg.h') diff --git a/include/stdarg.h b/include/stdarg.h new file mode 100644 index 0000000..577f26a --- /dev/null +++ b/include/stdarg.h @@ -0,0 +1,85 @@ +/** + * slibc — Yet another C library + * Copyright © 2015 Mattias Andrée (maandree@member.fsf.org) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#ifndef _STDARG_H +#define _STDARG_H +#include + + +#include + + +/* If does not define what is required, + * fall back to compiler-builtin definitions. */ + + + +/** + * State of variadic argument-reading. + */ +#ifndef __DEFINED_va_list +# define __DEFINED_va_list +typedef __builtin_va_list va_list; +#endif + +/** + * Prologue to using a variadic arguments. + * + * @param state:va_list The state of the variadic argument-reading. + * @param last:identifier The the last non-variadic argument. + */ +#ifndef va_start +# define va_start(state, last) __builtin_va_start(state, last) +#endif + +/** + * Epilogue to using a variadic arguments. + * + * @param state:va_list The state of the variadic argument-reading. + */ +#ifndef va_end +# define va_end(state) __builtin_va_end(state) +#endif + +/** + * Get the next variadic argument. + * + * @param state:va_list The state of the variadic argument-reading. + * @param type:identifier The data type used in the called to the function, + * must match exactly. Arguments smaller than `int` + * are promoted in the cal, thus you must not use a + * type smaller than `int`, lest bad things will happen. + * @return :`type` The next argument. + */ +#ifndef va_arg +# define va_arg(state, type) __builtin_va_arg(state, type) +#endif + +/** + * Copy a state of variadic argument-reading. + * + * @param destination:va_list The copy if `source`. + * @param source:va_list The state of the variadic argument-reading. + */ +#ifndef va_copy +# define va_copy(destination, source) __builtin_va_copy(destination, source) +#endif + + + +#endif + -- cgit v1.2.3-70-g09d2