From 02ac66c50d2faf11677911fd99579869f24795ef Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Sat, 13 Jan 1996 00:46:48 +0000 Subject: Fri Jan 12 13:40:01 1996 Roland McGrath * posix/gnu/types.h: Moved to sysdeps/generic/gnu/types.h. * posix/glob.c (glob): Add parens in glob call flags arg for GLOB_BRACE case. * string/string.h (strdupa): New macro. * stdio-common/vfscanf.c (%[): Grok ] as first char in set, not terminator on empty set. From drepper. --- ChangeLog | 12 +++++++ gnu/types.h | 1 - posix/glob.c | 4 +-- posix/gnu/types.h | 84 --------------------------------------------- stdio-common/vfscanf.c | 7 +++- string/string.h | 12 ++++++- sysdeps/generic/gnu/types.h | 84 +++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 115 insertions(+), 89 deletions(-) delete mode 100644 gnu/types.h delete mode 100644 posix/gnu/types.h create mode 100644 sysdeps/generic/gnu/types.h diff --git a/ChangeLog b/ChangeLog index ab1bec38e0..63d6e18973 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +Fri Jan 12 13:40:01 1996 Roland McGrath + + * posix/gnu/types.h: Moved to sysdeps/generic/gnu/types.h. + + * posix/glob.c (glob): Add parens in glob call flags arg for + GLOB_BRACE case. + + * string/string.h (strdupa): New macro. + + * stdio-common/vfscanf.c (%[): Grok ] as first char in set, not + terminator on empty set. From drepper. + Thu Jan 11 13:09:20 1996 Roland McGrath * elf/do-rel.h (elf_dynamic_do_rel): Use referring symbol as diff --git a/gnu/types.h b/gnu/types.h deleted file mode 100644 index 0d1fb31d06..0000000000 --- a/gnu/types.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/posix/glob.c b/posix/glob.c index 954960cb18..259ac020d2 100644 --- a/posix/glob.c +++ b/posix/glob.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -290,7 +290,7 @@ glob (pattern, flags, errfunc, pglob) memcpy (buf, pattern, begin - pattern); memcpy (buf + (begin - pattern), p, comma - p); memcpy (buf + (begin - pattern) + (comma - p), end, restlen); - result = glob (buf, (flags & ~(GLOB_NOCHECK|GLOB_NOMAGIC) | + result = glob (buf, ((flags & ~(GLOB_NOCHECK|GLOB_NOMAGIC)) | GLOB_APPEND), errfunc, pglob); if (result && result != GLOB_NOMATCH) return result; diff --git a/posix/gnu/types.h b/posix/gnu/types.h deleted file mode 100644 index 2a40702c51..0000000000 --- a/posix/gnu/types.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1991, 1992, 1994, 1995 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 -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#ifndef _GNU_TYPES_H - -#define _GNU_TYPES_H 1 - - -/* Convenience types. */ -typedef unsigned char __u_char; -typedef unsigned short __u_short; -typedef unsigned int __u_int; -typedef unsigned long __u_long; -#ifdef __GNUC__ -typedef unsigned long long int __u_quad_t; -typedef long long int __quad_t; -typedef __quad_t *__qaddr_t; -#else -typedef struct -{ - long val[2]; -} __quad_t; -typedef struct -{ - __u_long val[2]; -} __u_quad_t; -#endif -typedef int __dev_t; /* Type of device numbers. */ -typedef unsigned int __uid_t; /* Type of user identifications. */ -typedef unsigned int __gid_t; /* Type of group identifications. */ -typedef unsigned int __ino_t; /* Type of file serial numbers. */ -typedef unsigned int __mode_t; /* Type of file attribute bitmasks. */ -typedef unsigned short int __nlink_t; /* Type of file link counts. */ -typedef long int __off_t; /* Type of file sizes and offsets. */ -typedef int __pid_t; /* Type of process identifications. */ -typedef int __ssize_t; /* Type of a byte count, or error. */ -typedef __u_quad_t __fsid_t; /* Type of file system IDs. */ - -/* Everythin' else. */ -typedef long int __daddr_t; /* The type of a disk address. */ -typedef char *__caddr_t; -typedef long int __time_t; -typedef long int __swblk_t; /* Type of a swap block maybe? */ - -/* fd_set for select. */ - -/* Number of descriptors that can fit in an `fd_set'. */ -#define __FD_SETSIZE 256 - -/* It's easier to assume 8-bit bytes than to get CHAR_BIT. */ -#define __NFDBITS (sizeof (unsigned long int) * 8) -#define __FDELT(d) ((d) / __NFDBITS) -#define __FDMASK(d) (1 << ((d) % __NFDBITS)) - -typedef struct - { - /* Some braindead old software uses this member name. */ - unsigned long int fds_bits[(__FD_SETSIZE + (__NFDBITS - 1)) / __NFDBITS]; - } __fd_set; - -/* This line MUST be split! Otherwise m4 will not change it. */ -#define __FD_ZERO(set) \ - ((void) memset ((__ptr_t) (set), 0, sizeof (fd_set))) -#define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d)) -#define __FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d)) -#define __FD_ISSET(d, set) ((set)->fds_bits[__FDELT(d)] & __FDMASK(d)) - - -#endif /* gnu/types.h */ diff --git a/stdio-common/vfscanf.c b/stdio-common/vfscanf.c index 14aa7d9748..c13627aac2 100644 --- a/stdio-common/vfscanf.c +++ b/stdio-common/vfscanf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 94, 95, 96 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 @@ -703,6 +703,11 @@ __vfscanf (FILE *s, const char *format, va_list argptr) else not_in = 0; + if (*f == ']') + /* If ] appears before any char in the set, it is not + the terminator, but the first char in the set. */ + ADDW (*f++); + while ((fc = *f++) != '\0' && fc != ']') { if (fc == '-' && *f != '\0' && *f != ']' && diff --git a/string/string.h b/string/string.h index 0f995319bb..95dcba0041 100644 --- a/string/string.h +++ b/string/string.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1993, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 95, 96 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 @@ -91,6 +91,16 @@ extern size_t strxfrm __P ((char *__dest, __const char *__src, size_t __n)); extern char *strdup __P ((__const char *__s)); #endif +#if defined (__USE_GNU) && defined (__GNUC__) +/* Duplicate S, returning an identical alloca'd string. */ +#define strdupa(s) \ +({ \ + const char *__old = (s); \ + size_t __len = strlen (__old) + 1; \ + memcpy (__builtin_alloca (__len), __old, __len); \ +}) +#endif + /* Find the first occurrence of C in S. */ extern char *strchr __P ((__const char *__s, int __c)); /* Find the last occurrence of C in S. */ diff --git a/sysdeps/generic/gnu/types.h b/sysdeps/generic/gnu/types.h new file mode 100644 index 0000000000..2a40702c51 --- /dev/null +++ b/sysdeps/generic/gnu/types.h @@ -0,0 +1,84 @@ +/* Copyright (C) 1991, 1992, 1994, 1995 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 +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#ifndef _GNU_TYPES_H + +#define _GNU_TYPES_H 1 + + +/* Convenience types. */ +typedef unsigned char __u_char; +typedef unsigned short __u_short; +typedef unsigned int __u_int; +typedef unsigned long __u_long; +#ifdef __GNUC__ +typedef unsigned long long int __u_quad_t; +typedef long long int __quad_t; +typedef __quad_t *__qaddr_t; +#else +typedef struct +{ + long val[2]; +} __quad_t; +typedef struct +{ + __u_long val[2]; +} __u_quad_t; +#endif +typedef int __dev_t; /* Type of device numbers. */ +typedef unsigned int __uid_t; /* Type of user identifications. */ +typedef unsigned int __gid_t; /* Type of group identifications. */ +typedef unsigned int __ino_t; /* Type of file serial numbers. */ +typedef unsigned int __mode_t; /* Type of file attribute bitmasks. */ +typedef unsigned short int __nlink_t; /* Type of file link counts. */ +typedef long int __off_t; /* Type of file sizes and offsets. */ +typedef int __pid_t; /* Type of process identifications. */ +typedef int __ssize_t; /* Type of a byte count, or error. */ +typedef __u_quad_t __fsid_t; /* Type of file system IDs. */ + +/* Everythin' else. */ +typedef long int __daddr_t; /* The type of a disk address. */ +typedef char *__caddr_t; +typedef long int __time_t; +typedef long int __swblk_t; /* Type of a swap block maybe? */ + +/* fd_set for select. */ + +/* Number of descriptors that can fit in an `fd_set'. */ +#define __FD_SETSIZE 256 + +/* It's easier to assume 8-bit bytes than to get CHAR_BIT. */ +#define __NFDBITS (sizeof (unsigned long int) * 8) +#define __FDELT(d) ((d) / __NFDBITS) +#define __FDMASK(d) (1 << ((d) % __NFDBITS)) + +typedef struct + { + /* Some braindead old software uses this member name. */ + unsigned long int fds_bits[(__FD_SETSIZE + (__NFDBITS - 1)) / __NFDBITS]; + } __fd_set; + +/* This line MUST be split! Otherwise m4 will not change it. */ +#define __FD_ZERO(set) \ + ((void) memset ((__ptr_t) (set), 0, sizeof (fd_set))) +#define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d)) +#define __FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d)) +#define __FD_ISSET(d, set) ((set)->fds_bits[__FDELT(d)] & __FDMASK(d)) + + +#endif /* gnu/types.h */ -- cgit 1.4.1