From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/496 Path: news.gmane.org!not-for-mail From: Arvid Picciani Newsgroups: gmane.linux.lib.musl.general Subject: [PATCH 2/2] Implement quite some more _l functions as wrapper around the non _l Date: Mon, 10 Oct 2011 16:12:59 +0200 Message-ID: <1318260829.727548.21231@legion> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: lo.gmane.org X-Trace: dough.gmane.org 1318261146 29488 80.91.229.12 (10 Oct 2011 15:39:06 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Mon, 10 Oct 2011 15:39:06 +0000 (UTC) To: Original-X-From: musl-return-497-gllmg-musl=m.gmane.org@lists.openwall.com Mon Oct 10 17:39:01 2011 Return-path: Envelope-to: gllmg-musl@lo.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by lo.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1RDHwQ-0002lz-LR for gllmg-musl@lo.gmane.org; Mon, 10 Oct 2011 17:38:58 +0200 Original-Received: (qmail 21779 invoked by uid 550); 10 Oct 2011 15:38:58 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 21771 invoked from network); 10 Oct 2011 15:38:57 -0000 Xref: news.gmane.org gmane.linux.lib.musl.general:496 Archived-At: This is partially a hack, as the locale will be ignored. It is to be seen how much effect this actually has in real life use. --- include/stdlib.h | 14 ++++++++++++++ include/string.h | 11 +++++++++++ include/time.h | 7 +++++++ include/wchar.h | 23 +++++++++++++++++++++++ include/xlocale.h | 1 + src/ctype/iswalnum_l.c | 7 +++++++ src/ctype/iswalpha_l.c | 7 +++++++ src/ctype/iswblank_l.c | 7 +++++++ src/ctype/iswcntrl_l.c | 7 +++++++ src/ctype/iswdigit_l.c | 7 +++++++ src/ctype/iswgraph_l.c | 7 +++++++ src/ctype/iswlower_l.c | 7 +++++++ src/ctype/iswprint_l.c | 7 +++++++ src/ctype/iswpunct_l.c | 7 +++++++ src/ctype/iswspace_l.c | 7 +++++++ src/ctype/iswupper_l.c | 7 +++++++ src/ctype/iswxdigit_l.c | 7 +++++++ src/ctype/towctrans.c | 10 ++++++++++ src/locale/wcscoll_l.c | 7 +++++++ src/locale/wcsxfrm_l.c | 7 +++++++ src/stdlib/strtol_l.c | 6 ++++++ src/stdlib/strtold_l.c | 7 +++++++ src/stdlib/strtoll_l.c | 6 ++++++ src/stdlib/strtoul_l.c | 6 ++++++ src/stdlib/strtoull_l.c | 6 ++++++ src/string/strcoll_l.c | 7 +++++++ src/string/strxfrm_l.c | 7 +++++++ src/time/strftime_l.c | 7 +++++++ 28 files changed, 216 insertions(+), 0 deletions(-) create mode 100644 include/xlocale.h create mode 100644 src/ctype/iswalnum_l.c create mode 100644 src/ctype/iswalpha_l.c create mode 100644 src/ctype/iswblank_l.c create mode 100644 src/ctype/iswcntrl_l.c create mode 100644 src/ctype/iswdigit_l.c create mode 100644 src/ctype/iswgraph_l.c create mode 100644 src/ctype/iswlower_l.c create mode 100644 src/ctype/iswprint_l.c create mode 100644 src/ctype/iswpunct_l.c create mode 100644 src/ctype/iswspace_l.c create mode 100644 src/ctype/iswupper_l.c create mode 100644 src/ctype/iswxdigit_l.c create mode 100644 src/locale/wcscoll_l.c create mode 100644 src/locale/wcsxfrm_l.c create mode 100644 src/stdlib/strtol_l.c create mode 100644 src/stdlib/strtold_l.c create mode 100644 src/stdlib/strtoll_l.c create mode 100644 src/stdlib/strtoul_l.c create mode 100644 src/stdlib/strtoull_l.c create mode 100644 src/string/strcoll_l.c create mode 100644 src/string/strxfrm_l.c create mode 100644 src/time/strftime_l.c diff --git a/include/stdlib.h b/include/stdlib.h index 43225dd..056fc04 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -137,6 +137,20 @@ int ptsname_r(int, char *, size_t); #endif +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) + +#define __NEED_locale_t +#include + +long strtol_l (const char *, char **, int, locale_t); +unsigned long strtoul_l (const char *, char **, int, locale_t); +long long strtoll_l (const char *, char **, int, locale_t); +unsigned long long strtoull_l (const char *, char **, int, locale_t); +long double strtold_l (const char *, char **, locale_t); +#endif + + #ifdef __cplusplus } #endif diff --git a/include/string.h b/include/string.h index a5b5a51..bce3770 100644 --- a/include/string.h +++ b/include/string.h @@ -79,6 +79,17 @@ void *memrchr(const void *, int, size_t); void *mempcpy(void *, const void *, size_t); #endif + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) + +#define __NEED_locale_t +#include +int strcoll_l (const char *, const char *, locale_t); +size_t strxfrm_l (char *, const char *, size_t, locale_t); +#endif + + #ifdef __cplusplus } #endif diff --git a/include/time.h b/include/time.h index 557c8f4..dd5d6e5 100644 --- a/include/time.h +++ b/include/time.h @@ -104,6 +104,13 @@ extern int getdate_err; struct tm *getdate (const char *); #endif +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) + +#define __NEED_locale_t +#include +size_t strftime_l (char *, size_t, const char *, const struct tm *, locale_t); +#endif #ifdef __cplusplus } diff --git a/include/wchar.h b/include/wchar.h index 87e244a..df7e08a 100644 --- a/include/wchar.h +++ b/include/wchar.h @@ -157,6 +157,29 @@ wctype_t wctype(const char *); #define iswdigit(a) ((unsigned)(a)-'0' < 10) #endif +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) + +#define __NEED_locale_t +#include +int wcscoll_l(const wchar_t *, const wchar_t *, locale_t); +size_t wcsxfrm_l (wchar_t *, const wchar_t *, size_t n, locale_t); +int iswalnum_l (wint_t, locale_t); +int iswalpha_l (wint_t, locale_t); +int iswblank_l (wint_t, locale_t); +int iswcntrl_l (wint_t, locale_t); +int iswdigit_l (wint_t, locale_t); +int iswgraph_l (wint_t, locale_t); +int iswlower_l (wint_t, locale_t); +int iswprint_l (wint_t, locale_t); +int iswpunct_l (wint_t, locale_t); +int iswspace_l (wint_t, locale_t); +int iswupper_l (wint_t, locale_t); +int iswxdigit_l (wint_t, locale_t); +wint_t towlower_l (wint_t, locale_t); +wint_t towupper_l (wint_t, locale_t); +#endif + #ifdef __cplusplus } #endif diff --git a/include/xlocale.h b/include/xlocale.h new file mode 100644 index 0000000..6088bbe --- /dev/null +++ b/include/xlocale.h @@ -0,0 +1 @@ +#include "locale.h" diff --git a/src/ctype/iswalnum_l.c b/src/ctype/iswalnum_l.c new file mode 100644 index 0000000..a84bb8d --- /dev/null +++ b/src/ctype/iswalnum_l.c @@ -0,0 +1,7 @@ +#include "wchar.h" +#include "wctype.h" + +int iswalnum_l (wint_t c, locale_t l) +{ + return iswalnum(c); +} diff --git a/src/ctype/iswalpha_l.c b/src/ctype/iswalpha_l.c new file mode 100644 index 0000000..b98dffa --- /dev/null +++ b/src/ctype/iswalpha_l.c @@ -0,0 +1,7 @@ +#include "wchar.h" +#include "wctype.h" + +int iswalpha_l (wint_t c, locale_t l) +{ + return iswalpha(c); +} diff --git a/src/ctype/iswblank_l.c b/src/ctype/iswblank_l.c new file mode 100644 index 0000000..203bf31 --- /dev/null +++ b/src/ctype/iswblank_l.c @@ -0,0 +1,7 @@ +#include "wchar.h" +#include "wctype.h" + +int iswblank_l (wint_t c, locale_t l) +{ + return iswblank(c); +} diff --git a/src/ctype/iswcntrl_l.c b/src/ctype/iswcntrl_l.c new file mode 100644 index 0000000..e246064 --- /dev/null +++ b/src/ctype/iswcntrl_l.c @@ -0,0 +1,7 @@ +#include "wchar.h" +#include "wctype.h" + +int iswcntrl_l (wint_t c, locale_t l) +{ + return iswcntrl(c); +} diff --git a/src/ctype/iswdigit_l.c b/src/ctype/iswdigit_l.c new file mode 100644 index 0000000..ee49bb3 --- /dev/null +++ b/src/ctype/iswdigit_l.c @@ -0,0 +1,7 @@ +#include "wchar.h" +#include "wctype.h" + +int iswdigit_l (wint_t c, locale_t l) +{ + return iswdigit(c); +} diff --git a/src/ctype/iswgraph_l.c b/src/ctype/iswgraph_l.c new file mode 100644 index 0000000..44cf970 --- /dev/null +++ b/src/ctype/iswgraph_l.c @@ -0,0 +1,7 @@ +#include "wchar.h" +#include "wctype.h" + +int iswgraph_l (wint_t c, locale_t l) +{ + return iswgraph(c); +} diff --git a/src/ctype/iswlower_l.c b/src/ctype/iswlower_l.c new file mode 100644 index 0000000..67c4c52 --- /dev/null +++ b/src/ctype/iswlower_l.c @@ -0,0 +1,7 @@ +#include "wchar.h" +#include "wctype.h" + +int iswlower_l (wint_t c, locale_t l) +{ + return iswlower(c); +} diff --git a/src/ctype/iswprint_l.c b/src/ctype/iswprint_l.c new file mode 100644 index 0000000..89b39df --- /dev/null +++ b/src/ctype/iswprint_l.c @@ -0,0 +1,7 @@ +#include "wchar.h" +#include "wctype.h" + +int iswprint_l (wint_t c, locale_t l) +{ + return iswprint(c); +} diff --git a/src/ctype/iswpunct_l.c b/src/ctype/iswpunct_l.c new file mode 100644 index 0000000..48a9cfc --- /dev/null +++ b/src/ctype/iswpunct_l.c @@ -0,0 +1,7 @@ +#include "wchar.h" +#include "wctype.h" + +int iswpunct_l (wint_t c, locale_t l) +{ + return iswpunct(c); +} diff --git a/src/ctype/iswspace_l.c b/src/ctype/iswspace_l.c new file mode 100644 index 0000000..216af23 --- /dev/null +++ b/src/ctype/iswspace_l.c @@ -0,0 +1,7 @@ +#include "wchar.h" +#include "wctype.h" + +int iswspace_l (wint_t c, locale_t l) +{ + return iswspace(c); +} diff --git a/src/ctype/iswupper_l.c b/src/ctype/iswupper_l.c new file mode 100644 index 0000000..5982136 --- /dev/null +++ b/src/ctype/iswupper_l.c @@ -0,0 +1,7 @@ +#include "wchar.h" +#include "wctype.h" + +int iswupper_l (wint_t c, locale_t l) +{ + return iswupper(c); +} diff --git a/src/ctype/iswxdigit_l.c b/src/ctype/iswxdigit_l.c new file mode 100644 index 0000000..4aac280 --- /dev/null +++ b/src/ctype/iswxdigit_l.c @@ -0,0 +1,7 @@ +#include "wchar.h" +#include "wctype.h" + +int iswxdigit_l (wint_t c, locale_t l) +{ + return iswxdigit(c); +} diff --git a/src/ctype/towctrans.c b/src/ctype/towctrans.c index 0b1eed0..8d98657 100644 --- a/src/ctype/towctrans.c +++ b/src/ctype/towctrans.c @@ -244,3 +244,13 @@ wint_t towlower(wint_t wc) { return __towcase(wc, 1); } + +wint_t towupper_l(wint_t wc, locale_t l) +{ + return __towcase(wc, 0); +} + +wint_t towlower_l(wint_t wc, locale_t l) +{ + return __towcase(wc, 1); +} diff --git a/src/locale/wcscoll_l.c b/src/locale/wcscoll_l.c new file mode 100644 index 0000000..2c70881 --- /dev/null +++ b/src/locale/wcscoll_l.c @@ -0,0 +1,7 @@ +#include + +int wcscoll_l(const wchar_t *n, const wchar_t *r, locale_t l) +{ + return wcscmp(n, r); +} + diff --git a/src/locale/wcsxfrm_l.c b/src/locale/wcsxfrm_l.c new file mode 100644 index 0000000..f8a89b2 --- /dev/null +++ b/src/locale/wcsxfrm_l.c @@ -0,0 +1,7 @@ +#include "wchar.h" +#include "wctype.h" + +size_t wcsxfrm_l(wchar_t *dest, const wchar_t *src, size_t n, locale_t l) +{ + return wcsxfrm(dest, src, n); +} diff --git a/src/stdlib/strtol_l.c b/src/stdlib/strtol_l.c new file mode 100644 index 0000000..ce6c9b1 --- /dev/null +++ b/src/stdlib/strtol_l.c @@ -0,0 +1,6 @@ +#include + +long strtol_l (const char *n, char **end, int base, locale_t l) +{ + return strtol(n, end, base); +} diff --git a/src/stdlib/strtold_l.c b/src/stdlib/strtold_l.c new file mode 100644 index 0000000..4aabb7f --- /dev/null +++ b/src/stdlib/strtold_l.c @@ -0,0 +1,7 @@ +#include + +long double strtold_l (const char *n, char **end, locale_t l) +{ + return strtold(n, end); +} + diff --git a/src/stdlib/strtoll_l.c b/src/stdlib/strtoll_l.c new file mode 100644 index 0000000..0dbe6bc --- /dev/null +++ b/src/stdlib/strtoll_l.c @@ -0,0 +1,6 @@ +#include + +long long strtoll_l(const char *n, char **end, int base, locale_t l) +{ + return strtoll(n, end, base); +} diff --git a/src/stdlib/strtoul_l.c b/src/stdlib/strtoul_l.c new file mode 100644 index 0000000..34dafc0 --- /dev/null +++ b/src/stdlib/strtoul_l.c @@ -0,0 +1,6 @@ +#include + +unsigned long strtoul_l(const char *n, char **end, int base, locale_t l) +{ + return strtoul(n, end, base); +} diff --git a/src/stdlib/strtoull_l.c b/src/stdlib/strtoull_l.c new file mode 100644 index 0000000..de9ffd2 --- /dev/null +++ b/src/stdlib/strtoull_l.c @@ -0,0 +1,6 @@ +#include + +unsigned long long strtoull_l(const char *n, char **end, int base, locale_t l) +{ + return strtoull(n, end, base); +} diff --git a/src/string/strcoll_l.c b/src/string/strcoll_l.c new file mode 100644 index 0000000..b36a088 --- /dev/null +++ b/src/string/strcoll_l.c @@ -0,0 +1,7 @@ +#include + +int strcoll_l(const char *s1, const char *s2, locale_t l) +{ + return strcoll(s1, s2); +} + diff --git a/src/string/strxfrm_l.c b/src/string/strxfrm_l.c new file mode 100644 index 0000000..b48b1bc --- /dev/null +++ b/src/string/strxfrm_l.c @@ -0,0 +1,7 @@ +#include + +size_t strxfrm_l(char *dest, const char *src, size_t n, locale_t l) +{ + return strxfrm(dest, src, n); +} + diff --git a/src/time/strftime_l.c b/src/time/strftime_l.c new file mode 100644 index 0000000..8225142 --- /dev/null +++ b/src/time/strftime_l.c @@ -0,0 +1,7 @@ +#include "time.h" + +size_t strftime_l(char *s, size_t max, const char *format, const struct tm *tm, locale_t l) +{ + return strftime(s, max, format, tm); +} + -- 1.7.7