This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Add simple versions of random() and srandom()



On 03/23/2016 03:36 PM, Yaakov Selkowitz wrote:
On 2016-03-23 13:43, Joel Sherrill wrote:
On 3/23/2016 12:45 PM, Yaakov Selkowitz wrote:
On 2016-03-23 12:38, Joel Sherrill wrote:
--- a/newlib/libc/include/stdlib.h
+++ b/newlib/libc/include/stdlib.h
@@ -226,6 +226,12 @@ unsigned short *
   _VOID  _EXFUN(srand48,(long));
   _VOID  _EXFUN(_srand48_r,(struct _reent *, long));
   #endif /* __SVID_VISIBLE || __XSI_VISIBLE */
+#if __SVID_VISIBLE || __XSI_VISIBLE >= 4 || __BSD_VISIBLE

Please review my previous comment on this.

Is this the desired guard?

#if __MISC_VISIBLE || __XSI_VISIBLE >= 500

MISC is right, but based on Craig's comment, it should be:

#if __MISC_VISIBLE || __XSI_VISIBLE >= 4

+ANSI_SYNOPSIS
+    #define _XOPEN_SOURCE 500
+    #include <stdlib.h>
+    long int random(void);
+    void srandom(unsigned int <[seed]>);

This doesn't match the header guard, nor does it account for the
multiple options.

So how is the || documented in this format?

That hasn't been determined yet, but what about e.g.:

    /* See PORTABILITY for feature test macros */
    #include <stdlib.h>
    long int random(void);
    void srandom(unsigned int <[seed]>);

Then mention the possibilities in PORTABILITY?

Two other possibilities for consideration (considering in PORTABILITY as #1, and only showing an abbreviated example without getting into the POSIX 4 extension complication, which would just add a line or 2):

2)  the way Linux man pages do it.  From Linux random(3):
"Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

       random(), srandom(), initstate(), setstate(): _SVID_SOURCE ||
       _BSD_SOURCE || _XOPEN_SOURCE >= 500"

3)  Or perhaps something like:

#define _BSD_SOURCE // one (or more) of these #defines is needed before the #include
#define _SVID_SOURCE
#define _XOPEN_SOURCE 500
#include <stdlib.h>

The Linux 'A || B' formula could be used under PORTABILITY.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]