Print this page
8017 Comply with POSIX.1-2008 and C++11 for the definition of NULL

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/sys/null.h
          +++ new/usr/src/uts/common/sys/null.h
↓ open down ↓ 8 lines elided ↑ open up ↑
   9    9   * http://www.illumos.org/license/CDDL.
  10   10   */
  11   11  
  12   12  /*
  13   13   * Copyright 2014-2016 PALO, Richard.
  14   14   */
  15   15  
  16   16  #ifndef _SYS_NULL_H
  17   17  #define _SYS_NULL_H
  18   18  
       19 +#include <sys/feature_tests.h>
       20 +
  19   21  #ifndef NULL
  20   22  
       23 +/*
       24 + * POSIX.1-2008 requires that the NULL macro be cast to type void *.
       25 + * Historically, this has not been done, so we only enable this in a
       26 + * POSIX.1-2008 compilation environment.
       27 + */
       28 +
       29 +#if defined(_XPG7) && !defined(__cplusplus)
       30 +#define NULL    ((void *)0)
       31 +#else
       32 +
       33 +/*
       34 + * ISO C++ requires that the NULL macro be defined as a constant integral
       35 + * type evaluating to zero until C++11, and an integer or pointer literal
       36 + * with value zero from C++11 onwards.
       37 + */
       38 +
       39 +#if defined(__cplusplus) && __cplusplus >= 201103L
       40 +#define NULL    nullptr
       41 +#else
  21   42  #if defined(_LP64)
  22   43  #define NULL    0L
  23   44  #else
  24   45  #define NULL    0
  25      -#endif
       46 +#endif  /* _LP64 */
       47 +#endif  /* C++11 */
       48 +#endif  /* _XPG7 */
  26   49  
  27   50  #endif  /* NULL */
  28   51  
  29   52  #endif  /* _SYS_NULL_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX