|
Message-ID: <CAFhhQJTz5r2OFYyLfHmK34cvinNyDACKLA=7BNhhTD4Z6RNyXQ@mail.gmail.com> Date: Fri, 9 Sep 2016 20:42:45 -0400 From: Daniel Sabogal <dsabogalcc@...il.com> To: musl@...ts.openwall.com Subject: Re: [PATCH] add missing *_unlocked and wcsftime_l prototypes to wchar.h On Fri, Sep 9, 2016 at 7:02 PM, Rich Felker <dalias@...c.org> wrote: > On Tue, Sep 06, 2016 at 05:09:39PM -0400, Daniel Sabogal wrote: >> these functions had been implemented, but prototypes were not made available >> --- >> include/wchar.h | 12 ++++++++++++ >> src/stdio/getwchar.c | 2 -- >> src/stdio/getwchar_unlocked.c | 8 ++++++++ >> src/stdio/putwchar.c | 2 -- >> src/stdio/putwchar_unlocked.c | 8 ++++++++ >> 5 files changed, 28 insertions(+), 4 deletions(-) >> create mode 100644 src/stdio/getwchar_unlocked.c >> create mode 100644 src/stdio/putwchar_unlocked.c >> >> diff --git a/include/wchar.h b/include/wchar.h >> index 0167dce..58818f6 100644 >> --- a/include/wchar.h >> +++ b/include/wchar.h >> @@ -136,6 +136,18 @@ size_t wcsftime (wchar_t *__restrict, size_t, const wchar_t *__restrict, const s >> >> #undef iswdigit >> >> +#if defined(_GNU_SOURCE) >> +wint_t fgetwc_unlocked (FILE *); >> +wint_t getwc_unlocked (FILE *); >> +wint_t getwchar_unlocked (void); >> +wint_t fputwc_unlocked (wchar_t, FILE *); >> +wint_t putwc_unlocked (wchar_t, FILE *); >> +wint_t putwchar_unlocked (wchar_t); >> +wchar_t *fgetws_unlocked (wchar_t *__restrict, int, FILE *__restrict); >> +int fputws_unlocked (const wchar_t *__restrict, FILE *__restrict); >> +size_t wcsftime_l (wchar_t *__restrict, size_t, const wchar_t *__restrict, const struct tm *__restrict, locale_t); >> +#endif > > I suspect BSDs also had these so they should possibly be exposed under > _GNU_SOURCE || _BSD_SOURCE. Thoughts? Glibc doesn't provide any of these with _BSD_SOURCE. FreeBSD and NetBSD provide wcsftime_l, but doesn't seem to have the *_unlocked variants. OpenBSD doesn't seem to provide either. Perhaps wcsftime_l should be moved under _GNU_SOURCE || _BSD_SOURCE. >> diff --git a/src/stdio/getwchar.c b/src/stdio/getwchar.c >> index bd89e0e..77a9dc1 100644 >> --- a/src/stdio/getwchar.c >> +++ b/src/stdio/getwchar.c >> @@ -5,5 +5,3 @@ wint_t getwchar(void) >> { >> return fgetwc(stdin); >> } >> - >> -weak_alias(getwchar, getwchar_unlocked); >> diff --git a/src/stdio/getwchar_unlocked.c b/src/stdio/getwchar_unlocked.c >> new file mode 100644 >> index 0000000..1d00567 >> --- /dev/null >> +++ b/src/stdio/getwchar_unlocked.c >> @@ -0,0 +1,8 @@ >> +#define _GNU_SOURCE >> +#include "stdio_impl.h" >> +#include <wchar.h> >> + >> +wint_t getwchar_unlocked(void) >> +{ >> + return fgetwc_unlocked(stdin); >> +} > > What is the motivation for replacing the aliases with wrappers? This > does not seem like an improvement. > > Rich Correct me if I'm wrong, but by using weak_alias(getwchar, getwchar_unlocked) instead of the wrapper, wouldn't calls to getwchar_unlocked() really just invoke getwchar() or fgetwc(stdin) instead of the intended fgetwc_unlocked(stdin)?
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.