<stdio.h>: fcloseall, fopencookie, vasprintf, asprintf by default

Message ID 87leo04e48.fsf@oldenburg.str.redhat.com
State Superseded
Headers
Series <stdio.h>: fcloseall, fopencookie, vasprintf, asprintf by default |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent
dj/TryBot-32bit success Build for i686

Commit Message

Florian Weimer Nov. 24, 2022, 2:32 p.m. UTC
  FreeBSD makes these functions available by default, so we should
not treat them as GNU-specific and restrict them to _GNU_SOURCE.

Tested on x86_64-linux-gnu.

---
 libio/stdio.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)


base-commit: 5bb4b51a76cc9bec72f67f702b5bf2fce30f0f7c
  

Comments

Cristian Rodríguez Nov. 24, 2022, 3:13 p.m. UTC | #1
On Thu, Nov 24, 2022 at 11:32 AM Florian Weimer via Libc-alpha
<libc-alpha@sourceware.org> wrote:
>
> FreeBSD makes these functions available by default, so we should
> not treat them as GNU-specific and restrict them to _GNU_SOURCE.
>
> Tested on x86_64-linux-gnu.

It would be great if fcloseall worked before exposing it by default. :-)

https://sourceware.org/bugzilla/show_bug.cgi?id=28099

(this is last time I tested, it didn't close anything whatsoever)
  
Florian Weimer Nov. 24, 2022, 3:55 p.m. UTC | #2
* Cristian Rodríguez:

> On Thu, Nov 24, 2022 at 11:32 AM Florian Weimer via Libc-alpha
> <libc-alpha@sourceware.org> wrote:
>>
>> FreeBSD makes these functions available by default, so we should
>> not treat them as GNU-specific and restrict them to _GNU_SOURCE.
>>
>> Tested on x86_64-linux-gnu.
>
> It would be great if fcloseall worked before exposing it by default. :-)
>
> https://sourceware.org/bugzilla/show_bug.cgi?id=28099
>
> (this is last time I tested, it didn't close anything whatsoever)

Hmm, okay, I see the current implementation can't really work.  Closing
the standard buffers is rather unsafe, too.  So I think we should
deprecate it.  I'll send a separate patch for that soon.

I've also sent a v2 without fcloseall.

Thanks,
Florian
  

Patch

diff --git a/libio/stdio.h b/libio/stdio.h
index 0e0f16b464..0def214651 100644
--- a/libio/stdio.h
+++ b/libio/stdio.h
@@ -42,7 +42,7 @@  __BEGIN_DECLS
 #include <bits/types/FILE.h>
 #include <bits/types/struct_FILE.h>
 
-#ifdef __USE_GNU
+#ifdef __USE_MISC
 # include <bits/types/cookie_io_functions_t.h>
 #endif
 
@@ -239,7 +239,7 @@  extern int fflush (FILE *__stream);
 extern int fflush_unlocked (FILE *__stream);
 #endif
 
-#ifdef __USE_GNU
+#ifdef __USE_MISC
 /* Close all streams.
 
    This function is not part of POSIX and therefore no official
@@ -294,7 +294,7 @@  extern FILE *fdopen (int __fd, const char *__modes) __THROW
   __attribute_malloc__ __attr_dealloc_fclose __wur;
 #endif
 
-#ifdef	__USE_GNU
+#ifdef	__USE_MISC
 /* Create a new stream that refers to the given magic cookie,
    and uses the given functions for input and output.  */
 extern FILE *fopencookie (void *__restrict __magic_cookie,
@@ -384,7 +384,7 @@  extern int vsnprintf (char *__restrict __s, size_t __maxlen,
      __THROWNL __attribute__ ((__format__ (__printf__, 3, 0)));
 #endif
 
-#if __GLIBC_USE (LIB_EXT2)
+#if defined (__USE_MISC) || __GLIBC_USE (LIB_EXT2)
 /* Write formatted output to a string dynamically allocated with `malloc'.
    Store the address of the string in *PTR.  */
 extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,