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
|
# This is a patch to make glibc compile under GCC 3.3. Presumably
|
||||||
# later releases of glibc won't need this.
|
# later releases of glibc won't need this.
|
||||||
# ./glibc-2.3.2-sscanf-1.patch
|
# ./glibc-2.3.2-sscanf-1.patch
|
||||||
|
|
||||||
|
# Fix for localedata loading bug.
|
||||||
|
./loadlocale.patch
|
||||||
];
|
];
|
||||||
|
|
||||||
inherit kernelHeaders installLocales;
|
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…
x
Reference in New Issue
Block a user