* [RFC][PATCH v3 02/11] Provide backward compatibility for nl_langinfo family (bug 10871).
@ 2016-10-17 23:59 Rafal Luzynski
0 siblings, 0 replies; only message in thread
From: Rafal Luzynski @ 2016-10-17 23:59 UTC (permalink / raw)
To: libc-alpha
As ALTMON_1 .. ALTMON_12 constants have been added no nl_langinfo*
family of functions backward compatibility implementation must be
provided for older binaries which assume that MON_1 .. MON_12
return month names in their nominative case.
[BZ #10871]
* include/langinfo.h: Declare __nl_langinfo_noaltmon_l.
* locale/Versions (libc: GLIBC_2.25): New nl_langinfo* added.
* locale/nl_langinfo.c: Provide backward compatible version.
* locale/nl_langinfo_l.c: Likewise.
---
include/langinfo.h | 2 ++
locale/Versions | 3 +++
locale/nl_langinfo.c | 17 +++++++++++++++--
locale/nl_langinfo_l.c | 42 +++++++++++++++++++++++++++++++++++++++++-
4 files changed, 61 insertions(+), 3 deletions(-)
diff --git a/include/langinfo.h b/include/langinfo.h
index d60d7f6..60729e4 100644
--- a/include/langinfo.h
+++ b/include/langinfo.h
@@ -7,6 +7,8 @@ libc_hidden_proto (nl_langinfo)
extern __typeof (nl_langinfo_l) __nl_langinfo_l;
libc_hidden_proto (__nl_langinfo_l)
+extern __typeof (nl_langinfo_l) __nl_langinfo_noaltmon_l;
+libc_hidden_proto (__nl_langinfo_noaltmon_l)
#endif
#endif
diff --git a/locale/Versions b/locale/Versions
index 7211934..25e2612 100644
--- a/locale/Versions
+++ b/locale/Versions
@@ -66,6 +66,9 @@ libc {
wcstoll_l; wcstoul_l; wcstoull_l; wcsxfrm_l; wctype_l;
wctrans_l; nl_langinfo_l;
}
+ GLIBC_2.25 {
+ nl_langinfo; nl_langinfo_l;
+ }
GLIBC_PRIVATE {
# global variables
__collate_element_hash; __collate_element_strings;
diff --git a/locale/nl_langinfo.c b/locale/nl_langinfo.c
index d523564..9be1ccb 100644
--- a/locale/nl_langinfo.c
+++ b/locale/nl_langinfo.c
@@ -21,13 +21,26 @@
#include <errno.h>
#include <stddef.h>
#include "localeinfo.h"
+#include <shlib-compat.h>
/* Return a string with the data for locale-dependent parameter ITEM. */
char *
-nl_langinfo (nl_item item)
+__nl_langinfo (nl_item item)
{
return __nl_langinfo_l (item, _NL_CURRENT_LOCALE);
}
-libc_hidden_def (nl_langinfo)
+versioned_symbol (libc, __nl_langinfo, nl_langinfo, GLIBC_2_25);
+libc_hidden_ver (__nl_langinfo, nl_langinfo)
+
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_25)
+char *
+attribute_compat_text_section
+__nl_langinfo_noaltmon (nl_item item)
+{
+ return __nl_langinfo_noaltmon_l (item, _NL_CURRENT_LOCALE);
+}
+compat_symbol (libc, __nl_langinfo_noaltmon, nl_langinfo, GLIBC_2_0);
+#endif
diff --git a/locale/nl_langinfo_l.c b/locale/nl_langinfo_l.c
index 0032c0b..879a066 100644
--- a/locale/nl_langinfo_l.c
+++ b/locale/nl_langinfo_l.c
@@ -22,6 +22,7 @@
#include <stddef.h>
#include <stdlib.h>
#include "localeinfo.h"
+#include <shlib-compat.h>
/* Return a string with the data for locale-dependent parameter ITEM. */
@@ -66,4 +67,43 @@ __nl_langinfo_l (nl_item item, __locale_t l)
return (char *) data->values[index].string;
}
libc_hidden_def (__nl_langinfo_l)
-weak_alias (__nl_langinfo_l, nl_langinfo_l)
+versioned_symbol (libc, __nl_langinfo_l, nl_langinfo_l, GLIBC_2_25);
+libc_hidden_ver (__nl_langinfo_l, nl_langinfo_l)
+
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_25)
+char *
+attribute_compat_text_section
+__nl_langinfo_noaltmon_l (nl_item item, __locale_t l)
+{
+ char *result;
+
+ if ((item >= ALTMON_1 && item <= ALTMON_12)
+ || (item >= _NL_WALTMON_1 && item <= _NL_WALTMON_12))
+ /* Pretend it's a bogus index for this category: bogus item. */
+ return (char *) "";
+ else if (item >= MON_1 && item <= MON_12)
+ {
+ /* If ALTMON_... item is not empty then it contains what MON_...
+ item contained before. */
+ result = __nl_langinfo_l (item + ALTMON_1 - MON_1, l);
+ if (result != NULL && result[0] != '\0')
+ return result;
+ }
+ else if (item >= _NL_WMON_1 && item <= _NL_WMON_12)
+ {
+ /* The same for _NL_WALTMON_... and _NL_WMON_... */
+ result = __nl_langinfo_l (item + _NL_WALTMON_1 - _NL_WMON_1, l);
+ if (result != NULL && ((wchar_t *) result)[0] != L'\0')
+ return result;
+ }
+
+ /* Default result if it is not a month or an alternative month is empty. */
+ return __nl_langinfo_l (item, l);
+}
+libc_hidden_def (__nl_langinfo_noaltmon_l)
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_25)
+compat_symbol (libc, __nl_langinfo_noaltmon_l, nl_langinfo_l, GLIBC_2_3);
+#endif
--
2.7.4
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2016-10-17 23:59 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-17 23:59 [RFC][PATCH v3 02/11] Provide backward compatibility for nl_langinfo family (bug 10871) Rafal Luzynski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).