tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: [PATCH] Make more of stdlib.h visible if _NETBSD_SOURCE isn't defined



On Sun, Aug 30, 2020 at 07:50:59PM +0200, Joerg Sonnenberger wrote:
> On Sun, Aug 30, 2020 at 05:18:43PM +0000, maya%NetBSD.org@localhost wrote:
> > On Sun, Aug 30, 2020 at 06:09:47PM +0200, Joerg Sonnenberger wrote:
> > > On Sun, Aug 30, 2020 at 12:00:33PM +0000, coypu%sdf.org@localhost wrote:
> > > > Move the big "if _NETBSD_SOURCE" chunk to the "Implementation defined" section.
> > > > Makes "at_quick_exit" and others visible for strict C/C++.
> > > 
> > > alloca is not part of POSIX.
> > > 
> > > Joerg
> > 
> > Hmm, should I just remove lines 349, 139-140?
> > 
> > #if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
> >     defined(_NETBSD_SOURCE)
> > 
> >     ... bunch of properly guarded things that need no additional guards ...
> > 
> > #endif /* _POSIX_C_SOURCE || _XOPEN_SOURCE || _NETBSD_SOURCE */
> 
> I can't tell since I don't know what problem you are trying to fix. Note
> that strict C++ support is supposed to hide all things not in the C++
> standard or required to implement it. alloca certainly does not belong
> into that.
> 
> Joerg

The following script fails to compile, it shouldn't.

#!/bin/sh

cat << EOF > test.c
#include <stdlib.h>
#include <stdio.h>
 
void f1(void)
{
    puts("pushed first");
    fflush(stdout);
}
 
void f2(void)
{
    puts("pushed second");
}
 
int main(void)
{
    at_quick_exit(f1);
    at_quick_exit(f2);
    quick_exit(0);
}
EOF
cc test.c -std=c11 -Werror


The following patch fixes this issue:

Fix incorrect ifdef guards. Some of stdlib.h is incorrectly only
visible with POSIX/_NETBSD_SOURCE.

This part of the file is already correctly guarded, so we can just
remove the extra ifdefs.

Index: stdlib.h
===================================================================
RCS file: /cvsroot/src/include/stdlib.h,v
retrieving revision 1.122
diff -u -r1.122 stdlib.h
--- stdlib.h	26 May 2020 21:49:29 -0000	1.122
+++ stdlib.h	31 Aug 2020 00:24:24 -0000
@@ -136,10 +136,6 @@
 int	 mbtowc(wchar_t * __restrict, const char * __restrict, size_t);
 size_t	 wcstombs(char * __restrict, const wchar_t * __restrict, size_t);
 
-#if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
-    defined(_NETBSD_SOURCE)
-
-
 /*
  * IEEE Std 1003.1c-95, also adopted by X/Open CAE Spec Issue 5 Version 2
  */
@@ -346,7 +342,6 @@
 
 int	reallocarr(void *, size_t, size_t);
 #endif /* _NETBSD_SOURCE */
-#endif /* _POSIX_C_SOURCE || _XOPEN_SOURCE || _NETBSD_SOURCE */
 
 #if defined(_NETBSD_SOURCE)
 qdiv_t	 qdiv(quad_t, quad_t);



Home | Main Index | Thread Index | Old Index