patches/glibc/ports-2.12.1/170-localedef-fix-trampoline.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue Aug 02 18:28:10 2011 +0200 (2011-08-02)
changeset 2590 b64cfb67944e
permissions -rw-r--r--
scripts/functions: svn retrieval first tries the mirror for tarballs

The svn download helper looks for the local tarballs dir to see if it
can find a pre-downloaded tarball, and if it does not find it, does
the actual fetch to upstream via svn.

In the process, it does not even try to get a tarball from the local
mirror, which can be useful if the mirror has been pre-populated
manually (or with a previously downloaded tree).

Fake a tarball get with the standard tarball-download helper, but
without specifying any upstream URL, which makes the helper directly
try the LAN mirror.

Of course, if no mirror is specified, no URL wil be available, and
the standard svn retrieval will kick in.

Reported-by: ANDY KENNEDY <ANDY.KENNEDY@adtran.com>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@2437
     1
#! /bin/sh -e
yann@2437
     2
yann@2437
     3
# DP: Description: Fix localedef segfault when run under exec-shield,
yann@2437
     4
#        PaX or similar. (#231438, #198099)
yann@2437
     5
# DP: Dpatch Author: James Troup <james@nocrew.org>
yann@2437
     6
# DP: Patch Author: (probably) Jakub Jelinek <jakub@redhat.com>
yann@2437
     7
# DP: Upstream status: Unknown
yann@2437
     8
# DP: Status Details: Unknown
yann@2437
     9
# DP: Date: 2004-03-16
yann@2437
    10
yann@2437
    11
if [ $# -ne 2 ]; then
yann@2437
    12
    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
yann@2437
    13
    exit 1
yann@2437
    14
fi
yann@2437
    15
case "$1" in
yann@2437
    16
    -patch) patch -d "$2" -f --no-backup-if-mismatch -p1 < $0;;
yann@2437
    17
    -unpatch) patch -d "$2" -f --no-backup-if-mismatch -R -p1 < $0;;
yann@2437
    18
    *)
yann@2437
    19
	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
yann@2437
    20
	exit 1
yann@2437
    21
esac
yann@2437
    22
exit 0
yann@2437
    23
yann@2437
    24
diff -durN glibc-2.12.1.orig/locale/programs/3level.h glibc-2.12.1/locale/programs/3level.h
yann@2437
    25
--- glibc-2.12.1.orig/locale/programs/3level.h	2007-07-16 02:54:59.000000000 +0200
yann@2437
    26
+++ glibc-2.12.1/locale/programs/3level.h	2009-11-13 00:49:56.000000000 +0100
yann@2437
    27
@@ -203,6 +203,42 @@
yann@2437
    28
 	}
yann@2437
    29
     }
yann@2437
    30
 }
yann@2437
    31
+
yann@2437
    32
+/* GCC ATM seems to do a poor job with pointers to nested functions passed
yann@2437
    33
+   to inlined functions.  Help it a little bit with this hack.  */
yann@2437
    34
+#define wchead_table_iterate(tp, fn) \
yann@2437
    35
+do									      \
yann@2437
    36
+  {									      \
yann@2437
    37
+    struct wchead_table *t = (tp);					      \
yann@2437
    38
+    uint32_t index1;							      \
yann@2437
    39
+    for (index1 = 0; index1 < t->level1_size; index1++)			      \
yann@2437
    40
+      {									      \
yann@2437
    41
+	uint32_t lookup1 = t->level1[index1];				      \
yann@2437
    42
+	if (lookup1 != ((uint32_t) ~0))					      \
yann@2437
    43
+	  {								      \
yann@2437
    44
+	    uint32_t lookup1_shifted = lookup1 << t->q;			      \
yann@2437
    45
+	    uint32_t index2;						      \
yann@2437
    46
+	    for (index2 = 0; index2 < (1 << t->q); index2++)		      \
yann@2437
    47
+	      {								      \
yann@2437
    48
+		uint32_t lookup2 = t->level2[index2 + lookup1_shifted];	      \
yann@2437
    49
+		if (lookup2 != ((uint32_t) ~0))				      \
yann@2437
    50
+		  {							      \
yann@2437
    51
+		    uint32_t lookup2_shifted = lookup2 << t->p;		      \
yann@2437
    52
+		    uint32_t index3;					      \
yann@2437
    53
+		    for (index3 = 0; index3 < (1 << t->p); index3++)	      \
yann@2437
    54
+		      {							      \
yann@2437
    55
+			struct element_t *lookup3			      \
yann@2437
    56
+			  = t->level3[index3 + lookup2_shifted];	      \
yann@2437
    57
+			if (lookup3 != NULL)				      \
yann@2437
    58
+			  fn ((((index1 << t->q) + index2) << t->p) + index3, \
yann@2437
    59
+			      lookup3);					      \
yann@2437
    60
+		      }							      \
yann@2437
    61
+		  }							      \
yann@2437
    62
+	      }								      \
yann@2437
    63
+	  }								      \
yann@2437
    64
+      }									      \
yann@2437
    65
+  } while (0)
yann@2437
    66
+
yann@2437
    67
 #endif
yann@2437
    68
 
yann@2437
    69
 #ifndef NO_FINALIZE