2007-12-07  Ulrich Drepper  <drepper@redhat.com>
	[BZ #5441]
	* stdio-common/vfscanf.c (_IO_vfwscanf): Don't free ptrs_to_free
	structure, it's allocated with alloca.
	* stdio-common/Makefile (tests): Add bug21.
	* stdio-common/bug21.c: New file.

2007-12-06  Aurelien Jarno  <aurelien@aurel32.net>

	[BZ #5452]
	* sysdeps/unix/sysv/linux/bits/sched.h: Use __extension__
	  keyword for gcc's braced-groups.

2007-12-07  Ulrich Drepper  <drepper@redhat.com>

	[BZ #5454]
	* inet/ether_line.c: Strip hostname of whitespaces.
	* inet/Makefile (tests): Add tst-ether_line.
	* inet/tst-ether_line.c: New file.
This commit is contained in:
Ulrich Drepper 2007-12-07 16:50:11 +00:00
parent c9d65f0fbd
commit 26e21e7554
10 changed files with 125 additions and 35 deletions

View File

@ -1,3 +1,24 @@
2007-12-07 Ulrich Drepper <drepper@redhat.com>
[BZ #5441]
* stdio-common/vfscanf.c (_IO_vfwscanf): Don't free ptrs_to_free
structure, it's allocated with alloca.
* stdio-common/Makefile (tests): Add bug21.
* stdio-common/bug21.c: New file.
2007-12-06 Aurelien Jarno <aurelien@aurel32.net>
[BZ #5452]
* sysdeps/unix/sysv/linux/bits/sched.h: Use __extension__
keyword for gcc's braced-groups.
2007-12-07 Ulrich Drepper <drepper@redhat.com>
[BZ #5454]
* inet/ether_line.c: Strip hostname of whitespaces.
* inet/Makefile (tests): Add tst-ether_line.
* inet/tst-ether_line.c: New file.
2007-12-03 Ulrich Drepper <drepper@redhat.com> 2007-12-03 Ulrich Drepper <drepper@redhat.com>
[BZ #5439] [BZ #5439]

View File

@ -52,7 +52,7 @@ routines := htonl htons \
aux := check_pf check_native ifreq aux := check_pf check_native ifreq
tests := htontest test_ifindex tst-ntoa tst-ether_aton tst-network \ tests := htontest test_ifindex tst-ntoa tst-ether_aton tst-network \
tst-gethnm test-ifaddrs bug-if1 test-inet6_opt tst-gethnm test-ifaddrs bug-if1 test-inet6_opt tst-ether_line
include ../Rules include ../Rules

View File

@ -61,19 +61,20 @@ ether_line (const char *line, struct ether_addr *addr, char *hostname)
++line; ++line;
} }
/* Remove trailing white space. */ /* Skip initial whitespace. */
cp = __strchrnul (line, '#'); while (isspace (*line))
while (cp > line && isspace (cp[-1])) ++line;
--cp;
if (cp == line) if (*line == '#' || *line == '\0')
/* No hostname. */ /* No hostname. */
return -1; return -1;
/* The hostname is up to the next non-space character. */
/* XXX This can cause trouble because the hostname might be too long /* XXX This can cause trouble because the hostname might be too long
but we have no possibility to check it here. */ but we have no possibility to check it here. */
memcpy (hostname, line, cp - line); while (*line != '\0' && *line != '#' && !isspace (*line))
hostname [cp - line] = '\0'; *hostname++ = *line++;
*hostname = '\0';
return 0; return 0;
} }

38
inet/tst-ether_line.c Normal file
View File

@ -0,0 +1,38 @@
#include <stdio.h>
#include <string.h>
#include <netinet/ether.h>
static int
do_test (void)
{
struct ether_addr a;
char buf[1000];
if (ether_line ("00:01:02:03:04:05 aaaaa \n", &a, buf) != 0)
{
puts ("ether_line failed");
return 1;
}
int res = 0;
int i;
for (i = 0; i < ETH_ALEN; ++i)
{
printf ("%02x%s",
(int) a.ether_addr_octet[i], i + 1 == ETH_ALEN ? "" : ":");
if (a.ether_addr_octet[i] != i)
{
printf ("octet %d is %d, expected %d\n",
i, (int) a.ether_addr_octet[i], i);
res = 1;
}
}
printf (" \"%s\"\n", buf);
res |= strcmp (buf, "aaaaa") != 0;
return res;
}
#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"

View File

@ -1,3 +1,10 @@
2007-12-07 Ulrich Drepper <drepper@redhat.com>
[BZ #5455]
* sysdeps/pthread/pthread.h [!__EXCEPTIONS] (pthread_cleanup_pop):
Allow label before pthread_cleanup_pop.
(pthread_cleanup_pop_restore_np): Likewise.
2007-12-04 Kaz Kojima <kkojima@rr.iij4u.or.jp> 2007-12-04 Kaz Kojima <kkojima@rr.iij4u.or.jp>
* sysdeps/unix/sysv/linux/sh/lowlevellock.S (__lll_timedlock_wait): * sysdeps/unix/sysv/linux/sh/lowlevellock.S (__lll_timedlock_wait):

View File

@ -655,6 +655,7 @@ extern void __pthread_register_cancel (__pthread_unwind_buf_t *__buf)
/* Remove a cleanup handler installed by the matching pthread_cleanup_push. /* Remove a cleanup handler installed by the matching pthread_cleanup_push.
If EXECUTE is non-zero, the handler function is called. */ If EXECUTE is non-zero, the handler function is called. */
# define pthread_cleanup_pop(execute) \ # define pthread_cleanup_pop(execute) \
do; while (0); /* Empty to allow label before pthread_cleanup_pop. */ \
} while (0); \ } while (0); \
__pthread_unregister_cancel (&__cancel_buf); \ __pthread_unregister_cancel (&__cancel_buf); \
if (execute) \ if (execute) \
@ -690,6 +691,7 @@ extern void __pthread_register_cancel_defer (__pthread_unwind_buf_t *__buf)
restores the cancellation type that was in effect when the matching restores the cancellation type that was in effect when the matching
pthread_cleanup_push_defer was called. */ pthread_cleanup_push_defer was called. */
# define pthread_cleanup_pop_restore_np(execute) \ # define pthread_cleanup_pop_restore_np(execute) \
do; while (0); /* Empty to allow label before pthread_cleanup_pop. */ \
} while (0); \ } while (0); \
__pthread_unregister_cancel_restore (&__cancel_buf); \ __pthread_unregister_cancel_restore (&__cancel_buf); \
if (execute) \ if (execute) \

View File

@ -57,7 +57,7 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \
tst-perror tst-sprintf tst-rndseek tst-fdopen tst-fphex bug14 bug15 \ tst-perror tst-sprintf tst-rndseek tst-fdopen tst-fphex bug14 bug15 \
tst-popen tst-unlockedio tst-fmemopen2 tst-put-error tst-fgets \ tst-popen tst-unlockedio tst-fmemopen2 tst-put-error tst-fgets \
tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 bug18 bug18a \ tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 bug18 bug18a \
bug19 bug19a tst-popen2 scanf13 scanf14 scanf15 bug20 bug19 bug19a tst-popen2 scanf13 scanf14 scanf15 bug20 bug21
test-srcs = tst-unbputc tst-printf test-srcs = tst-unbputc tst-printf

16
stdio-common/bug21.c Normal file
View File

@ -0,0 +1,16 @@
#include <stdio.h>
static int
do_test (void)
{
static const char buf[] = " ";
char *str;
int r = sscanf (buf, "%as", &str);
printf ("%d %p\n", r, str);
return r != -1 || str != NULL;
}
#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"

View File

@ -2845,7 +2845,6 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
*p->ptrs[cnt] = NULL; *p->ptrs[cnt] = NULL;
} }
p = p->next; p = p->next;
free (ptrs_to_free);
ptrs_to_free = p; ptrs_to_free = p;
} }
} }

View File

@ -132,17 +132,21 @@ typedef struct
} while (0) } while (0)
# endif # endif
# define __CPU_SET_S(cpu, setsize, cpusetp) \ # define __CPU_SET_S(cpu, setsize, cpusetp) \
({ size_t __cpu = (cpu); \ (__extension__ \
__cpu < 8 * (setsize) \ ({ size_t __cpu = (cpu); \
? ((cpusetp)->__bits[__CPUELT (__cpu)] |= __CPUMASK (__cpu)) : 0; }) __cpu < 8 * (setsize) \
? ((cpusetp)->__bits[__CPUELT (__cpu)] |= __CPUMASK (__cpu)) : 0; }))
# define __CPU_CLR_S(cpu, setsize, cpusetp) \ # define __CPU_CLR_S(cpu, setsize, cpusetp) \
({ size_t __cpu = (cpu); \ (__extension__ \
__cpu < 8 * (setsize) \ ({ size_t __cpu = (cpu); \
? ((cpusetp)->__bits[__CPUELT (__cpu)] &= ~__CPUMASK (__cpu)) : 0; }) __cpu < 8 * (setsize) \
? ((cpusetp)->__bits[__CPUELT (__cpu)] &= ~__CPUMASK (__cpu)) : 0; }))
# define __CPU_ISSET_S(cpu, setsize, cpusetp) \ # define __CPU_ISSET_S(cpu, setsize, cpusetp) \
({ size_t __cpu = (cpu); \ (__extension__ \
__cpu < 8 * (setsize) \ ({ size_t __cpu = (cpu); \
? (((cpusetp)->__bits[__CPUELT (__cpu)] & __CPUMASK (__cpu))) != 0 : 0; }) __cpu < 8 * (setsize) \
? (((cpusetp)->__bits[__CPUELT (__cpu)] & __CPUMASK (__cpu))) != 0 \
: 0; }))
# define __CPU_COUNT_S(setsize, cpusetp) \ # define __CPU_COUNT_S(setsize, cpusetp) \
__sched_cpucount (setsize, cpusetp) __sched_cpucount (setsize, cpusetp)
@ -152,25 +156,27 @@ typedef struct
(__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0) (__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0)
# else # else
# define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ # define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
({ cpu_set_t *__arr1 = (cpusetp1); \ (__extension__ \
cpu_set_t *__arr2 = (cpusetp2); \ ({ cpu_set_t *__arr1 = (cpusetp1); \
size_t __imax = (setsize) / sizeof (__cpu_mask); \ cpu_set_t *__arr2 = (cpusetp2); \
size_t __i; \ size_t __imax = (setsize) / sizeof (__cpu_mask); \
for (__i = 0; __i < __imax; ++__i) \ size_t __i; \
if (__arr1->__bits[__i] != __arr2->__bits[__i]) \ for (__i = 0; __i < __imax; ++__i) \
break; \ if (__arr1->__bits[__i] != __arr2->__bits[__i]) \
__i == __imax; }) break; \
__i == __imax; }))
# endif # endif
# define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \ # define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \
({ cpu_set_t *__dest = (destset); \ (__extension__ \
cpu_set_t *__arr1 = (srcset1); \ ({ cpu_set_t *__dest = (destset); \
cpu_set_t *__arr2 = (srcset2); \ cpu_set_t *__arr1 = (srcset1); \
size_t __imax = (setsize) / sizeof (__cpu_mask); \ cpu_set_t *__arr2 = (srcset2); \
size_t __i; \ size_t __imax = (setsize) / sizeof (__cpu_mask); \
for (__i = 0; __i < __imax; ++__i) \ size_t __i; \
__dest->__bits[__i] = __arr1->__bits[__i] op __arr2->__bits[__i]; \ for (__i = 0; __i < __imax; ++__i) \
__dest; }) __dest->__bits[__i] = __arr1->__bits[__i] op __arr2->__bits[__i]; \
__dest; }))
# define __CPU_ALLOC_SIZE(count) \ # define __CPU_ALLOC_SIZE(count) \
((((count) + __NCPUBITS - 1) / __NCPUBITS) * 8) ((((count) + __NCPUBITS - 1) / __NCPUBITS) * 8)