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
1 1 /*
2 2 * This file and its contents are supplied under the terms of the
3 3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 4 * You may only use this file in accordance with the terms of version
5 5 * 1.0 of the CDDL.
6 6 *
7 7 * A full copy of the text of the CDDL should have accompanied this
8 8 * source. A copy of the CDDL is also available via the Internet at
↓ 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