aboutsummaryrefslogtreecommitdiff
path: root/nss/nss_files
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2009-01-09 04:33:02 +0000
committerUlrich Drepper <drepper@redhat.com>2009-01-09 04:33:02 +0000
commit1e545d0185072ac0d4646223d509c3692cbe550a (patch)
tree0b68aed419e3c925836a800ade156300cb8f7964 /nss/nss_files
parentf25c7b087f0e9536040966d5a870512f101e8ce9 (diff)
downloadglibc-1e545d0185072ac0d4646223d509c3692cbe550a.zip
glibc-1e545d0185072ac0d4646223d509c3692cbe550a.tar.gz
glibc-1e545d0185072ac0d4646223d509c3692cbe550a.tar.bz2
[BZ #9705]
2009-01-08 Ulrich Drepper <drepper@redhat.com> [BZ #9705] * locales/el_CY: Cyprus uses the Euro.
Diffstat (limited to 'nss/nss_files')
-rw-r--r--nss/nss_files/files-parse.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/nss/nss_files/files-parse.c b/nss/nss_files/files-parse.c
index 3ba37c8..66615da 100644
--- a/nss/nss_files/files-parse.c
+++ b/nss/nss_files/files-parse.c
@@ -1,5 +1,5 @@
/* Common code for file-based database parsers in nss_files module.
- Copyright (C) 1996-2000, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1996-2000, 2003, 2004, 2009 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
@@ -127,10 +127,24 @@ nss_files_parse_hidden_def (parse_line)
} \
}
+/* Helper function. */
+static inline uint32_t
+__attribute__ ((always_inline))
+strtou32 (const char *nptr, char **endptr, int base)
+{
+ unsigned long int val = strtoul (nptr, endptr, base);
+
+ /* Match the 32-bit behavior on 64-bit platforms. */
+ if (sizeof (long int) > 4 && val > 0xffffffff)
+ val = 0xffffffff;
+
+ return val;
+}
+
# define INT_FIELD(variable, terminator_p, swallow, base, convert) \
{ \
char *endp; \
- variable = convert (strtoul (line, &endp, base)); \
+ variable = convert (strtou32 (line, &endp, base)); \
if (endp == line) \
return 0; \
else if (terminator_p (*endp)) \
@@ -148,7 +162,7 @@ nss_files_parse_hidden_def (parse_line)
if (*line == '\0') \
/* We expect some more input, so don't allow the string to end here. */ \
return 0; \
- variable = convert (strtoul (line, &endp, base)); \
+ variable = convert (strtou32 (line, &endp, base)); \
if (endp == line) \
variable = default; \
if (terminator_p (*endp)) \