116
116
# endif
117
117
#endif
118
118
119
+ /* _GL_ATTRIBUTE_NONNULL_IF_NONZERO (NP, NI) declares that the argument NP
120
+ (a pointer) must not be NULL if the argument NI (an integer) is != 0. */
121
+ /* Applies to: functions. */
122
+ #ifndef _GL_ATTRIBUTE_NONNULL_IF_NONZERO
123
+ # if __GNUC__ >= 15 && !defined __clang__
124
+ # define _GL_ATTRIBUTE_NONNULL_IF_NONZERO (np, ni ) \
125
+ __attribute__ ((__nonnull_if_nonzero__ (np, ni)))
126
+ # else
127
+ # define _GL_ATTRIBUTE_NONNULL_IF_NONZERO (np, ni )
128
+ # endif
129
+ #endif
130
+
119
131
/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
120
132
*/
121
133
#ifndef _GL_ATTRIBUTE_NOTHROW
154
166
155
167
/* The definition of _GL_WARN_ON_USE is copied here. */
156
168
169
+
157
170
/* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though <stdlib.h> may not have
158
171
been included yet. */
159
172
#if @GNULIB_FREE_POSIX@
@@ -198,6 +211,44 @@ _GL_EXTERN_C void free (void *);
198
211
# endif
199
212
#endif
200
213
214
+
215
+ /* Declarations for ISO C N3322. */
216
+ #if defined __GNUC__ && __GNUC__ >= 15 && !defined __clang__
217
+ _GL_EXTERN_C void *memcpy (void *__dest, const void *__src, size_t __n)
218
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1 , 3 )
219
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2 , 3 );
220
+ _GL_EXTERN_C void *memccpy (void *__dest, const void *__src, int __c, size_t __n)
221
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1 , 4 )
222
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2 , 4 );
223
+ _GL_EXTERN_C void *memmove (void *__dest, const void *__src, size_t __n)
224
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1 , 3 )
225
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2 , 3 );
226
+ _GL_EXTERN_C char *strncpy (char *__dest, const char *__src, size_t __n)
227
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1 , 3 )
228
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2 , 3 );
229
+ _GL_EXTERN_C char *strndup (const char *__s, size_t __n)
230
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1 , 2 );
231
+ _GL_EXTERN_C char *strncat (char *__dest, const char *__src, size_t __n)
232
+ _GL_ARG_NONNULL ((1 )) _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2 , 3 );
233
+ _GL_EXTERN_C int memcmp (const void *__s1, const void *__s2, size_t __n)
234
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1 , 3 )
235
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2 , 3 );
236
+ _GL_EXTERN_C int strncmp (const char *__s1, const char *__s2, size_t __n)
237
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1 , 3 )
238
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2 , 3 );
239
+ # ifndef __cplusplus
240
+ _GL_EXTERN_C void *memchr (const void *__s, int __c, size_t __n)
241
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1 , 3 );
242
+ _GL_EXTERN_C void *memrchr (const void *__s, int __c, size_t __n)
243
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1 , 3 );
244
+ # endif
245
+ _GL_EXTERN_C void *memset (void *__s, int __c, size_t __n)
246
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1 , 3 );
247
+ _GL_EXTERN_C void *memset_explicit (void *__s, int __c, size_t __n)
248
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1 , 3 );
249
+ #endif
250
+
251
+
201
252
/* Clear a block of memory. The compiler will not delete a call to
202
253
this function, even if the block is dead after the call. */
203
254
#if @GNULIB_EXPLICIT_BZERO@
@@ -215,6 +266,7 @@ _GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - "
215
266
# endif
216
267
#endif
217
268
269
+
218
270
/* Find the index of the least-significant set bit. */
219
271
#if @GNULIB_FFSL@
220
272
# if !@HAVE_FFSL@
@@ -281,7 +333,7 @@ _GL_CXXALIASWARN (memccpy);
281
333
# endif
282
334
_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n),
283
335
_GL_ATTRIBUTE_PURE
284
- _GL_ARG_NONNULL (( 1 ) ));
336
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO ( 1 , 3 ));
285
337
_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n));
286
338
# else
287
339
/* On some systems, this function is defined as an overloaded function:
@@ -388,7 +440,7 @@ _GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - "
388
440
# if ! @HAVE_DECL_MEMRCHR@
389
441
_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int , size_t ),
390
442
_GL_ATTRIBUTE_PURE
391
- _GL_ARG_NONNULL (( 1 ) ));
443
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO ( 1 , 3 ));
392
444
# endif
393
445
/* On some systems, this function is defined as an overloaded function:
394
446
extern "C++" { const void * std::memrchr (const void *, int, size_t); }
@@ -425,12 +477,14 @@ _GL_WARN_ON_USE (memrchr, "memrchr is unportable - "
425
477
# define memset_explicit rpl_memset_explicit
426
478
# endif
427
479
_GL_FUNCDECL_RPL (memset_explicit, void *,
428
- (void *__dest, int __c, size_t __n), _GL_ARG_NONNULL ((1 )));
480
+ (void *__dest, int __c, size_t __n),
481
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1 , 3 ));
429
482
_GL_CXXALIAS_RPL (memset_explicit, void *, (void *__dest, int __c, size_t __n));
430
483
# else
431
484
# if !@HAVE_MEMSET_EXPLICIT@
432
485
_GL_FUNCDECL_SYS (memset_explicit, void *,
433
- (void *__dest, int __c, size_t __n), _GL_ARG_NONNULL ((1 )));
486
+ (void *__dest, int __c, size_t __n),
487
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1 , 3 ));
434
488
# endif
435
489
_GL_CXXALIAS_SYS (memset_explicit, void *, (void *__dest, int __c, size_t __n));
436
490
# endif
@@ -697,7 +751,8 @@ _GL_CXXALIASWARN (strdup);
697
751
# endif
698
752
_GL_FUNCDECL_RPL (strncat, char *,
699
753
(char *restrict dest, const char *restrict src, size_t n),
700
- _GL_ARG_NONNULL ((1 , 2 )));
754
+ _GL_ARG_NONNULL ((1 ))
755
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2 , 3 ));
701
756
_GL_CXXALIAS_RPL (strncat, char *,
702
757
(char *restrict dest, const char *restrict src, size_t n));
703
758
# else
@@ -724,7 +779,7 @@ _GL_WARN_ON_USE (strncat, "strncat is unportable - "
724
779
# endif
725
780
_GL_FUNCDECL_RPL (strndup, char *,
726
781
(char const *__s, size_t __n),
727
- _GL_ARG_NONNULL (( 1 ) )
782
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO ( 1 , 2 )
728
783
_GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
729
784
_GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n));
730
785
# else
@@ -733,13 +788,13 @@ _GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n));
733
788
# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
734
789
_GL_FUNCDECL_SYS (strndup, char *,
735
790
(char const *__s, size_t __n),
736
- _GL_ARG_NONNULL (( 1 ) )
791
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO ( 1 , 2 )
737
792
_GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE)
738
793
_GL_ATTRIBUTE_NOTHROW;
739
794
# else
740
795
_GL_FUNCDECL_SYS (strndup, char *,
741
796
(char const *__s, size_t __n),
742
- _GL_ARG_NONNULL (( 1 ) )
797
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO ( 1 , 2 )
743
798
_GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
744
799
# endif
745
800
# endif
@@ -752,13 +807,13 @@ _GL_CXXALIASWARN (strndup);
752
807
# if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
753
808
_GL_FUNCDECL_SYS (strndup, char *,
754
809
(char const *__s, size_t __n),
755
- _GL_ARG_NONNULL (( 1 ) )
810
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO ( 1 , 2 )
756
811
_GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE)
757
812
_GL_ATTRIBUTE_NOTHROW;
758
813
# else
759
814
_GL_FUNCDECL_SYS (strndup, char *,
760
815
(char const *__s, size_t __n),
761
- _GL_ARG_NONNULL (( 1 ) )
816
+ _GL_ATTRIBUTE_NONNULL_IF_NONZERO ( 1 , 2 )
762
817
_GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
763
818
# endif
764
819
# endif
0 commit comments