svn path=/nixpkgs/trunk/; revision=1820
This commit is contained in:
parent
1d9072670b
commit
76c0fe8cfe
@ -32,6 +32,9 @@ stdenv.mkDerivation {
|
||||
# This is a patch to make glibc compile under GCC 3.3. Presumably
|
||||
# later releases of glibc won't need this.
|
||||
# ./glibc-2.3.2-sscanf-1.patch
|
||||
|
||||
# Fix for localedata loading bug.
|
||||
./loadlocale.patch
|
||||
];
|
||||
|
||||
inherit kernelHeaders installLocales;
|
||||
|
67
pkgs/development/libraries/glibc/loadlocale.patch
Normal file
67
pkgs/development/libraries/glibc/loadlocale.patch
Normal file
@ -0,0 +1,67 @@
|
||||
This patch fixes
|
||||
http://sources.redhat.com/bugzilla/show_bug.cgi?id=356, "localedata:
|
||||
tests-mbwc/tst_iswalnum segfaults during make check".
|
||||
|
||||
===================================================================
|
||||
RCS file: /cvs/glibc/libc/locale/loadlocale.c,v
|
||||
retrieving revision 1.44
|
||||
retrieving revision 1.45
|
||||
diff -u -r1.44 -r1.45
|
||||
--- libc/locale/loadlocale.c 2003/09/03 07:54:22 1.44
|
||||
+++ libc/locale/loadlocale.c 2004/09/26 05:48:14 1.45
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Functions to read locale data files.
|
||||
- Copyright (C) 1996-2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 1996-2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||
|
||||
@@ -115,15 +115,45 @@
|
||||
__set_errno (EINVAL);
|
||||
return NULL;
|
||||
}
|
||||
- if (__builtin_expect (_nl_value_types[category][cnt] == word, 0))
|
||||
+
|
||||
+ /* Determine the type. There is one special case: the LC_CTYPE
|
||||
+ category can have more elements than there are in the
|
||||
+ _nl_value_type_LC_XYZ array. There are all pointers. */
|
||||
+ switch (category)
|
||||
+ {
|
||||
+#define CATTEST(cat) \
|
||||
+ case LC_##cat: \
|
||||
+ assert (cnt < (sizeof (_nl_value_type_LC_##cat) \
|
||||
+ / sizeof (_nl_value_type_LC_##cat[0]))); \
|
||||
+ break
|
||||
+ CATTEST (NUMERIC);
|
||||
+ CATTEST (TIME);
|
||||
+ CATTEST (COLLATE);
|
||||
+ CATTEST (MONETARY);
|
||||
+ CATTEST (MESSAGES);
|
||||
+ CATTEST (PAPER);
|
||||
+ CATTEST (NAME);
|
||||
+ CATTEST (ADDRESS);
|
||||
+ CATTEST (TELEPHONE);
|
||||
+ CATTEST (MEASUREMENT);
|
||||
+ CATTEST (IDENTIFICATION);
|
||||
+ default:
|
||||
+ assert (category == LC_CTYPE);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if ((category == LC_CTYPE
|
||||
+ && cnt >= (sizeof (_nl_value_type_LC_CTYPE)
|
||||
+ / sizeof (_nl_value_type_LC_CTYPE[0])))
|
||||
+ || __builtin_expect (_nl_value_types[category][cnt] != word, 1))
|
||||
+ newdata->values[cnt].string = newdata->filedata + idx;
|
||||
+ else
|
||||
{
|
||||
if (idx % __alignof__ (u_int32_t) != 0)
|
||||
goto puntdata;
|
||||
newdata->values[cnt].word =
|
||||
*((const u_int32_t *) (newdata->filedata + idx));
|
||||
}
|
||||
- else
|
||||
- newdata->values[cnt].string = newdata->filedata + idx;
|
||||
}
|
||||
|
||||
return newdata;
|
Loading…
Reference in New Issue
Block a user