diff --git a/ChangeLog b/ChangeLog index d001d774af..ad9ed77a11 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,19 @@ 2005-12-20 Ulrich Drepper + * locale/xlocale.c (_nl_C_locobj): Mark as const. + * include/locale.h: Define _nl_C_locobj_ptr. + * iconv/gconv_charset.h: Use _nl_C_locobj_ptr instead of using pointer + to _nl_C_locobj because we also need a cast. + * iconv/gconv_conf.c: Likewise. + * iconv/gconv_int.h: Likewise. + * iconv/gconv_open.c: Likewise. + * locale/duplocale.c: Likewise. + * locale/freelocale.c: Likewise. + * locale/newlocale.c: Likewise. + * misc/syslog.c: Likewise. + * stdlib/strtod_l.c: Likewise. + * sysdeps/unix/sysv/linux/getloadavg.c: Likewise. + * csu/dso_handle.c (__dso_handle): Mark as const. * intl/plural-exp.c (GERMANIC_PLURAL): Mark as const. diff --git a/iconv/gconv_charset.h b/iconv/gconv_charset.h index 4a3db73118..c18abec578 100644 --- a/iconv/gconv_charset.h +++ b/iconv/gconv_charset.h @@ -1,5 +1,5 @@ /* Charset name normalization. - Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 2001. @@ -29,9 +29,9 @@ strip (char *wp, const char *s) while (*s != '\0') { - if (__isalnum_l (*s, &_nl_C_locobj) + if (__isalnum_l (*s, _nl_C_locobj_ptr) || *s == '_' || *s == '-' || *s == '.' || *s == ',') - *wp++ = __toupper_l (*s, &_nl_C_locobj); + *wp++ = __toupper_l (*s, _nl_C_locobj_ptr); else if (*s == '/') { if (++slash_count == 3) @@ -52,7 +52,7 @@ static inline char * __attribute__ ((unused, always_inline)) upstr (char *dst, const char *str) { char *cp = dst; - while ((*cp++ = __toupper_l (*str++, &_nl_C_locobj)) != '\0') + while ((*cp++ = __toupper_l (*str++, _nl_C_locobj_ptr)) != '\0') /* nothing */; return dst; } diff --git a/iconv/gconv_conf.c b/iconv/gconv_conf.c index 37179518ba..78f41cb368 100644 --- a/iconv/gconv_conf.c +++ b/iconv/gconv_conf.c @@ -133,20 +133,20 @@ add_alias (char *rp, void *modules) struct gconv_alias *new_alias; char *from, *to, *wp; - while (__isspace_l (*rp, &_nl_C_locobj)) + while (__isspace_l (*rp, _nl_C_locobj_ptr)) ++rp; from = wp = rp; - while (*rp != '\0' && !__isspace_l (*rp, &_nl_C_locobj)) - *wp++ = __toupper_l (*rp++, &_nl_C_locobj); + while (*rp != '\0' && !__isspace_l (*rp, _nl_C_locobj_ptr)) + *wp++ = __toupper_l (*rp++, _nl_C_locobj_ptr); if (*rp == '\0') /* There is no `to' string on the line. Ignore it. */ return; *wp++ = '\0'; to = ++rp; - while (__isspace_l (*rp, &_nl_C_locobj)) + while (__isspace_l (*rp, _nl_C_locobj_ptr)) ++rp; - while (*rp != '\0' && !__isspace_l (*rp, &_nl_C_locobj)) - *wp++ = __toupper_l (*rp++, &_nl_C_locobj); + while (*rp != '\0' && !__isspace_l (*rp, _nl_C_locobj_ptr)) + *wp++ = __toupper_l (*rp++, _nl_C_locobj_ptr); if (to == wp) /* No `to' string, ignore the line. */ return; @@ -254,30 +254,30 @@ add_module (char *rp, const char *directory, size_t dir_len, void **modules, int need_ext; int cost_hi; - while (__isspace_l (*rp, &_nl_C_locobj)) + while (__isspace_l (*rp, _nl_C_locobj_ptr)) ++rp; from = rp; - while (*rp != '\0' && !__isspace_l (*rp, &_nl_C_locobj)) + while (*rp != '\0' && !__isspace_l (*rp, _nl_C_locobj_ptr)) { - *rp = __toupper_l (*rp, &_nl_C_locobj); + *rp = __toupper_l (*rp, _nl_C_locobj_ptr); ++rp; } if (*rp == '\0') return; *rp++ = '\0'; to = wp = rp; - while (__isspace_l (*rp, &_nl_C_locobj)) + while (__isspace_l (*rp, _nl_C_locobj_ptr)) ++rp; - while (*rp != '\0' && !__isspace_l (*rp, &_nl_C_locobj)) - *wp++ = __toupper_l (*rp++, &_nl_C_locobj); + while (*rp != '\0' && !__isspace_l (*rp, _nl_C_locobj_ptr)) + *wp++ = __toupper_l (*rp++, _nl_C_locobj_ptr); if (*rp == '\0') return; *wp++ = '\0'; do ++rp; - while (__isspace_l (*rp, &_nl_C_locobj)); + while (__isspace_l (*rp, _nl_C_locobj_ptr)); module = wp; - while (*rp != '\0' && !__isspace_l (*rp, &_nl_C_locobj)) + while (*rp != '\0' && !__isspace_l (*rp, _nl_C_locobj_ptr)) *wp++ = *rp++; if (*rp == '\0') { @@ -392,7 +392,7 @@ read_conf_file (const char *filename, const char *directory, size_t dir_len, if (rp[n - 1] == '\n') rp[n - 1] = '\0'; - while (__isspace_l (*rp, &_nl_C_locobj)) + while (__isspace_l (*rp, _nl_C_locobj_ptr)) ++rp; /* If this is an empty line go on with the next one. */ @@ -400,7 +400,7 @@ read_conf_file (const char *filename, const char *directory, size_t dir_len, continue; word = rp; - while (*rp != '\0' && !__isspace_l (*rp, &_nl_C_locobj)) + while (*rp != '\0' && !__isspace_l (*rp, _nl_C_locobj_ptr)) ++rp; if (rp - word == sizeof ("alias") - 1 diff --git a/iconv/gconv_int.h b/iconv/gconv_int.h index 768ebf0a97..ace2bae1c6 100644 --- a/iconv/gconv_int.h +++ b/iconv/gconv_int.h @@ -148,7 +148,7 @@ __libc_lock_define (extern, __gconv_lock); tmp = result = __alloca (cp - (str) + 3 + suffix_len); \ cp = (str); \ while (*cp != '\0') \ - *tmp++ = __toupper_l (*cp++, &_nl_C_locobj); \ + *tmp++ = __toupper_l (*cp++, _nl_C_locobj_ptr); \ if (cnt < 2) \ { \ *tmp++ = '/'; \ diff --git a/iconv/gconv_open.c b/iconv/gconv_open.c index 95f3203394..bbf27b3dc5 100644 --- a/iconv/gconv_open.c +++ b/iconv/gconv_open.c @@ -67,7 +67,7 @@ __gconv_open (const char *toset, const char *fromset, __gconv_t *handle, tok = __strtok_r (tok, ",", &ptr); while (tok != NULL) { - if (__strcasecmp_l (tok, "TRANSLIT", &_nl_C_locobj) == 0) + if (__strcasecmp_l (tok, "TRANSLIT", _nl_C_locobj_ptr) == 0) { /* It's the builtin transliteration handling. We only support it for working on the internal encoding. */ @@ -101,7 +101,7 @@ __gconv_open (const char *toset, const char *fromset, __gconv_t *handle, lastp->next = newp; } } - else if (__strcasecmp_l (tok, "IGNORE", &_nl_C_locobj) == 0) + else if (__strcasecmp_l (tok, "IGNORE", _nl_C_locobj_ptr) == 0) /* Set the flag to ignore all errors. */ conv_flags |= __GCONV_IGNORE_ERRORS; else @@ -115,7 +115,7 @@ __gconv_open (const char *toset, const char *fromset, __gconv_t *handle, for (runp = trans; runp != NULL; runp = runp->next) if (runp->name != NULL && __strcasecmp_l (tok, runp->name, - &_nl_C_locobj) == 0) + _nl_C_locobj_ptr) == 0) break; else lastp = runp; @@ -235,7 +235,7 @@ __gconv_open (const char *toset, const char *fromset, __gconv_t *handle, for (runp = trans; runp != NULL; runp = runp->next) for (n = 0; n < runp->ncsnames; ++n) if (__strcasecmp_l (steps[cnt].__from_name, - runp->csnames[n], &_nl_C_locobj) == 0) + runp->csnames[n], _nl_C_locobj_ptr) == 0) { void *data = NULL; diff --git a/include/locale.h b/include/locale.h index 22770b9ad2..5226001929 100644 --- a/include/locale.h +++ b/include/locale.h @@ -11,7 +11,8 @@ libc_hidden_proto (setlocale) extern struct loaded_l10nfile *_nl_locale_file_list[] attribute_hidden; /* Locale object for C locale. */ -extern struct __locale_struct _nl_C_locobj attribute_hidden; +extern const struct __locale_struct _nl_C_locobj attribute_hidden; +#define _nl_C_locobj_ptr ((struct __locale_struct *) &_nl_C_locobj) /* Now define the internal interfaces. */ extern struct lconv *__localeconv (void); diff --git a/locale/duplocale.c b/locale/duplocale.c index 77dfc01046..0cec09f63a 100644 --- a/locale/duplocale.c +++ b/locale/duplocale.c @@ -1,5 +1,5 @@ /* Duplicate handle for selection of locales. - Copyright (C) 1997, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1997, 2000, 2001, 2002, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -34,7 +34,7 @@ __locale_t __duplocale (__locale_t dataset) { /* This static object is returned for newlocale (LC_ALL_MASK, "C"). */ - if (dataset == &_nl_C_locobj) + if (dataset == _nl_C_locobj_ptr) return dataset; __locale_t result; diff --git a/locale/freelocale.c b/locale/freelocale.c index ec169bcb66..7430455d56 100644 --- a/locale/freelocale.c +++ b/locale/freelocale.c @@ -1,5 +1,5 @@ /* Free data allocated by a call to setlocale_r - Copyright (C) 1996, 1997, 2000, 2002 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 2000, 2002, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -35,7 +35,7 @@ __freelocale (__locale_t dataset) int cnt; /* This static object is returned for newlocale (LC_ALL_MASK, "C"). */ - if (dataset == &_nl_C_locobj) + if (dataset == _nl_C_locobj_ptr) return; /* We modify global data (the usage counts). */ diff --git a/locale/newlocale.c b/locale/newlocale.c index b646ffeacd..b3d4b464b1 100644 --- a/locale/newlocale.c +++ b/locale/newlocale.c @@ -1,5 +1,5 @@ /* Return a reference to locale information record. - Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2004 + Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -66,7 +66,7 @@ __newlocale (int category_mask, const char *locale, __locale_t base) if (locale == NULL) ERROR_RETURN; - if (base == &_nl_C_locobj) + if (base == _nl_C_locobj_ptr) /* We're to modify BASE, returned for a previous call with "C". We can't really modify the read-only structure, so instead start over by copying it. */ @@ -75,7 +75,7 @@ __newlocale (int category_mask, const char *locale, __locale_t base) if ((base == NULL || category_mask == (1 << __LC_LAST) - 1 - (1 << LC_ALL)) && (category_mask == 0 || !strcmp (locale, "C"))) /* Asking for the "C" locale needn't allocate a new object. */ - return &_nl_C_locobj; + return _nl_C_locobj_ptr; /* Allocate memory for the result. */ if (base != NULL) diff --git a/locale/xlocale.c b/locale/xlocale.c index d9d3442621..4573e6f390 100644 --- a/locale/xlocale.c +++ b/locale/xlocale.c @@ -1,5 +1,5 @@ /* C locale object. - Copyright (C) 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 2001. @@ -32,7 +32,7 @@ extern const char _nl_C_LC_CTYPE_toupper[] attribute_hidden; extern const char _nl_C_LC_CTYPE_tolower[] attribute_hidden; -struct __locale_struct _nl_C_locobj attribute_hidden = +const struct __locale_struct _nl_C_locobj attribute_hidden = { .__locales = { diff --git a/misc/syslog.c b/misc/syslog.c index 9c5597f5aa..cae13f876b 100644 --- a/misc/syslog.c +++ b/misc/syslog.c @@ -195,7 +195,7 @@ __vsyslog_chk(int pri, int flag, const char *fmt, va_list ap) - f->_IO_write_ptr, "%h %e %T ", __localtime_r (&now, &now_tm), - &_nl_C_locobj); + _nl_C_locobj_ptr); msgoff = ftell (f); if (LogTag == NULL) LogTag = __progname; diff --git a/stdlib/strtod_l.c b/stdlib/strtod_l.c index c7901c29fe..5743ee434c 100644 --- a/stdlib/strtod_l.c +++ b/stdlib/strtod_l.c @@ -100,9 +100,9 @@ extern unsigned long long int ____strtoull_l_internal (const char *, char **, # define ISDIGIT(Ch) __iswdigit_l ((Ch), loc) # define ISXDIGIT(Ch) __iswxdigit_l ((Ch), loc) # define TOLOWER(Ch) __towlower_l ((Ch), loc) -# define TOLOWER_C(Ch) __towlower_l ((Ch), &_nl_C_locobj) +# define TOLOWER_C(Ch) __towlower_l ((Ch), _nl_C_locobj_ptr) # define STRNCASECMP(S1, S2, N) \ - __wcsncasecmp_l ((S1), (S2), (N), &_nl_C_locobj) + __wcsncasecmp_l ((S1), (S2), (N), _nl_C_locobj_ptr) # define STRTOULL(S, E, B) ____wcstoull_l_internal ((S), (E), (B), 0, loc) #else # define STRING_TYPE char @@ -112,9 +112,9 @@ extern unsigned long long int ____strtoull_l_internal (const char *, char **, # define ISDIGIT(Ch) __isdigit_l ((Ch), loc) # define ISXDIGIT(Ch) __isxdigit_l ((Ch), loc) # define TOLOWER(Ch) __tolower_l ((Ch), loc) -# define TOLOWER_C(Ch) __tolower_l ((Ch), &_nl_C_locobj) +# define TOLOWER_C(Ch) __tolower_l ((Ch), _nl_C_locobj_ptr) # define STRNCASECMP(S1, S2, N) \ - __strncasecmp_l ((S1), (S2), (N), &_nl_C_locobj) + __strncasecmp_l ((S1), (S2), (N), _nl_C_locobj_ptr) # define STRTOULL(S, E, B) ____strtoull_l_internal ((S), (E), (B), 0, loc) #endif diff --git a/sysdeps/unix/sysv/linux/getloadavg.c b/sysdeps/unix/sysv/linux/getloadavg.c index 6a521431ba..81a1c0dd52 100644 --- a/sysdeps/unix/sysv/linux/getloadavg.c +++ b/sysdeps/unix/sysv/linux/getloadavg.c @@ -1,5 +1,5 @@ /* Get system load averages. Linux (/proc/loadavg) version. - Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2001, 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -55,7 +55,7 @@ getloadavg (double loadavg[], int nelem) for (i = 0; i < nelem; ++i) { char *endp; - loadavg[i] = __strtod_l (p, &endp, &_nl_C_locobj); + loadavg[i] = __strtod_l (p, &endp, _nl_C_locobj_ptr); if (endp == p) /* This should not happen. The format of /proc/loadavg must have changed. Don't return with what we have,