diff options
| author | Roland McGrath <roland@gnu.org> | 1996-06-28 08:56:59 +0000 |
|---|---|---|
| committer | Roland McGrath <roland@gnu.org> | 1996-06-28 08:56:59 +0000 |
| commit | 6dbe2837567f528faa015fd0cf1536201dde5ffd (patch) | |
| tree | d57cdf3a36d554391ae971f2f356569e85c3a1c1 | |
| parent | 47ce6a308c73d2f2bd367d4609d1bea30c9eb596 (diff) | |
| download | glibc-6dbe2837567f528faa015fd0cf1536201dde5ffd.tar.xz glibc-6dbe2837567f528faa015fd0cf1536201dde5ffd.zip | |
Fri Jun 28 02:41:08 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>cvs/libc-960628
* nss/Makefile (databases): New variable.
(routines, libnss_files-routines): Use it.
(subdir-dirs): Compute from $(services).
* sysdeps/unix/sysv/linux/syscalls.list (create_module, delete_module,
init_module, klogctl): Use EXTRA in the "caller" column so these get
added to unix-extra-syscalls and thus compiled in misc.
* string/Makefile (routines): Add strndup.
* string/strndup.c: New file.
* string/string.h: Declare strndup.
(strndupa): New macro.
* string/string.h: Declare __strdup.
* string/strdup.c: Deansideclized. Define __ name and weak alias.
* string/string.h: Don't define memccpy as macro for [__OPTIMIZE__].
Thu Jun 27 23:43:22 1996 Richard Henderson <rth@tamu.edu>
* sysdeps/alpha/dl-machine.h (elf_machine_rela): The Alpha's
address-of operation and plt format conspire to require all
dynamic relocs to be resolved to actual symbols not plt entries.
Thu Jun 27 02:49:28 1996 Ulrich Drepper <drepper@cygnus.com>
* catgets/gencat.c: Add casts to avoid signed<->unsigned warnings.
* grp/initgroups.c (initgroups): De-ansi-fy.
Move declaration of NGROUPS and GROUPS outside #if so that
the code compiles for NGROUPS_MAX != 0.
* inet/Makefile (headers): Add netinet/ether.h and netinet/if_ether.h.
(routines): Add ether_aton, ether_aton_r, ether_hton, ether_line,
ether_ntoa, ether_ntoa_r, and ether_ntoh.
* inet/ether_aton.c, inet/ether_aton_r.c, inet/ether_hton.c,
inet/ether_line.c, inet/ether_ntoa.c, inet/ether_ntoa_r.c,
inet/ether_ntoh.c: New files. Implementation of functions to
handle Ethernet address to host mapping.
* inet/netinet/ether.h: New file. Declare ether_* functions.
* netinet/ether.h: Wrapper around inet/netinet/ether.h for glibc
compilation.
* nss/ethers-lookup.c: New file. Lookup function for ethers database.
* nss/Makefile (routines): Add ethers-lookup.
(libnss_files-routines): Add files-ethers.
* nss/getXXent_r.c: Don't define set*ent and end*ent function
with _r suffix.
* nss/nss_files/files-XXX.c (internal_endent): Don't reset
KEEP_STREAM every time called.
(_nss_files_end): Reset KEEP_STREAM here instead.
(internal_getent): If STREAM == NULL try to open instead of
signalling error.
Use cast to prevent warning.
Terminate read line in case the buffer is too small.
* nss/nss_files/files-ethers.c: New file. Implementation of
Ethernet adress<->hostname lookup through files interface.
* stdlib/mbstowcs.c: Define based on mbsrtowcs().
* stdlib/mbtowc.c: Define based on mbrtowc().
* stdlib/wcstombs.c: Define based on wcsrtombs().
* stdlib/wctomb.c: Define based on wcrtomb().
* sunrpc/xdr.c (xdr_u_int): Avoid bogus call to
unexpected_sizes_in_xdr_u_int.
* sysdeps/generic/netinet/if_ether.h: New file. Generic declaration
of `struct ether_addr'.
* sysdeps/unix/sysv/linux/netinet/if_ether.h: New file. Linux specific
declaration of `struct ether_addr'.
* wcsmbs/mbrtowc.c: Handle case where argument PS is NULL.
* wcsmbs/mbsrtowcs.c: Ditto.
* wcsmbs/wcrtomb.c: Ditto.
* wcsmbs/wcsrtombs.c: Ditto.
* wcsmbs/mbsinit.c: Prepare for PS being NULL.
36 files changed, 904 insertions, 260 deletions
@@ -1,3 +1,85 @@ +Fri Jun 28 02:41:08 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> + + * nss/Makefile (databases): New variable. + (routines, libnss_files-routines): Use it. + (subdir-dirs): Compute from $(services). + + * sysdeps/unix/sysv/linux/syscalls.list (create_module, delete_module, + init_module, klogctl): Use EXTRA in the "caller" column so these get + added to unix-extra-syscalls and thus compiled in misc. + + * string/Makefile (routines): Add strndup. + * string/strndup.c: New file. + * string/string.h: Declare strndup. + (strndupa): New macro. + + * string/string.h: Declare __strdup. + * string/strdup.c: Deansideclized. Define __ name and weak alias. + + * string/string.h: Don't define memccpy as macro for [__OPTIMIZE__]. + +Thu Jun 27 23:43:22 1996 Richard Henderson <rth@tamu.edu> + + * sysdeps/alpha/dl-machine.h (elf_machine_rela): The Alpha's + address-of operation and plt format conspire to require all + dynamic relocs to be resolved to actual symbols not plt entries. + +Thu Jun 27 02:49:28 1996 Ulrich Drepper <drepper@cygnus.com> + + * catgets/gencat.c: Add casts to avoid signed<->unsigned warnings. + + * grp/initgroups.c (initgroups): De-ansi-fy. + Move declaration of NGROUPS and GROUPS outside #if so that + the code compiles for NGROUPS_MAX != 0. + + * inet/Makefile (headers): Add netinet/ether.h and netinet/if_ether.h. + (routines): Add ether_aton, ether_aton_r, ether_hton, ether_line, + ether_ntoa, ether_ntoa_r, and ether_ntoh. + * inet/ether_aton.c, inet/ether_aton_r.c, inet/ether_hton.c, + inet/ether_line.c, inet/ether_ntoa.c, inet/ether_ntoa_r.c, + inet/ether_ntoh.c: New files. Implementation of functions to + handle Ethernet address to host mapping. + * inet/netinet/ether.h: New file. Declare ether_* functions. + * netinet/ether.h: Wrapper around inet/netinet/ether.h for glibc + compilation. + * nss/ethers-lookup.c: New file. Lookup function for ethers database. + * nss/Makefile (routines): Add ethers-lookup. + (libnss_files-routines): Add files-ethers. + + * nss/getXXent_r.c: Don't define set*ent and end*ent function + with _r suffix. + + * nss/nss_files/files-XXX.c (internal_endent): Don't reset + KEEP_STREAM every time called. + (_nss_files_end): Reset KEEP_STREAM here instead. + (internal_getent): If STREAM == NULL try to open instead of + signalling error. + Use cast to prevent warning. + Terminate read line in case the buffer is too small. + + * nss/nss_files/files-ethers.c: New file. Implementation of + Ethernet adress<->hostname lookup through files interface. + + * stdlib/mbstowcs.c: Define based on mbsrtowcs(). + * stdlib/mbtowc.c: Define based on mbrtowc(). + * stdlib/wcstombs.c: Define based on wcsrtombs(). + * stdlib/wctomb.c: Define based on wcrtomb(). + + * sunrpc/xdr.c (xdr_u_int): Avoid bogus call to + unexpected_sizes_in_xdr_u_int. + + * sysdeps/generic/netinet/if_ether.h: New file. Generic declaration + of `struct ether_addr'. + * sysdeps/unix/sysv/linux/netinet/if_ether.h: New file. Linux specific + declaration of `struct ether_addr'. + + * wcsmbs/mbrtowc.c: Handle case where argument PS is NULL. + * wcsmbs/mbsrtowcs.c: Ditto. + * wcsmbs/wcrtomb.c: Ditto. + * wcsmbs/wcsrtombs.c: Ditto. + + * wcsmbs/mbsinit.c: Prepare for PS being NULL. + Wed Jun 26 13:19:35 1996 Miles Bader <miles@gnu.ai.mit.edu> * hurd/get-host.c <fcntl.h>: New include. diff --git a/catgets/gencat.c b/catgets/gencat.c index 4dca43a5c8..37b73eaf59 100644 --- a/catgets/gencat.c +++ b/catgets/gencat.c @@ -310,7 +310,7 @@ read_input_file (struct catalog *current, const char *fname) else if (strncmp (&this_line[1], "set", 3) == 0) { int cnt = sizeof ("cnt"); - size_t set_number; + int set_number; const char *symbol = NULL; while (isspace (this_line[cnt])) ++cnt; @@ -987,7 +987,7 @@ read_old (struct catalog *catalog, const char *file_name) /* No message in this slot. */ continue; - if (old_cat_obj.name_ptr[cnt * 3 + 0] - 1 != last_set) + if (old_cat_obj.name_ptr[cnt * 3 + 0] - 1 != (u_int32_t) last_set) { last_set = old_cat_obj.name_ptr[cnt * 3 + 0] - 1; set = find_set (catalog, old_cat_obj.name_ptr[cnt * 3 + 0] - 1); @@ -997,14 +997,14 @@ read_old (struct catalog *catalog, const char *file_name) message = set->messages; while (message != NULL) { - if (message->number >= old_cat_obj.name_ptr[cnt * 3 + 1]) + if ((u_int32_t) message->number >= old_cat_obj.name_ptr[cnt * 3 + 1]) break; last = message; message = message->next; } if (message == NULL - || message->number > old_cat_obj.name_ptr[cnt * 3 + 1]) + || (u_int32_t) message->number > old_cat_obj.name_ptr[cnt * 3 + 1]) { /* We have found a message which is not yet in the catalog. Insert it at the right position. */ diff --git a/grp/initgroups.c b/grp/initgroups.c index a700557924..73c15c6479 100644 --- a/grp/initgroups.c +++ b/grp/initgroups.c @@ -16,7 +16,7 @@ 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. */ -#include <ansidecl.h> +#include <alloca.h> #include <unistd.h> #include <string.h> #include <grp.h> @@ -28,8 +28,9 @@ Cambridge, MA 02139, USA. */ by reading the group database and using all groups of which USER is a member. Also include GROUP. */ int -DEFUN(initgroups, (user, group), - CONST char *user AND gid_t group) +initgroups (user, group) + const char *user; + gid_t group; { #if defined (NGROUPS_MAX) && NGROUPS_MAX == 0 @@ -40,21 +41,23 @@ DEFUN(initgroups, (user, group), struct group *g; register size_t n; + size_t ngroups; + gid_t *groups; #ifdef NGROUPS_MAX - gid_t groups[NGROUPS_MAX]; +# define limit NGROUPS_MAX + + ngroups = limit; #else long int limit = sysconf (_SC_NGROUPS_MAX); - gid_t *groups; - size_t ngroups; if (limit > 0) ngroups = limit; else /* No fixed limit on groups. Pick a starting buffer size. */ ngroups = 16; +#endif groups = __alloca (ngroups * sizeof *groups); -#endif setgrent (); diff --git a/inet/Makefile b/inet/Makefile index da300c7376..197e9d03a4 100644 --- a/inet/Makefile +++ b/inet/Makefile @@ -21,7 +21,8 @@ # subdir := inet -headers := netinet/in.h $(wildcard arpa/*.h protocols/*.h) +headers := netinet/ether.h netinet/in.h netinet/if_ether.h \ + $(wildcard arpa/*.h protocols/*.h) routines := ntohl ntohs htonl htons \ inet_lnaof inet_mkadr \ @@ -35,6 +36,8 @@ routines := ntohl ntohs htonl htons \ getservent_r \ getrpcent getrpcbyname getrpcbynumber \ getrpcent_r getrpcbyname_r getrpcbynumber_r \ + ether_aton ether_aton_r ether_hton ether_line \ + ether_ntoa ether_ntoa_r ether_ntoh \ rcmd rexec ruserpass # No warnings about losing BSD code. diff --git a/inet/ether_aton.c b/inet/ether_aton.c new file mode 100644 index 0000000000..eb27b244d9 --- /dev/null +++ b/inet/ether_aton.c @@ -0,0 +1,30 @@ +/* Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. +Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. + +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 <netinet/ether.h> +#include <netinet/if_ether.h> + + +struct ether_addr * +ether_aton (const char *asc) +{ + struct ether_addr result; + + return ether_aton_r (asc, &result); +} diff --git a/inet/ether_aton_r.c b/inet/ether_aton_r.c new file mode 100644 index 0000000000..4b38f034cc --- /dev/null +++ b/inet/ether_aton_r.c @@ -0,0 +1,63 @@ +/* Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. +Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. + +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 <ctype.h> +#include <stdlib.h> +#include <netinet/ether.h> +#include <netinet/if_ether.h> + + +struct ether_addr * +ether_aton_r (const char *asc, struct ether_addr *addr) +{ + size_t cnt; + + for (cnt = 0; cnt < 6; ++cnt) + { + unsigned int number; + char ch; + + ch = tolower (*asc++); + if ((ch < '0' || ch > '9') && (ch < 'a' || ch > 'f')) + return NULL; + number = isdigit (ch) ? (ch - '0') : (ch - 'a' + 10); + + ch = tolower (*asc); + if ((cnt < 5 && ch != ':') || (cnt == 5 && ch != '\0' && !isspace (ch))) + { + ++asc; + if ((ch < '0' || ch > '9') && (ch < 'a' || ch > 'f')) + return NULL; + number <<= 4; + number = isdigit (ch) ? (ch - '0') : (ch - 'a' + 10); + + ch = *asc; + if (cnt < 5 && ch != ':') + return NULL; + } + + /* Store result. */ + addr->ether_addr_octet[cnt] = (unsigned char) number; + + /* Skip ':'. */ + ++asc; + } + + return addr; +} diff --git a/inet/ether_hton.c b/inet/ether_hton.c new file mode 100644 index 0000000000..fb62d2dab5 --- /dev/null +++ b/inet/ether_hton.c @@ -0,0 +1,82 @@ +/* Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. +Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. + +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 <netinet/ether.h> +#include <netinet/if_ether.h> + +#include "../nss/nsswitch.h" + +/* Because the `ethers' lookup does not fit so well in the scheme so + we define a dummy struct here which helps us to use the available + functions. */ +struct etherent +{ + const char *e_name; + struct ether_addr e_addr; +}; + + +/* Type of the lookup function we need here. */ +typedef int (*lookup_function) (const char *, struct etherent *, char *, int); + + +int +ether_hostton (const char *hostname, struct ether_addr *addr) +{ + static service_user *startp = NULL; + static lookup_function start_fct; + service_user *nip; + lookup_function fct; + int no_more; + int result; + enum nss_status status = NSS_STATUS_UNAVAIL; + struct etherent etherent; + + if (startp == NULL) + { + no_more = __nss_ethers_lookup (&nip, "gethostton_r", (void **) &fct); + if (no_more) + startp = (service_user *) -1; + else + { + startp = nip; + start_fct = fct; + } + } + else + { + fct = start_fct; + no_more = (nip = startp) == (service_user *) -1; + } + + while (no_more == 0) + { + char buffer[1024]; + + status = (*fct) (hostname, ðerent, buffer, sizeof buffer); + + no_more = __nss_next (&nip, "gethostton_r", (void **) &fct, status, 0); + } + + if (status == NSS_STATUS_SUCCESS) + memcpy (addr, etherent.e_addr.ether_addr_octet, + sizeof (struct ether_add |
