Re: [PATCH] stdlib, wcsmbs: Add missing __nonnull to strto*/wcsto* [BZ #33053]
Adhemerval Zanella Netto <[email protected]>
| Newsgroups | gmane.comp.lib.glibc.alpha |
|---|---|
| Organization | Linaro |
| Message-ID | <[email protected]> |
On 25/08/26 14:21, Shamil Abdulaev wrote: > The strto* declarations in stdlib.h are marked __nonnull, but the > corresponding declarations in inttypes.h and wchar.h are not. Add the > attribute there as well, covering the __REDIRECT and __isoc23_* variants > and the _l forms, matching stdlib.h. > > Signed-off-by: Shamil Abdulaev <[email protected]> LGTM, thanks. Reviewed-by: Adhemerval Zanella <[email protected]> > --- > stdlib/inttypes.h | 30 ++++++----- > wcsmbs/wchar.h | 131 +++++++++++++++++++++++++++++----------------- > 2 files changed, 101 insertions(+), 60 deletions(-) > > diff --git a/stdlib/inttypes.h b/stdlib/inttypes.h > index 1a80fdb8d7..e141f66636 100644 > --- a/stdlib/inttypes.h > +++ b/stdlib/inttypes.h > @@ -366,21 +366,23 @@ extern imaxdiv_t imaxdiv (intmax_t __numer, intmax_t __denom) > > /* Like `strtol' but convert to `intmax_t'. */ > extern intmax_t strtoimax (const char *__restrict __nptr, > - char **__restrict __endptr, int __base) __THROW; > + char **__restrict __endptr, int __base) > + __THROW __nonnull ((1)); > > /* Like `strtoul' but convert to `uintmax_t'. */ > extern uintmax_t strtoumax (const char *__restrict __nptr, > - char ** __restrict __endptr, int __base) __THROW; > + char ** __restrict __endptr, int __base) > + __THROW __nonnull ((1)); > > /* Like `wcstol' but convert to `intmax_t'. */ > extern intmax_t wcstoimax (const __gwchar_t *__restrict __nptr, > __gwchar_t **__restrict __endptr, int __base) > - __THROW; > + __THROW __nonnull ((1)); > > /* Like `wcstoul' but convert to `uintmax_t'. */ > extern uintmax_t wcstoumax (const __gwchar_t *__restrict __nptr, > __gwchar_t ** __restrict __endptr, int __base) > - __THROW; > + __THROW __nonnull ((1)); > > /* Versions of the above functions that handle '0b' and '0B' prefixes > in base 0 or 2. */ > @@ -388,33 +390,37 @@ extern uintmax_t wcstoumax (const __gwchar_t *__restrict __nptr, > # ifdef __REDIRECT > extern intmax_t __REDIRECT_NTH (strtoimax, (const char *__restrict __nptr, > char **__restrict __endptr, > - int __base), __isoc23_strtoimax); > + int __base), __isoc23_strtoimax) > + __nonnull ((1)); > extern uintmax_t __REDIRECT_NTH (strtoumax, (const char *__restrict __nptr, > char **__restrict __endptr, > - int __base), __isoc23_strtoumax); > + int __base), __isoc23_strtoumax) > + __nonnull ((1)); > extern intmax_t __REDIRECT_NTH (wcstoimax, > (const __gwchar_t *__restrict __nptr, > __gwchar_t **__restrict __endptr, int __base), > - __isoc23_wcstoimax); > + __isoc23_wcstoimax) > + __nonnull ((1)); > extern uintmax_t __REDIRECT_NTH (wcstoumax, > (const __gwchar_t *__restrict __nptr, > __gwchar_t **__restrict __endptr, int __base), > - __isoc23_wcstoumax); > + __isoc23_wcstoumax) > + __nonnull ((1)); > # else > extern intmax_t __isoc23_strtoimax (const char *__restrict __nptr, > char **__restrict __endptr, int __base) > - __THROW; > + __THROW __nonnull ((1)); > extern uintmax_t __isoc23_strtoumax (const char *__restrict __nptr, > char ** __restrict __endptr, int __base) > - __THROW; > + __THROW __nonnull ((1)); > extern intmax_t __isoc23_wcstoimax (const __gwchar_t *__restrict __nptr, > __gwchar_t **__restrict __endptr, > int __base) > - __THROW; > + __THROW __nonnull ((1)); > extern uintmax_t __isoc23_wcstoumax (const __gwchar_t *__restrict __nptr, > __gwchar_t ** __restrict __endptr, > int __base) > - __THROW; > + __THROW __nonnull ((1)); > # define strtoimax __isoc23_strtoimax > # define strtoumax __isoc23_strtoumax > # define wcstoimax __isoc23_wcstoimax > diff --git a/wcsmbs/wchar.h b/wcsmbs/wchar.h > index ec169ee67e..4709c210fb 100644 > --- a/wcsmbs/wchar.h > +++ b/wcsmbs/wchar.h > @@ -425,14 +425,17 @@ extern int wcswidth (const wchar_t *__s, size_t __n) __THROW; > /* Convert initial portion of the wide string NPTR to `double' > representation. */ > extern double wcstod (const wchar_t *__restrict __nptr, > - wchar_t **__restrict __endptr) __THROW; > + wchar_t **__restrict __endptr) > + __THROW __nonnull ((1)); > > #ifdef __USE_ISOC99 > /* Likewise for `float' and `long double' sizes of floating-point numbers. */ > extern float wcstof (const wchar_t *__restrict __nptr, > - wchar_t **__restrict __endptr) __THROW; > + wchar_t **__restrict __endptr) > + __THROW __nonnull ((1)); > extern long double wcstold (const wchar_t *__restrict __nptr, > - wchar_t **__restrict __endptr) __THROW; > + wchar_t **__restrict __endptr) > + __THROW __nonnull ((1)); > #endif /* C99 */ > > #if __GLIBC_USE (IEC_60559_TYPES_EXT) && __GLIBC_USE (ISOC23) > @@ -440,37 +443,44 @@ extern long double wcstold (const wchar_t *__restrict __nptr, > > # if __HAVE_FLOAT16 > extern _Float16 wcstof16 (const wchar_t *__restrict __nptr, > - wchar_t **__restrict __endptr) __THROW; > + wchar_t **__restrict __endptr) > + __THROW __nonnull ((1)); > # endif > > # if __HAVE_FLOAT32 > extern _Float32 wcstof32 (const wchar_t *__restrict __nptr, > - wchar_t **__restrict __endptr) __THROW; > + wchar_t **__restrict __endptr) > + __THROW __nonnull ((1)); > # endif > > # if __HAVE_FLOAT64 > extern _Float64 wcstof64 (const wchar_t *__restrict __nptr, > - wchar_t **__restrict __endptr) __THROW; > + wchar_t **__restrict __endptr) > + __THROW __nonnull ((1)); > # endif > > # if __HAVE_FLOAT128 > extern _Float128 wcstof128 (const wchar_t *__restrict __nptr, > - wchar_t **__restrict __endptr) __THROW; > + wchar_t **__restrict __endptr) > + __THROW __nonnull ((1)); > # endif > > # if __HAVE_FLOAT32X > extern _Float32x wcstof32x (const wchar_t *__restrict __nptr, > - wchar_t **__restrict __endptr) __THROW; > + wchar_t **__restrict __endptr) > + __THROW __nonnull ((1)); > # endif > > # if __HAVE_FLOAT64X > extern _Float64x wcstof64x (const wchar_t *__restrict __nptr, > - wchar_t **__restrict __endptr) __THROW; > + wchar_t **__restrict __endptr) > + __THROW __nonnull ((1)); > # endif > > # if __HAVE_FLOAT128X > extern _Float128x wcstof128x (const wchar_t *__restrict __nptr, > - wchar_t **__restrict __endptr) __THROW; > + wchar_t **__restrict __endptr) > + __THROW __nonnull ((1)); > # endif > #endif /* __GLIBC_USE (IEC_60559_TYPES_EXT) && __GLIBC_USE (ISOC23) */ > > @@ -478,13 +488,14 @@ extern _Float128x wcstof128x (const wchar_t *__restrict __nptr, > /* Convert initial portion of wide string NPTR to `long int' > representation. */ > extern long int wcstol (const wchar_t *__restrict __nptr, > - wchar_t **__restrict __endptr, int __base) __THROW; > + wchar_t **__restrict __endptr, int __base) > + __THROW __nonnull ((1)); > > /* Convert initial portion of wide string NPTR to `unsigned long int' > representation. */ > extern unsigned long int wcstoul (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, int __base) > - __THROW; > + __THROW __nonnull ((1)); > > #ifdef __USE_ISOC99 > /* Convert initial portion of wide string NPTR to `long long int' > @@ -492,14 +503,15 @@ extern unsigned long int wcstoul (const wchar_t *__restrict __nptr, > __extension__ > extern long long int wcstoll (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, int __base) > - __THROW; > + __THROW __nonnull ((1)); > > /* Convert initial portion of wide string NPTR to `unsigned long long int' > representation. */ > __extension__ > extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - int __base) __THROW; > + int __base) > + __THROW __nonnull ((1)); > #endif /* ISO C99. */ > > #ifdef __USE_GNU > @@ -508,14 +520,15 @@ extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr, > __extension__ > extern long long int wcstoq (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, int __base) > - __THROW; > + __THROW __nonnull ((1)); > > /* Convert initial portion of wide string NPTR to `unsigned long long int' > representation. */ > __extension__ > extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - int __base) __THROW; > + int __base) > + __THROW __nonnull ((1)); > #endif /* Use GNU. */ > > /* Versions of the above functions that handle '0b' and '0B' prefixes > @@ -524,50 +537,56 @@ extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr, > # ifdef __REDIRECT > extern long int __REDIRECT_NTH (wcstol, (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - int __base), __isoc23_wcstol); > + int __base), __isoc23_wcstol) > + __nonnull ((1)); > extern unsigned long int __REDIRECT_NTH (wcstoul, > (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - int __base), __isoc23_wcstoul); > + int __base), __isoc23_wcstoul) > + __nonnull ((1)); > __extension__ > extern long long int __REDIRECT_NTH (wcstoll, > (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - int __base), __isoc23_wcstoll); > + int __base), __isoc23_wcstoll) > + __nonnull ((1)); > __extension__ > extern unsigned long long int __REDIRECT_NTH (wcstoull, > (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - int __base), __isoc23_wcstoull); > + int __base), __isoc23_wcstoull) > + __nonnull ((1)); > # ifdef __USE_GNU > __extension__ > extern long long int __REDIRECT_NTH (wcstoq, (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - int __base), __isoc23_wcstoll); > + int __base), __isoc23_wcstoll) > + __nonnull ((1)); > __extension__ > extern unsigned long long int __REDIRECT_NTH (wcstouq, > (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - int __base), __isoc23_wcstoull); > + int __base), __isoc23_wcstoull) > + __nonnull ((1)); > # endif > # else > extern long int __isoc23_wcstol (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, int __base) > - __THROW; > + __THROW __nonnull ((1)); > extern unsigned long int __isoc23_wcstoul (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base) > - __THROW; > + __THROW __nonnull ((1)); > __extension__ > extern long long int __isoc23_wcstoll (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base) > - __THROW; > + __THROW __nonnull ((1)); > __extension__ > extern unsigned long long int __isoc23_wcstoull (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base) > - __THROW; > + __THROW __nonnull ((1)); > # define wcstol __isoc23_wcstol > # define wcstoul __isoc23_wcstoul > # define wcstoll __isoc23_wcstoll > @@ -585,22 +604,25 @@ extern unsigned long long int __isoc23_wcstoull (const wchar_t *__restrict __npt > by the POSIX.1-2008 extended locale API. */ > extern long int wcstol_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, int __base, > - locale_t __loc) __THROW; > + locale_t __loc) > + __THROW __nonnull ((1, 4)); > > extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - int __base, locale_t __loc) __THROW; > + int __base, locale_t __loc) > + __THROW __nonnull ((1, 4)); > > __extension__ > extern long long int wcstoll_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - int __base, locale_t __loc) __THROW; > + int __base, locale_t __loc) > + __THROW __nonnull ((1, 4)); > > __extension__ > extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base, locale_t __loc) > - __THROW; > + __THROW __nonnull ((1, 4)); > > /* Versions of the above functions that handle '0b' and '0B' prefixes > in base 0 or 2. */ > @@ -609,42 +631,47 @@ extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr, > extern long int __REDIRECT_NTH (wcstol_l, (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base, locale_t __loc), > - __isoc23_wcstol_l); > + __isoc23_wcstol_l) > + __nonnull ((1, 4)); > extern unsigned long int __REDIRECT_NTH (wcstoul_l, > (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base, locale_t __loc), > - __isoc23_wcstoul_l); > + __isoc23_wcstoul_l) > + __nonnull ((1, 4)); > __extension__ > extern long long int __REDIRECT_NTH (wcstoll_l, > (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base, locale_t __loc), > - __isoc23_wcstoll_l); > + __isoc23_wcstoll_l) > + __nonnull ((1, 4)); > __extension__ > extern unsigned long long int __REDIRECT_NTH (wcstoull_l, > (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base, locale_t __loc), > - __isoc23_wcstoull_l); > + __isoc23_wcstoull_l) > + __nonnull ((1, 4)); > # else > extern long int __isoc23_wcstol_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, int __base, > - locale_t __loc) __THROW; > + locale_t __loc) > + __THROW __nonnull ((1, 4)); > extern unsigned long int __isoc23_wcstoul_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base, locale_t __loc) > - __THROW; > + __THROW __nonnull ((1, 4)); > __extension__ > extern long long int __isoc23_wcstoll_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base, locale_t __loc) > - __THROW; > + __THROW __nonnull ((1, 4)); > __extension__ > extern unsigned long long int __isoc23_wcstoull_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base, locale_t __loc) > - __THROW; > + __THROW __nonnull ((1, 4)); > # define wcstol_l __isoc23_wcstol_l > # define wcstoul_l __isoc23_wcstoul_l > # define wcstoll_l __isoc23_wcstoll_l > @@ -654,56 +681,64 @@ extern unsigned long long int __isoc23_wcstoull_l (const wchar_t *__restrict __n > > extern double wcstod_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, locale_t __loc) > - __THROW; > + __THROW __nonnull ((1, 3)); > > extern float wcstof_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, locale_t __loc) > - __THROW; > + __THROW __nonnull ((1, 3)); > > extern long double wcstold_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - locale_t __loc) __THROW; > + locale_t __loc) > + __THROW __nonnull ((1, 3)); > > # if __HAVE_FLOAT16 > extern _Float16 wcstof16_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - locale_t __loc) __THROW; > + locale_t __loc) > + __THROW __nonnull ((1, 3)); > # endif > > # if __HAVE_FLOAT32 > extern _Float32 wcstof32_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - locale_t __loc) __THROW; > + locale_t __loc) > + __THROW __nonnull ((1, 3)); > # endif > > # if __HAVE_FLOAT64 > extern _Float64 wcstof64_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - locale_t __loc) __THROW; > + locale_t __loc) > + __THROW __nonnull ((1, 3)); > # endif > > # if __HAVE_FLOAT128 > extern _Float128 wcstof128_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - locale_t __loc) __THROW; > + locale_t __loc) > + __THROW __nonnull ((1, 3)); > # endif > > # if __HAVE_FLOAT32X > extern _Float32x wcstof32x_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - locale_t __loc) __THROW; > + locale_t __loc) > + __THROW __nonnull ((1, 3)); > # endif > > # if __HAVE_FLOAT64X > extern _Float64x wcstof64x_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - locale_t __loc) __THROW; > + locale_t __loc) > + __THROW __nonnull ((1, 3)); > # endif > > # if __HAVE_FLOAT128X > extern _Float128x wcstof128x_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > - locale_t __loc) __THROW; > + locale_t __loc) > + __THROW __nonnull ((1, 3)); > # endif > #endif /* use GNU */ >