[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[commits] r1871 - in /fsf/trunk/libc: ./ posix/ sysdeps/ia64/fpu/ sysdeps/unix/sysv/linux/
- To: commits@xxxxxxxxxx
- Subject: [commits] r1871 - in /fsf/trunk/libc: ./ posix/ sysdeps/ia64/fpu/ sysdeps/unix/sysv/linux/
- From: eglibc@xxxxxxxxxx
- Date: Mon, 02 Apr 2007 07:01:21 -0000
Author: eglibc
Date: Mon Apr 2 00:01:21 2007
New Revision: 1871
Log:
Import glibc-mainline for 2007-04-02
Added:
fsf/trunk/libc/posix/tst-fnmatch2.c
Modified:
fsf/trunk/libc/ChangeLog
fsf/trunk/libc/posix/Makefile
fsf/trunk/libc/posix/fnmatch.c
fsf/trunk/libc/posix/fnmatch_loop.c
fsf/trunk/libc/sysdeps/ia64/fpu/fesetround.c
fsf/trunk/libc/sysdeps/unix/sysv/linux/sync_file_range.c
Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Mon Apr 2 00:01:21 2007
@@ -1,3 +1,24 @@
+2007-03-27 Jakub Jelinek <jakub@xxxxxxxxxx>
+
+ * posix/fnmatch.c (STRUCT): Define.
+ (fnmatch): Pass NULL as last argument to internal_fn{,w}match.
+ * posix/fnmatch_loop.c (struct STRUCT): New type.
+ (FCT): Add ends argument. If ends != NULL and normal * is
+ seen in the pattern, store current pattern and string pointers
+ and return. Adjust recursive calls.
+ (EXT): Adjust FCT callers.
+ (STRUCT): Undef at the end of the file.
+ * posix/Makefile (tests): Add tst-fnmatch2.
+ * posix/tst-fnmatch2.c: New test.
+
+2007-04-01 Jakub Jelinek <jakub@xxxxxxxxxx>
+
+ * sysdeps/ia64/fpu/fesetround.c (fesetround): Return 0 on success
+ and 1 on failure.
+
+ * sysdeps/unix/sysv/linux/sync_file_range.c (sync_file_range):
+ Change last argument to unsigned int.
+
2007-03-23 Jakub Jelinek <jakub@xxxxxxxxxx>
* scripts/check-local-headers.sh: Filter out sys/capability.h.
Modified: fsf/trunk/libc/posix/Makefile
==============================================================================
--- fsf/trunk/libc/posix/Makefile (original)
+++ fsf/trunk/libc/posix/Makefile Mon Apr 2 00:01:21 2007
@@ -90,7 +90,7 @@
tst-execv1 tst-execv2 tst-execl1 tst-execl2 \
tst-execve1 tst-execve2 tst-execle1 tst-execle2 \
tst-execvp3 tst-execvp4 tst-rfc3484 tst-rfc3484-2 \
- tst-getaddrinfo3
+ tst-getaddrinfo3 tst-fnmatch2
xtests := bug-ga2
ifeq (yes,$(build-shared))
test-srcs := globtest
Modified: fsf/trunk/libc/posix/fnmatch.c
==============================================================================
--- fsf/trunk/libc/posix/fnmatch.c (original)
+++ fsf/trunk/libc/posix/fnmatch.c Mon Apr 2 00:01:21 2007
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2002,2003
+/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2002,2003,2007
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -209,6 +209,7 @@
# define FCT internal_fnmatch
# define EXT ext_match
# define END end_pattern
+# define STRUCT fnmatch_struct
# define L(CS) CS
# ifdef _LIBC
# define BTOWC(C) __btowc (C)
@@ -235,7 +236,8 @@
# define INT wint_t
# define FCT internal_fnwmatch
# define EXT ext_wmatch
-# define END end_wpattern
+# define END end_wpattern
+# define STRUCT fnwmatch_struct
# define L(CS) L##CS
# define BTOWC(C) (C)
# define STRLEN(S) __wcslen (S)
@@ -397,12 +399,12 @@
}
return internal_fnwmatch (wpattern, wstring, wstring + n,
- flags & FNM_PERIOD, flags);
+ flags & FNM_PERIOD, flags, NULL);
}
# endif /* mbstate_t and mbsrtowcs or _LIBC. */
return internal_fnmatch (pattern, string, string + strlen (string),
- flags & FNM_PERIOD, flags);
+ flags & FNM_PERIOD, flags, NULL);
}
# ifdef _LIBC
Modified: fsf/trunk/libc/posix/fnmatch_loop.c
==============================================================================
--- fsf/trunk/libc/posix/fnmatch_loop.c (original)
+++ fsf/trunk/libc/posix/fnmatch_loop.c Mon Apr 2 00:01:21 2007
@@ -1,5 +1,5 @@
-/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2003,2004,2005
- Free Software Foundation, Inc.
+/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2003,2004,2005,
+ 2007 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
@@ -17,10 +17,18 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
+struct STRUCT
+{
+ const CHAR *pattern;
+ const CHAR *string;
+ int no_leading_period;
+};
+
/* Match STRING against the filename pattern PATTERN, returning zero if
it matches, nonzero if not. */
static int FCT (const CHAR *pattern, const CHAR *string,
- const CHAR *string_end, int no_leading_period, int flags)
+ const CHAR *string_end, int no_leading_period, int flags,
+ struct STRUCT *ends)
internal_function;
static int EXT (INT opt, const CHAR *pattern, const CHAR *string,
const CHAR *string_end, int no_leading_period, int flags)
@@ -29,12 +37,13 @@
static int
internal_function
-FCT (pattern, string, string_end, no_leading_period, flags)
+FCT (pattern, string, string_end, no_leading_period, flags, ends)
const CHAR *pattern;
const CHAR *string;
const CHAR *string_end;
int no_leading_period;
int flags;
+ struct STRUCT *ends;
{
register const CHAR *p = pattern, *n = string;
register UCHAR c;
@@ -96,6 +105,13 @@
flags);
if (res != -1)
return res;
+ }
+ else if (ends != NULL)
+ {
+ ends->pattern = p - 1;
+ ends->string = n;
+ ends->no_leading_period = no_leading_period;
+ return 0;
}
if (n != string_end && *n == L('.') && no_leading_period)
@@ -157,7 +173,9 @@
else
{
const CHAR *endp;
-
+ struct STRUCT end;
+
+ end.pattern = NULL;
endp = MEMCHR (n, (flags & FNM_FILE_NAME) ? L('/') : L('\0'),
string_end - n);
if (endp == NULL)
@@ -170,36 +188,46 @@
{
int flags2 = ((flags & FNM_FILE_NAME)
? flags : (flags & ~FNM_PERIOD));
- int no_leading_period2 = no_leading_period;
-
- for (--p; n < endp; ++n, no_leading_period2 = 0)
- if (FCT (p, n, string_end, no_leading_period2, flags2)
- == 0)
- return 0;
+
+ for (--p; n < endp; ++n, no_leading_period = 0)
+ if (FCT (p, n, string_end, no_leading_period, flags2,
+ &end) == 0)
+ goto found;
}
else if (c == L('/') && (flags & FNM_FILE_NAME))
{
while (n < string_end && *n != L('/'))
++n;
if (n < string_end && *n == L('/')
- && (FCT (p, n + 1, string_end, flags & FNM_PERIOD, flags)
- == 0))
+ && (FCT (p, n + 1, string_end, flags & FNM_PERIOD, flags,
+ NULL) == 0))
return 0;
}
else
{
int flags2 = ((flags & FNM_FILE_NAME)
? flags : (flags & ~FNM_PERIOD));
- int no_leading_period2 = no_leading_period;
if (c == L('\\') && !(flags & FNM_NOESCAPE))
c = *p;
c = FOLD (c);
- for (--p; n < endp; ++n, no_leading_period2 = 0)
+ for (--p; n < endp; ++n, no_leading_period = 0)
if (FOLD ((UCHAR) *n) == c
- && (FCT (p, n, string_end, no_leading_period2, flags2)
- == 0))
- return 0;
+ && (FCT (p, n, string_end, no_leading_period, flags2,
+ &end) == 0))
+ {
+ found:
+ if (end.pattern == NULL)
+ return 0;
+ break;
+ }
+ if (end.pattern != NULL)
+ {
+ p = end.pattern;
+ n = end.string;
+ no_leading_period = end.no_leading_period;
+ continue;
+ }
}
}
@@ -1098,7 +1126,7 @@
switch (opt)
{
case L('*'):
- if (FCT (p, string, string_end, no_leading_period, flags) == 0)
+ if (FCT (p, string, string_end, no_leading_period, flags, NULL) == 0)
return 0;
/* FALLTHROUGH */
@@ -1109,7 +1137,8 @@
/* First match the prefix with the current pattern with the
current pattern. */
if (FCT (list->str, string, rs, no_leading_period,
- flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0
+ flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD,
+ NULL) == 0
/* This was successful. Now match the rest with the rest
of the pattern. */
&& (FCT (p, rs, string_end,
@@ -1117,7 +1146,7 @@
? no_leading_period
: rs[-1] == '/' && NO_LEADING_PERIOD (flags) ? 1 : 0,
flags & FNM_FILE_NAME
- ? flags : flags & ~FNM_PERIOD) == 0
+ ? flags : flags & ~FNM_PERIOD, NULL) == 0
/* This didn't work. Try the whole pattern. */
|| (rs != string
&& FCT (pattern - 1, rs, string_end,
@@ -1126,7 +1155,7 @@
: (rs[-1] == '/' && NO_LEADING_PERIOD (flags)
? 1 : 0),
flags & FNM_FILE_NAME
- ? flags : flags & ~FNM_PERIOD) == 0)))
+ ? flags : flags & ~FNM_PERIOD, NULL) == 0)))
/* It worked. Signal success. */
return 0;
}
@@ -1136,7 +1165,7 @@
return FNM_NOMATCH;
case L('?'):
- if (FCT (p, string, string_end, no_leading_period, flags) == 0)
+ if (FCT (p, string, string_end, no_leading_period, flags, NULL) == 0)
return 0;
/* FALLTHROUGH */
@@ -1148,7 +1177,8 @@
pattern list. */
if (FCT (STRCAT (list->str, p), string, string_end,
no_leading_period,
- flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0)
+ flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD,
+ NULL) == 0)
/* It worked. Signal success. */
return 0;
while ((list = list->next) != NULL);
@@ -1163,7 +1193,8 @@
for (runp = list; runp != NULL; runp = runp->next)
if (FCT (runp->str, string, rs, no_leading_period,
- flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0)
+ flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD,
+ NULL) == 0)
break;
/* If none of the patterns matched see whether the rest does. */
@@ -1172,8 +1203,8 @@
rs == string
? no_leading_period
: rs[-1] == '/' && NO_LEADING_PERIOD (flags) ? 1 : 0,
- flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD)
- == 0))
+ flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD,
+ NULL) == 0))
/* This is successful. */
return 0;
}
@@ -1198,6 +1229,7 @@
#undef FCT
#undef EXT
#undef END
+#undef STRUCT
#undef MEMPCPY
#undef MEMCHR
#undef STRCOLL
Added: fsf/trunk/libc/posix/tst-fnmatch2.c
==============================================================================
--- fsf/trunk/libc/posix/tst-fnmatch2.c (added)
+++ fsf/trunk/libc/posix/tst-fnmatch2.c Mon Apr 2 00:01:21 2007
@@ -1,0 +1,35 @@
+#include <fnmatch.h>
+#include <stdio.h>
+
+int
+do_test (void)
+{
+ char pattern[] = "a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*";
+ const char *string = "aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmm"
+ "nnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyy";
+ if (fnmatch (pattern, string, 0) != FNM_NOMATCH)
+ {
+ puts ("First fnmatch didn't return FNM_NOMATCH");
+ return 1;
+ }
+ pattern[(sizeof pattern) - 3] = '*';
+ if (fnmatch (pattern, string, 0) != 0)
+ {
+ puts ("Second fnmatch didn't return 0");
+ return 1;
+ }
+ if (fnmatch ("a*b/*", "abbb/.x", FNM_PATHNAME | FNM_PERIOD) != FNM_NOMATCH)
+ {
+ puts ("Third fnmatch didn't return FNM_NOMATCH");
+ return 1;
+ }
+ if (fnmatch ("a*b/*", "abbb/xy", FNM_PATHNAME | FNM_PERIOD) != 0)
+ {
+ puts ("Fourth fnmatch didn't return 0");
+ return 1;
+ }
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
Modified: fsf/trunk/libc/sysdeps/ia64/fpu/fesetround.c
==============================================================================
--- fsf/trunk/libc/sysdeps/ia64/fpu/fesetround.c (original)
+++ fsf/trunk/libc/sysdeps/ia64/fpu/fesetround.c Mon Apr 2 00:01:21 2007
@@ -1,5 +1,5 @@
/* Set current rounding direction.
- Copyright (C) 1999, 2000, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2005, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Christian Boissat <Christian.Boissat@xxxxxxx>, 1999.
@@ -26,7 +26,7 @@
fenv_t fpsr;
if (round & ~3)
- return 0;
+ return 1;
/* Get the current state. */
__asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr));
@@ -37,6 +37,6 @@
/* Put the new state in effect. */
__asm__ __volatile__ ("mov.m ar.fpsr=%0" :: "r" (fpsr) : "memory");
- return 1;
+ return 0;
}
libm_hidden_def (fesetround)
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/sync_file_range.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/sync_file_range.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/sync_file_range.c Mon Apr 2 00:01:21 2007
@@ -1,5 +1,5 @@
/* Selective file content synch'ing.
- Copyright (C) 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006, 2007 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
@@ -27,7 +27,7 @@
#ifdef __NR_sync_file_range
int
-sync_file_range (int fd, __off64_t from, __off64_t to, int flags)
+sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags)
{
return INLINE_SYSCALL (sync_file_range, 6, fd,
__LONG_LONG_PAIR ((long) (from >> 32), (long) from),
@@ -36,7 +36,7 @@
}
#else
int
-sync_file_range (int fd, __off64_t from, __off64_t to, int flags)
+sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags)
{
__set_errno (ENOSYS);
return -1;