aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog15
-rw-r--r--posix/regex.c39
-rw-r--r--sysdeps/alpha/fpu/bits/mathinline.h8
-rw-r--r--sysdeps/gnu/netinet/tcp.h22
4 files changed, 58 insertions, 26 deletions
diff --git a/ChangeLog b/ChangeLog
index 0d9b836378..efcb817c8a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2001-02-07 Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/gnu/netinet/tcp.h: Correct values of TCP_ macros.
+ Patch by Pekka.Pietikainen@cern.ch.
+
+ * posix/regex.c: Correct several problems with 64-bit architectures
+ introduced in the MBS changes.
+ Patch by Isamu Hasegawa <isamu@yamato.ibm.com>.
+
+2001-02-07 Jakub Jelinek <jakub@redhat.com>
+
+ * math/tgmath.h: Only add l suffixes if __NO_LONG_DOUBLE_MATH is
+ not defined.
+ * sysdeps/alpha/fpu/bits/mathinline.h: Honour __NO_MATH_INLINES.
+
2001-02-07 Andreas Jaeger <aj@suse.de>
* manual/install.texi (Tools for Compilation): Fix typo.
diff --git a/posix/regex.c b/posix/regex.c
index a6e6507542..ec25642e31 100644
--- a/posix/regex.c
+++ b/posix/regex.c
@@ -62,6 +62,7 @@
# define US_CHAR_TYPE wchar_t/* unsigned character type */
# define COMPILED_BUFFER_VAR wc_buffer
# define OFFSET_ADDRESS_SIZE 1 /* the size which STORE_NUMBER macro use */
+# define CHAR_CLASS_SIZE (sizeof(wctype_t)/sizeof(CHAR_TYPE)+1)
# define PUT_CHAR(c) \
do { \
if (MC_CUR_MAX == 1) \
@@ -2643,6 +2644,7 @@ regex_compile (pattern, size, syntax, bufp)
charset[5] = p (= length of chars)
charset[6] = char_class (wctype_t)
+ charset[6+CHAR_CLASS_SIZE] = char_class (wctype_t)
...
charset[l+5] = char_class (wctype_t)
@@ -2817,15 +2819,16 @@ regex_compile (pattern, size, syntax, bufp)
if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
/* Allocate the space for character class. */
- GET_BUFFER_SPACE(1);
+ GET_BUFFER_SPACE(CHAR_CLASS_SIZE);
/* Update the pointer to indicate end of buffer. */
- b++;
+ b += CHAR_CLASS_SIZE;
/* Move data which follow character classes
not to violate the data. */
- insert_space(1, laststart+6, b-1);
+ insert_space(CHAR_CLASS_SIZE, laststart + 6, b - 1);
/* Store the character class. */
- laststart[6] = (CHAR_TYPE) wt;
- laststart[1]++; /* Update length of char_classes */
+ *((wctype_t*)(laststart + 6)) = wt;
+ /* Update length of char_classes */
+ laststart[1] += CHAR_CLASS_SIZE;
had_char_class = true;
}
@@ -2991,7 +2994,7 @@ regex_compile (pattern, size, syntax, bufp)
/* Adjust for the alignment. */
idx = (idx + 3) & ~4;
- str[0] = (wchar_t) &extra[idx + 4];
+ str[0] = (wchar_t) idx + 4;
}
else if (symb_table[2 * elem] == 0 && c1 == 1)
{
@@ -4356,7 +4359,8 @@ group_in_compile_stack (compile_stack, regnum)
}
#ifdef MBS_SUPPORT
-/* This insert space into the pattern. */
+/* This insert space, which size is "num", into the pattern at "loc".
+ "end" must point the end of the allocated buffer. */
static void
insert_space (num, loc, end)
int num;
@@ -4397,13 +4401,15 @@ compile_range (range_start_char, p_ptr, pend, translate, syntax, b,
{
const char *collseq = (const char *) _NL_CURRENT(LC_COLLATE,
_NL_COLLATE_COLLSEQWC);
+ const unsigned char *extra = (const unsigned char *)
+ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB);
if (range_start_char < -1)
{
/* range_start is a collating symbol. */
int32_t *wextra;
/* Retreive the index and get collation sequence value. */
- wextra = (int32_t*)char_set[-range_start_char];
+ wextra = (int32_t*)(extra + char_set[-range_start_char]);
start_val = wextra[1 + *wextra];
}
else
@@ -5993,19 +5999,26 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
2*ranges_length + chars_length;
/* match with char_class? */
- for (i = 0; i < char_class_length ; i++)
- if (iswctype((wint_t)c, (wctype_t)(*workp++)))
- goto char_set_matched;
+ for (i = 0; i < char_class_length ; i += CHAR_CLASS_SIZE)
+ {
+ wctype_t wctype = *((wctype_t*)workp);
+ workp += CHAR_CLASS_SIZE;
+ if (iswctype((wint_t)c, wctype))
+ goto char_set_matched;
+ }
/* match with collating_symbol? */
# ifdef _LIBC
if (nrules != 0)
{
+ const unsigned char *extra = (const unsigned char *)
+ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB);
+
for (workp2 = workp + coll_symbol_length ; workp < workp2 ;
workp++)
{
int32_t *wextra;
- wextra = (int32_t*) *workp++;
+ wextra = (int32_t*)(extra + *workp++);
for (i = 0; i < *wextra; ++i)
if (TRANSLATE(d[i]) != wextra[1 + i])
break;
@@ -6125,7 +6138,7 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
/* Update d, however d will be incremented at
char_set_matched:, we decrement d here. */
- d = backup_d + (wint_t)cp - (wint_t)str_buf - 1;
+ d = backup_d + ((wchar_t*)cp - (wchar_t*)str_buf - 1);
if (d >= dend)
{
if (dend == end_match_2)
diff --git a/sysdeps/alpha/fpu/bits/mathinline.h b/sysdeps/alpha/fpu/bits/mathinline.h
index 065009c626..b7d5c3c95e 100644
--- a/sysdeps/alpha/fpu/bits/mathinline.h
+++ b/sysdeps/alpha/fpu/bits/mathinline.h
@@ -1,5 +1,5 @@
/* Inline math functions for Alpha.
- Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by David Mosberger-Tang.
@@ -58,6 +58,8 @@
!isunordered(__x, __y) && __x != __y; }))
#endif /* ISO C99 */
+#if !defined __NO_MATH_INLINES && defined __OPTIMIZE__
+
#define __inline_copysign(NAME, TYPE) \
__MATH_INLINE TYPE \
NAME (TYPE __x, TYPE __y) __THROW \
@@ -174,4 +176,6 @@ __MATH_INLINE double fdim (double __x, double __y) __THROW
return __x < __y ? 0.0 : __x - __y;
}
-#endif
+#endif /* C99 */
+
+#endif /* __NO_MATH_INLINES */
diff --git a/sysdeps/gnu/netinet/tcp.h b/sysdeps/gnu/netinet/tcp.h
index cafb6b1880..076e332c18 100644
--- a/sysdeps/gnu/netinet/tcp.h
+++ b/sysdeps/gnu/netinet/tcp.h
@@ -37,17 +37,17 @@
/*
* User-settable options (used with setsockopt).
*/
-#define TCP_NODELAY 0x01 /* Don't delay send to coalesce packets */
-#define TCP_MAXSEG 0x02 /* Set maximum segment size */
-#define TCP_CORK 0x03 /* Control sending of partial frames */
-#define TCP_KEEPIDLE 0x04 /* Start keeplives after this period */
-#define TCP_KEEPINTVL 0x05 /* Interval between keepalives */
-#define TCP_KEEPCNT 0x06 /* Number of keepalives before death */
-#define TCP_SYNCNT 0x07 /* Number of SYN retransmits */
-#define TCP_LINGER2 0x08 /* Life time of orphaned FIN-WAIT-2 state */
-#define TCP_DEFER_ACCEPT 0x09 /* Wake up listener only when data arrive */
-#define TCP_WINDOW_CLAMP 0x10 /* Bound advertised window */
-#define TCP_INFO 0x11 /* Information about this connection. */
+#define TCP_NODELAY 1 /* Don't delay send to coalesce packets */
+#define TCP_MAXSEG 2 /* Set maximum segment size */
+#define TCP_CORK 3 /* Control sending of partial frames */
+#define TCP_KEEPIDLE 4 /* Start keeplives after this period */
+#define TCP_KEEPINTVL 5 /* Interval between keepalives */
+#define TCP_KEEPCNT 6 /* Number of keepalives before death */
+#define TCP_SYNCNT 7 /* Number of SYN retransmits */
+#define TCP_LINGER2 8 /* Life time of orphaned FIN-WAIT-2 state */
+#define TCP_DEFER_ACCEPT 9 /* Wake up listener only when data arrive */
+#define TCP_WINDOW_CLAMP 10 /* Bound advertised window */
+#define TCP_INFO 11 /* Information about this connection. */
#ifdef __USE_MISC
# include <sys/types.h>