mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-09 14:50:05 +00:00
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:
parent
c9d65f0fbd
commit
26e21e7554
21
ChangeLog
21
ChangeLog
@ -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]
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
38
inet/tst-ether_line.c
Normal 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"
|
@ -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):
|
||||||
|
@ -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) \
|
||||||
|
@ -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
16
stdio-common/bug21.c
Normal 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"
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user