From: Bruno Haible Date: Sat, 7 Aug 2021 16:17:55 +0000 (+0200) Subject: stdio: Improve GCC 11 allocation-deallocation checking. X-Git-Tag: v1.0~2714 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=a2dcb11b99a4f3b52c6df3c4657405cb857b0e63;p=gnulib.git stdio: Improve GCC 11 allocation-deallocation checking. * lib/stdio.in.h (fdopen, fopen, tmpfile): Declare that deallocation must happen through 'fclose'. (popen): Declare that deallocation must happen through 'pclose'. * lib/stdio-safer.h (fopen_safer, tmpfile_safer): Declare that deallocation must happen through 'fclose'. (popen_safer): Declare that deallocation must happen through 'pclose'. (freopen_safer): Declare that arguments must be non-NULL. --- diff --git a/ChangeLog b/ChangeLog index fbfa848a9b..1ef6f6b34c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,19 @@ +2021-08-07 Bruno Haible + + stdio: Improve GCC 11 allocation-deallocation checking. + * lib/stdio.in.h (fdopen, fopen, tmpfile): Declare that deallocation + must happen through 'fclose'. + (popen): Declare that deallocation must happen through 'pclose'. + * lib/stdio-safer.h (fopen_safer, tmpfile_safer): Declare that + deallocation must happen through 'fclose'. + (popen_safer): Declare that deallocation must happen through 'pclose'. + (freopen_safer): Declare that arguments must be non-NULL. + 2021-08-07 Bruno Haible dirent: Improve GCC 11 allocation-deallocation checking. * lib/dirent.in.h (closedir): Move declaration up. - (opendir, fdopendir): Declare that that deallocation must happen through + (opendir, fdopendir): Declare that deallocation must happen through 'closedir'. * lib/dirent-safer.h (opendir_safer): Likewise. * lib/opendirat.h (opendirat): Likewise. diff --git a/lib/stdio-safer.h b/lib/stdio-safer.h index 464ffcf933..53ee971b47 100644 --- a/lib/stdio-safer.h +++ b/lib/stdio-safer.h @@ -20,17 +20,21 @@ #include #if GNULIB_FOPEN_SAFER -FILE *fopen_safer (char const *, char const *); +FILE *fopen_safer (char const *, char const *) + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1); #endif #if GNULIB_FREOPEN_SAFER -FILE *freopen_safer (char const *, char const *, FILE *); +FILE *freopen_safer (char const *, char const *, FILE *) + _GL_ARG_NONNULL ((2, 3)); #endif #if GNULIB_POPEN_SAFER -FILE *popen_safer (char const *, char const *); +FILE *popen_safer (char const *, char const *) + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1); #endif #if GNULIB_TMPFILE_SAFER -FILE *tmpfile_safer (void); +FILE *tmpfile_safer (void) + _GL_ATTRIBUTE_DEALLOC (fclose, 1); #endif diff --git a/lib/stdio.in.h b/lib/stdio.in.h index 20ba488a47..7986f72d10 100644 --- a/lib/stdio.in.h +++ b/lib/stdio.in.h @@ -260,8 +260,9 @@ _GL_CXXALIASWARN (fcloseall); # undef fdopen # define fdopen rpl_fdopen # endif -_GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode) - _GL_ARG_NONNULL ((2))); +_GL_FUNCDECL_RPL (fdopen, FILE *, + (int fd, const char *mode) + _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); _GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) @@ -380,7 +381,7 @@ _GL_CXXALIASWARN (fileno); # endif _GL_FUNCDECL_RPL (fopen, FILE *, (const char *restrict filename, const char *restrict mode) - _GL_ARG_NONNULL ((1, 2))); + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); _GL_CXXALIAS_RPL (fopen, FILE *, (const char *restrict filename, const char *restrict mode)); # else @@ -1009,13 +1010,15 @@ _GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " # undef popen # define popen rpl_popen # endif -_GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode) - _GL_ARG_NONNULL ((1, 2))); +_GL_FUNCDECL_RPL (popen, FILE *, + (const char *cmd, const char *mode) + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1)); _GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); # else # if !@HAVE_POPEN@ -_GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) - _GL_ARG_NONNULL ((1, 2))); +_GL_FUNCDECL_SYS (popen, FILE *, + (const char *cmd, const char *mode) + _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1)); # endif _GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); # endif @@ -1346,7 +1349,8 @@ _GL_CXXALIASWARN (tempnam); # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define tmpfile rpl_tmpfile # endif -_GL_FUNCDECL_RPL (tmpfile, FILE *, (void)); +_GL_FUNCDECL_RPL (tmpfile, FILE *, (void) + _GL_ATTRIBUTE_DEALLOC (fclose, 1)); _GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); # else _GL_CXXALIAS_SYS (tmpfile, FILE *, (void));