Add <alloca.h> header.
authorzrj <rimvydas.jasinskas@gmail.com>
Mon, 1 Apr 2019 17:50:01 +0000 (20:50 +0300)
committerzrj <zrj@dragonflybsd.org>
Sun, 7 Apr 2019 19:15:04 +0000 (22:15 +0300)
There are quite a few ports that often assume <alloca.h> availability.
This addition should ease up porting efforts. It is reasonable to try
including different header than <stdlib.h> for alloca() definition:
 * alloca() is not implemented in libc (it is implemented by compiler);
 * <stdlib.h> will not provide alloca() macro for !__BSD_VISIBLE case;
 * including <stdlib.h> might bring in additional unwanted namespace
   pollution when implementing certain low-level features.

include/Makefile
include/alloca.h [new file with mode: 0644]

index 6ae83d2..7183e83 100644 (file)
@@ -8,7 +8,7 @@
 
 CLEANFILES= osreldate.h version vers.c vers.txt
 SUBDIR= arpa protocols rpc rpcsvc xlocale
-INCS=  a.out.h ar.h assert.h bitstring.h cpio.h ctype.h db.h \
+INCS=  a.out.h alloca.h ar.h assert.h bitstring.h cpio.h ctype.h db.h \
        dirent.h disktab.h \
        dlfcn.h elf.h elf-hints.h err.h float.h fmtmsg.h fnmatch.h fstab.h \
        fts.h ftw.h getopt.h glob.h grp.h \
diff --git a/include/alloca.h b/include/alloca.h
new file mode 100644 (file)
index 0000000..2f86003
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2019 The DragonFly Project.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _ALLOCA_H_
+#define _ALLOCA_H_
+
+#include <sys/cdefs.h>
+#include <stddef.h>
+
+/*
+ * This header is for compatibility only.
+ */
+
+__BEGIN_DECLS
+#undef  alloca /* some GNU bits try to get cute and define this on their own */
+#ifndef lint
+void   *alloca(size_t);
+#endif
+
+#if __GNUC__ >= 2 || defined(__INTEL_COMPILER)
+#define alloca(sz) __builtin_alloca(sz)
+#endif
+__END_DECLS
+
+#endif /* !_ALLOCA_H_ */