Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[BZ #5441, BZ #5452, BZ #5454]
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.
  • Loading branch information
Ulrich Drepper committed Dec 7, 2007
1 parent c9d65f0 commit 26e21e7
Show file tree
Hide file tree
Showing 10 changed files with 125 additions and 35 deletions.
21 changes: 21 additions & 0 deletions 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>

[BZ #5439]
Expand Down
2 changes: 1 addition & 1 deletion inet/Makefile
Expand Up @@ -52,7 +52,7 @@ routines := htonl htons \
aux := check_pf check_native ifreq

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

Expand Down
15 changes: 8 additions & 7 deletions inet/ether_line.c
Expand Up @@ -61,19 +61,20 @@ ether_line (const char *line, struct ether_addr *addr, char *hostname)
++line;
}

/* Remove trailing white space. */
cp = __strchrnul (line, '#');
while (cp > line && isspace (cp[-1]))
--cp;
/* Skip initial whitespace. */
while (isspace (*line))
++line;

if (cp == line)
if (*line == '#' || *line == '\0')
/* No hostname. */
return -1;

/* The hostname is up to the next non-space character. */
/* XXX This can cause trouble because the hostname might be too long
but we have no possibility to check it here. */
memcpy (hostname, line, cp - line);
hostname [cp - line] = '\0';
while (*line != '\0' && *line != '#' && !isspace (*line))
*hostname++ = *line++;
*hostname = '\0';

return 0;
}
38 changes: 38 additions & 0 deletions inet/tst-ether_line.c
@@ -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"
7 changes: 7 additions & 0 deletions nptl/ChangeLog
@@ -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>

* sysdeps/unix/sysv/linux/sh/lowlevellock.S (__lll_timedlock_wait):
Expand Down
2 changes: 2 additions & 0 deletions nptl/sysdeps/pthread/pthread.h
Expand Up @@ -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.
If EXECUTE is non-zero, the handler function is called. */
# define pthread_cleanup_pop(execute) \
do; while (0); /* Empty to allow label before pthread_cleanup_pop. */ \
} while (0); \
__pthread_unregister_cancel (&__cancel_buf); \
if (execute) \
Expand Down Expand Up @@ -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
pthread_cleanup_push_defer was called. */
# define pthread_cleanup_pop_restore_np(execute) \
do; while (0); /* Empty to allow label before pthread_cleanup_pop. */ \
} while (0); \
__pthread_unregister_cancel_restore (&__cancel_buf); \
if (execute) \
Expand Down
2 changes: 1 addition & 1 deletion stdio-common/Makefile
Expand Up @@ -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-popen tst-unlockedio tst-fmemopen2 tst-put-error tst-fgets \
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

Expand Down
16 changes: 16 additions & 0 deletions stdio-common/bug21.c
@@ -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"
1 change: 0 additions & 1 deletion stdio-common/vfscanf.c
Expand Up @@ -2845,7 +2845,6 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
*p->ptrs[cnt] = NULL;
}
p = p->next;
free (ptrs_to_free);
ptrs_to_free = p;
}
}
Expand Down
56 changes: 31 additions & 25 deletions sysdeps/unix/sysv/linux/bits/sched.h
Expand Up @@ -132,17 +132,21 @@ typedef struct
} while (0)
# endif
# define __CPU_SET_S(cpu, setsize, cpusetp) \
({ size_t __cpu = (cpu); \
__cpu < 8 * (setsize) \
? ((cpusetp)->__bits[__CPUELT (__cpu)] |= __CPUMASK (__cpu)) : 0; })
(__extension__ \
({ size_t __cpu = (cpu); \
__cpu < 8 * (setsize) \
? ((cpusetp)->__bits[__CPUELT (__cpu)] |= __CPUMASK (__cpu)) : 0; }))
# define __CPU_CLR_S(cpu, setsize, cpusetp) \
({ size_t __cpu = (cpu); \
__cpu < 8 * (setsize) \
? ((cpusetp)->__bits[__CPUELT (__cpu)] &= ~__CPUMASK (__cpu)) : 0; })
(__extension__ \
({ size_t __cpu = (cpu); \
__cpu < 8 * (setsize) \
? ((cpusetp)->__bits[__CPUELT (__cpu)] &= ~__CPUMASK (__cpu)) : 0; }))
# define __CPU_ISSET_S(cpu, setsize, cpusetp) \
({ size_t __cpu = (cpu); \
__cpu < 8 * (setsize) \
? (((cpusetp)->__bits[__CPUELT (__cpu)] & __CPUMASK (__cpu))) != 0 : 0; })
(__extension__ \
({ size_t __cpu = (cpu); \
__cpu < 8 * (setsize) \
? (((cpusetp)->__bits[__CPUELT (__cpu)] & __CPUMASK (__cpu))) != 0 \
: 0; }))

# define __CPU_COUNT_S(setsize, cpusetp) \
__sched_cpucount (setsize, cpusetp)
Expand All @@ -152,25 +156,27 @@ typedef struct
(__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0)
# else
# define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
({ cpu_set_t *__arr1 = (cpusetp1); \
cpu_set_t *__arr2 = (cpusetp2); \
size_t __imax = (setsize) / sizeof (__cpu_mask); \
size_t __i; \
for (__i = 0; __i < __imax; ++__i) \
if (__arr1->__bits[__i] != __arr2->__bits[__i]) \
break; \
__i == __imax; })
(__extension__ \
({ cpu_set_t *__arr1 = (cpusetp1); \
cpu_set_t *__arr2 = (cpusetp2); \
size_t __imax = (setsize) / sizeof (__cpu_mask); \
size_t __i; \
for (__i = 0; __i < __imax; ++__i) \
if (__arr1->__bits[__i] != __arr2->__bits[__i]) \
break; \
__i == __imax; }))
# endif

# define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \
({ cpu_set_t *__dest = (destset); \
cpu_set_t *__arr1 = (srcset1); \
cpu_set_t *__arr2 = (srcset2); \
size_t __imax = (setsize) / sizeof (__cpu_mask); \
size_t __i; \
for (__i = 0; __i < __imax; ++__i) \
__dest->__bits[__i] = __arr1->__bits[__i] op __arr2->__bits[__i]; \
__dest; })
(__extension__ \
({ cpu_set_t *__dest = (destset); \
cpu_set_t *__arr1 = (srcset1); \
cpu_set_t *__arr2 = (srcset2); \
size_t __imax = (setsize) / sizeof (__cpu_mask); \
size_t __i; \
for (__i = 0; __i < __imax; ++__i) \
__dest->__bits[__i] = __arr1->__bits[__i] op __arr2->__bits[__i]; \
__dest; }))

# define __CPU_ALLOC_SIZE(count) \
((((count) + __NCPUBITS - 1) / __NCPUBITS) * 8)
Expand Down

0 comments on commit 26e21e7

Please sign in to comment.