mirror of
git://sourceware.org/git/glibc.git
synced 2025-01-18 12:16:13 +08:00
Update.
1999-10-17 Ulrich Drepper <drepper@cygnus.com> * elf/elf.h: Add various platform and architecture extensions. * locale/lc-collate.c (_nl_postload_collate): Disable code for now. * locale/setlocale.c (setlocale): Don't call _nl_find_locale for LC_ALL. * socket/sys/socket.h: Remove K&R compatibility. 1999-10-16 Andreas Jaeger <aj@suse.de> * sysdeps/unix/sysv/linux/bits/in.h: Added struct in_pktinfo. 1999-10-15 Andreas Jaeger <aj@suse.de> * stdlib/Makefile (tests): Added tst-xpg-basename. * stdlib/tst-xpg-basename.c: New test file.
This commit is contained in:
parent
4a3792163e
commit
ef5d664596
20
ChangeLog
20
ChangeLog
@ -1,3 +1,23 @@
|
||||
1999-10-17 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* elf/elf.h: Add various platform and architecture extensions.
|
||||
|
||||
* locale/lc-collate.c (_nl_postload_collate): Disable code for now.
|
||||
* locale/setlocale.c (setlocale): Don't call _nl_find_locale for
|
||||
LC_ALL.
|
||||
|
||||
* socket/sys/socket.h: Remove K&R compatibility.
|
||||
|
||||
1999-10-16 Andreas Jaeger <aj@suse.de>
|
||||
|
||||
* sysdeps/unix/sysv/linux/bits/in.h: Added struct in_pktinfo.
|
||||
|
||||
1999-10-15 Andreas Jaeger <aj@suse.de>
|
||||
|
||||
* stdlib/Makefile (tests): Added tst-xpg-basename.
|
||||
|
||||
* stdlib/tst-xpg-basename.c: New test file.
|
||||
|
||||
1999-10-14 Cristian Gafton <gafton@redhat.com>
|
||||
|
||||
* string/bits/string2.h (__stpcpy_small): Make -pedantic shut up.
|
||||
|
52
elf/elf.h
52
elf/elf.h
@ -892,6 +892,9 @@ typedef struct
|
||||
|
||||
/* Motorola 68k specific definitions. */
|
||||
|
||||
/* Values for Elf32_Ehdr.e_flags. */
|
||||
#define EF_CPU32 0x00810000
|
||||
|
||||
/* m68k relocs. */
|
||||
|
||||
#define R_68K_NONE 0 /* No reloc */
|
||||
@ -946,9 +949,12 @@ typedef struct
|
||||
#define EF_SPARCV9_TSO 0
|
||||
#define EF_SPARCV9_PSO 1
|
||||
#define EF_SPARCV9_RMO 2
|
||||
#define EF_SPARC_LEDATA 0x800000 /* little endian data */
|
||||
#define EF_SPARC_EXT_MASK 0xFFFF00
|
||||
#define EF_SPARC_SUN_US1 0x000200
|
||||
#define EF_SPARC_HAL_R1 0x000400
|
||||
#define EF_SPARC_32PLUS 0x000100 /* generic V8+ features */
|
||||
#define EF_SPARC_SUN_US1 0x000200 /* Sun UltraSPARC1 extensions */
|
||||
#define EF_SPARC_HAL_R1 0x000400 /* HAL R1 extensions */
|
||||
#define EF_SPARC_SUN_US3 0x000800 /* Sun UltraSPARCIII extensions */
|
||||
|
||||
/* SPARC relocs. */
|
||||
|
||||
@ -1509,6 +1515,40 @@ typedef Elf32_Addr Elf32_Conflict;
|
||||
#define R_PARISC_LTOFF_TP16DF 231 /* 16 bits LT-TP-rel. address. */
|
||||
#define R_PARISC_HIRESERVE 255
|
||||
|
||||
/* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr. */
|
||||
|
||||
#define PT_HP_TLS (PT_LOOS + 0x0)
|
||||
#define PT_HP_CORE_NONE (PT_LOOS + 0x1)
|
||||
#define PT_HP_CORE_VERSION (PT_LOOS + 0x2)
|
||||
#define PT_HP_CORE_KERNEL (PT_LOOS + 0x3)
|
||||
#define PT_HP_CORE_COMM (PT_LOOS + 0x4)
|
||||
#define PT_HP_CORE_PROC (PT_LOOS + 0x5)
|
||||
#define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6)
|
||||
#define PT_HP_CORE_STACK (PT_LOOS + 0x7)
|
||||
#define PT_HP_CORE_SHM (PT_LOOS + 0x8)
|
||||
#define PT_HP_CORE_MMF (PT_LOOS + 0x9)
|
||||
#define PT_HP_PARALLEL (PT_LOOS + 0x10)
|
||||
#define PT_HP_FASTBIND (PT_LOOS + 0x11)
|
||||
#define PT_HP_OPT_ANNOT (PT_LOOS + 0x12)
|
||||
#define PT_HP_HSL_ANNOT (PT_LOOS + 0x13)
|
||||
#define PT_HP_STACK (PT_LOOS + 0x14)
|
||||
|
||||
#define PT_PARISC_ARCHEXT 0x70000000
|
||||
#define PT_PARISC_UNWIND 0x70000001
|
||||
|
||||
/* Legal values for p_flags field of Elf32_Phdr/Elf64_Phdr. */
|
||||
|
||||
#define PF_PARISC_SBP 0x08000000
|
||||
|
||||
#define PF_HP_PAGE_SIZE 0x00100000
|
||||
#define PF_HP_FAR_SHARED 0x00200000
|
||||
#define PF_HP_NEAR_SHARED 0x00400000
|
||||
#define PF_HP_CODE 0x01000000
|
||||
#define PF_HP_MODIFY 0x02000000
|
||||
#define PF_HP_LAZYSWAP 0x04000000
|
||||
#define PF_HP_SBP 0x08000000
|
||||
|
||||
|
||||
/* Alpha specific definitions. */
|
||||
|
||||
/* Legal values for e_flags field of Elf64_Ehdr. */
|
||||
@ -1566,6 +1606,14 @@ typedef Elf32_Addr Elf32_Conflict;
|
||||
|
||||
/* PowerPC specific declarations */
|
||||
|
||||
/* Values for Elf32/64_Ehdr.e_flags. */
|
||||
#define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag */
|
||||
|
||||
/* Cygnus local bits below */
|
||||
#define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag*/
|
||||
#define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib
|
||||
flag */
|
||||
|
||||
/* PowerPC relocations defined by the ABIs */
|
||||
#define R_PPC_NONE 0
|
||||
#define R_PPC_ADDR32 1 /* 32bit absolute address */
|
||||
|
@ -1,3 +1,7 @@
|
||||
1999-10-17 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* internals.h (PTHREAD_START_ARGS_INITIALIZER): Add cast.
|
||||
|
||||
1999-10-14 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* pthread.c (__pthread_initial_thread): Pass argument to
|
||||
|
@ -72,7 +72,8 @@ struct pthread_key_struct {
|
||||
};
|
||||
|
||||
|
||||
#define PTHREAD_START_ARGS_INITIALIZER(fct) { fct, NULL, {{0, }}, 0, { 0 } }
|
||||
#define PTHREAD_START_ARGS_INITIALIZER(fct) \
|
||||
{ (void *(*) (void *)) fct, NULL, {{0, }}, 0, { 0 } }
|
||||
|
||||
/* The type of thread descriptors */
|
||||
|
||||
|
@ -45,6 +45,8 @@ const u_int32_t *__collate_symbol_classeswc = _nl_C_LC_COLLATE_symbol_classes;
|
||||
void
|
||||
_nl_postload_collate (void)
|
||||
{
|
||||
#if 0
|
||||
/* XXX For now */
|
||||
#define paste(a,b) paste1(a,b)
|
||||
#define paste1(a,b) a##b
|
||||
|
||||
@ -61,4 +63,5 @@ _nl_postload_collate (void)
|
||||
__collate_symbol_hash = current (SYMB_HASH);
|
||||
__collate_symbol_strings = (const char *) current (SYMB_STR_POOL);
|
||||
__collate_symbol_classeswc = current (SYMB_CLASSWC);
|
||||
#endif
|
||||
}
|
||||
|
@ -305,26 +305,27 @@ setlocale (int category, const char *locale)
|
||||
|
||||
/* Load the new data for each category. */
|
||||
while (category-- > 0)
|
||||
{
|
||||
/* XXX hack. Remove when collation works. */
|
||||
if (category == LC_COLLATE)
|
||||
{
|
||||
newdata[category] = NULL;
|
||||
continue;
|
||||
}
|
||||
if (category != LC_ALL)
|
||||
{
|
||||
/* XXX hack. Remove when collation works. */
|
||||
if (category == LC_COLLATE)
|
||||
{
|
||||
newdata[category] = NULL;
|
||||
continue;
|
||||
}
|
||||
|
||||
newdata[category] = _nl_find_locale (locale_path, locale_path_len,
|
||||
category,
|
||||
&newnames[category]);
|
||||
newdata[category] = _nl_find_locale (locale_path, locale_path_len,
|
||||
category,
|
||||
&newnames[category]);
|
||||
|
||||
if (newdata[category] == NULL)
|
||||
break;
|
||||
if (newdata[category] == NULL)
|
||||
break;
|
||||
|
||||
/* We must not simply free a global locale since we have no
|
||||
control over the usage. So we mark it as un-deletable. */
|
||||
if (newdata[category]->usage_count != UNDELETABLE)
|
||||
newdata[category]->usage_count = UNDELETABLE;
|
||||
}
|
||||
/* We must not simply free a global locale since we have no
|
||||
control over the usage. So we mark it as un-deletable. */
|
||||
if (newdata[category]->usage_count != UNDELETABLE)
|
||||
newdata[category]->usage_count = UNDELETABLE;
|
||||
}
|
||||
|
||||
/* Create new composite name. */
|
||||
composite = (category >= 0
|
||||
|
@ -96,96 +96,99 @@ typedef union { __SOCKADDR_ALLTYPES
|
||||
/* Create a new socket of type TYPE in domain DOMAIN, using
|
||||
protocol PROTOCOL. If PROTOCOL is zero, one is chosen automatically.
|
||||
Returns a file descriptor for the new socket, or -1 for errors. */
|
||||
extern int socket __P ((int __domain, int __type, int __protocol));
|
||||
extern int socket (int __domain, int __type, int __protocol) __THROW;
|
||||
|
||||
/* Create two new sockets, of type TYPE in domain DOMAIN and using
|
||||
protocol PROTOCOL, which are connected to each other, and put file
|
||||
descriptors for them in FDS[0] and FDS[1]. If PROTOCOL is zero,
|
||||
one will be chosen automatically. Returns 0 on success, -1 for errors. */
|
||||
extern int socketpair __P ((int __domain, int __type, int __protocol,
|
||||
int __fds[2]));
|
||||
extern int socketpair (int __domain, int __type, int __protocol,
|
||||
int __fds[2]) __THROW;
|
||||
|
||||
/* Give the socket FD the local address ADDR (which is LEN bytes long). */
|
||||
extern int bind __P ((int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len));
|
||||
extern int bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
|
||||
__THROW;
|
||||
|
||||
/* Put the local address of FD into *ADDR and its length in *LEN. */
|
||||
extern int getsockname __P ((int __fd, __SOCKADDR_ARG __addr,
|
||||
socklen_t *__len));
|
||||
extern int getsockname (int __fd, __SOCKADDR_ARG __addr, socklen_t *__len)
|
||||
__THROW;
|
||||
|
||||
/* Open a connection on socket FD to peer at ADDR (which LEN bytes long).
|
||||
For connectionless socket types, just set the default address to send to
|
||||
and the only address from which to accept transmissions.
|
||||
Return 0 on success, -1 for errors. */
|
||||
extern int __connect __P ((int __fd,
|
||||
__CONST_SOCKADDR_ARG __addr, socklen_t __len));
|
||||
extern int connect __P ((int __fd,
|
||||
__CONST_SOCKADDR_ARG __addr, socklen_t __len));
|
||||
extern int __connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
|
||||
__THROW;
|
||||
extern int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
|
||||
__THROW;
|
||||
|
||||
/* Put the address of the peer connected to socket FD into *ADDR
|
||||
(which is *LEN bytes long), and its actual length into *LEN. */
|
||||
extern int getpeername __P ((int __fd, __SOCKADDR_ARG __addr,
|
||||
socklen_t *__len));
|
||||
extern int getpeername (int __fd, __SOCKADDR_ARG __addr, socklen_t *__len)
|
||||
__THROW;
|
||||
|
||||
|
||||
/* Send N bytes of BUF to socket FD. Returns the number sent or -1. */
|
||||
extern int __send __P ((int __fd, __const __ptr_t __buf, size_t __n,
|
||||
int __flags));
|
||||
extern int send __P ((int __fd, __const __ptr_t __buf, size_t __n,
|
||||
int __flags));
|
||||
extern int __send (int __fd, __const void *__buf, size_t __n, int __flags)
|
||||
__THROW;
|
||||
extern int send (int __fd, __const void *__buf, size_t __n, int __flags)
|
||||
__THROW;
|
||||
|
||||
/* Read N bytes into BUF from socket FD.
|
||||
Returns the number read or -1 for errors. */
|
||||
extern int recv __P ((int __fd, __ptr_t __buf, size_t __n, int __flags));
|
||||
extern int recv (int __fd, void *__buf, size_t __n, int __flags)
|
||||
__THROW;
|
||||
|
||||
/* Send N bytes of BUF on socket FD to peer at address ADDR (which is
|
||||
ADDR_LEN bytes long). Returns the number sent, or -1 for errors. */
|
||||
extern int sendto __P ((int __fd, __const __ptr_t __buf, size_t __n,
|
||||
int __flags, __CONST_SOCKADDR_ARG __addr,
|
||||
socklen_t __addr_len));
|
||||
extern int sendto (int __fd, __const void *__buf, size_t __n,
|
||||
int __flags, __CONST_SOCKADDR_ARG __addr,
|
||||
socklen_t __addr_len) __THROW;
|
||||
|
||||
/* Read N bytes into BUF through socket FD.
|
||||
If ADDR is not NULL, fill in *ADDR_LEN bytes of it with tha address of
|
||||
the sender, and store the actual size of the address in *ADDR_LEN.
|
||||
Returns the number of bytes read or -1 for errors. */
|
||||
extern int recvfrom __P ((int __fd, __ptr_t __buf, size_t __n, int __flags,
|
||||
__SOCKADDR_ARG __addr, socklen_t *__addr_len));
|
||||
extern int recvfrom (int __fd, void *__buf, size_t __n, int __flags,
|
||||
__SOCKADDR_ARG __addr, socklen_t *__addr_len) __THROW;
|
||||
|
||||
|
||||
/* Send a message described MESSAGE on socket FD.
|
||||
Returns the number of bytes sent, or -1 for errors. */
|
||||
extern int sendmsg __P ((int __fd, __const struct msghdr *__message,
|
||||
int __flags));
|
||||
extern int sendmsg (int __fd, __const struct msghdr *__message, int __flags)
|
||||
__THROW;
|
||||
|
||||
/* Receive a message as described by MESSAGE from socket FD.
|
||||
Returns the number of bytes read or -1 for errors. */
|
||||
extern int recvmsg __P ((int __fd, struct msghdr *__message, int __flags));
|
||||
extern int recvmsg (int __fd, struct msghdr *__message, int __flags)
|
||||
__THROW;
|
||||
|
||||
|
||||
/* Put the current value for socket FD's option OPTNAME at protocol level LEVEL
|
||||
into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's
|
||||
actual length. Returns 0 on success, -1 for errors. */
|
||||
extern int getsockopt __P ((int __fd, int __level, int __optname,
|
||||
__ptr_t __optval, socklen_t *__optlen));
|
||||
extern int getsockopt (int __fd, int __level, int __optname,
|
||||
void *__optval, socklen_t *__optlen) __THROW;
|
||||
|
||||
/* Set socket FD's option OPTNAME at protocol level LEVEL
|
||||
to *OPTVAL (which is OPTLEN bytes long).
|
||||
Returns 0 on success, -1 for errors. */
|
||||
extern int setsockopt __P ((int __fd, int __level, int __optname,
|
||||
__const __ptr_t __optval, socklen_t __optlen));
|
||||
extern int setsockopt (int __fd, int __level, int __optname,
|
||||
__const void *__optval, socklen_t __optlen) __THROW;
|
||||
|
||||
|
||||
/* Prepare to accept connections on socket FD.
|
||||
N connection requests will be queued before further requests are refused.
|
||||
Returns 0 on success, -1 for errors. */
|
||||
extern int listen __P ((int __fd, unsigned int __n));
|
||||
extern int listen (int __fd, unsigned int __n) __THROW;
|
||||
|
||||
/* Await a connection on socket FD.
|
||||
When a connection arrives, open a new socket to communicate with it,
|
||||
set *ADDR (which is *ADDR_LEN bytes long) to the address of the connecting
|
||||
peer and *ADDR_LEN to the address's actual length, and return the
|
||||
new socket's descriptor, or -1 for errors. */
|
||||
extern int accept __P ((int __fd, __SOCKADDR_ARG __addr,
|
||||
socklen_t *__addr_len));
|
||||
extern int accept (int __fd, __SOCKADDR_ARG __addr, socklen_t *__addr_len)
|
||||
__THROW;
|
||||
|
||||
/* Shut down all or part of the connection open on socket FD.
|
||||
HOW determines what to shut down:
|
||||
@ -193,13 +196,13 @@ extern int accept __P ((int __fd, __SOCKADDR_ARG __addr,
|
||||
SHUT_WR = No more transmissions;
|
||||
SHUT_RDWR = No more receptions or transmissions.
|
||||
Returns 0 on success, -1 for errors. */
|
||||
extern int shutdown __P ((int __fd, int __how));
|
||||
extern int shutdown (int __fd, int __how) __THROW;
|
||||
|
||||
|
||||
/* FDTYPE is S_IFSOCK or another S_IF* macro defined in <sys/stat.h>;
|
||||
returns 1 if FD is open on an object of the indicated type, 0 if not,
|
||||
or -1 for errors (setting errno). */
|
||||
extern int isfdtype __P ((int __fd, int __fdtype));
|
||||
extern int isfdtype (int __fd, int __fdtype) __THROW;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
|
@ -51,7 +51,8 @@ routines := \
|
||||
|
||||
distribute := exit.h grouping.h abort-instr.h isomac.c
|
||||
tests := tst-strtol tst-strtod testmb testrand testsort testdiv \
|
||||
test-canon test-canon2 tst-strtoll tst-environ
|
||||
test-canon test-canon2 tst-strtoll tst-environ \
|
||||
tst-xpg-basename
|
||||
|
||||
|
||||
# Several mpn functions from GNU MP are used by the strtod function.
|
||||
|
65
stdlib/tst-xpg-basename.c
Normal file
65
stdlib/tst-xpg-basename.c
Normal file
@ -0,0 +1,65 @@
|
||||
/* Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Jaeger <aj@suse.de>, 1999.
|
||||
|
||||
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., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <libgen.h>
|
||||
#include <stdio.h>
|
||||
|
||||
static struct
|
||||
{
|
||||
const char *path;
|
||||
const char *file;
|
||||
} tests [] =
|
||||
{
|
||||
{ "/dir/file", "file" },
|
||||
{ "file", "file"},
|
||||
{ "/dir/file///", "file" },
|
||||
{ "../file", "file" },
|
||||
{ "/", "/" },
|
||||
{ NULL, "."},
|
||||
{ "", "."}
|
||||
};
|
||||
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
int i = 0;
|
||||
int errors = 0;
|
||||
char path[1024];
|
||||
char *file;
|
||||
|
||||
for (i = 0; i < sizeof (tests) / sizeof (tests [0]); ++i)
|
||||
{
|
||||
if (tests [i].path == NULL)
|
||||
file = __xpg_basename (NULL);
|
||||
else
|
||||
{
|
||||
strcpy (path, tests [i].path);
|
||||
file = __xpg_basename (path);
|
||||
}
|
||||
if (strcmp (file, tests [i].file))
|
||||
{
|
||||
printf ("Test with `%s' failed: Result is: `%s'.\n",
|
||||
(tests [i].path == NULL ? "NULL" : tests [i].path), file);
|
||||
errors = 1;
|
||||
}
|
||||
}
|
||||
|
||||
exit (errors);
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991,92,93,94,95,96,97,98 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991,92,93,94,95,96,97,98,99 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
|
||||
@ -84,6 +84,14 @@ struct ip_mreqn
|
||||
int imr_ifindex; /* Interface index */
|
||||
};
|
||||
|
||||
/* Structure used for IP_PKTINFO. */
|
||||
struct in_pktinfo
|
||||
{
|
||||
int ipi_ifindex; /* Interface index */
|
||||
struct in_addr ipi_spec_dst; /* Routing destination address */
|
||||
struct in_addr ipi_addr; /* Header destination address */
|
||||
};
|
||||
|
||||
/* Options for use with `getsockopt' and `setsockopt' at the IPv6 level.
|
||||
The first word in the comment at the right is the data type used;
|
||||
"bool" means a boolean value stored in an `int'. */
|
||||
|
Loading…
Reference in New Issue
Block a user