glibc/nss/nss_files/files-ethers.c
Roland McGrath ffee131630 Tue Jul 2 10:44:37 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* pwd/fgetpwent.c: Don't include ../nss/nss_files/files-parse.c to
	define parse_line function.
	(parse_line): #define to _nss_files_parse_pwent and
	add extern decl for that.

	* nss/nss_files/files-XXX.c (internal_getent): Return
	NSS_STATUS_TRYAGAIN for ERANGE error.

	* sysdeps/i386/strtok.S (LreturnNULL): Save current state ptr instead
	of null, so next round returns null again instead of bombing.  Fix
	from drepper.

	* nss/nss_files/files-parse.c (LINE_PARSER): Take new first arg EOLSET.
	Remove ; after `ENTDATA_DECL (data)'.
	Truncate line at strpbrk (line, EOLSET "\n").
	(ENTDATA_DECL): Put ; at end.
	(MIDLINE_COMMENTS): Macro removed.
	* nss/nss_files/files-ethers.c: Pass new argument.
	* nss/nss_files/files-hosts.c: Likewise.
	* nss/nss_files/files-network.c: Likewise.
	* nss/nss_files/files-parse.c: Likewise.
	* nss/nss_files/files-proto.c: Likewise.
	* nss/nss_files/files-rpc.c: Likewise.
	* nss/nss_files/files-service.c: Likewise.
	* grp/fgetgrent.c: Likewise.
	* pwd/fgetpwent.c: Likewise.
	* nss/nss_files/files-pwd.c: Get parse_line with extern decl, since
	fgetpwent.c already defines it.
	* nss/nss_files/files-grp.c: Likewise.

	* elf/dl-load.c (_dl_map_object): Use any object with matching l_name
	as well as any matching with l_libname.  Fix DT_SONAME lookup to use
	string table properly.

	* elf/rtld.c (dl_main): Set _dl_rtld_map.l_name from _dl_argv[0] when
	invoked directly, and l_libname from that if PT_INTERP missing.
	Set l_name from l_libname only if not set from argv.

	* time/europe, time/northamerica: Updated from ADO 96i.

	* stdio-common/tst-ungetc.c: Include unistd.h.
1996-07-02 17:43:35 +00:00

73 lines
1.9 KiB
C

/* Copyright (C) 1996 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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <string.h>
#include <netinet/if_ether.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;
};
struct etherent_data {};
#define ENTNAME etherent
#define DATAFILE "/etc/ethers"
#include "files-parse.c"
LINE_PARSER
("#",
/* Read the ethernet address: 6 x 8bit hexadecimal number. */
{
size_t cnt;
for (cnt = 0; cnt < 6; ++cnt)
{
unsigned int number;
if (cnt < 5)
INT_FIELD (number, ISCOLON , 0, 16, (unsigned int))
else
INT_FIELD (number, isspace, 0, 16, (unsigned int))
if (number > 0xff)
return 0;
result->e_addr.ether_addr_octet[cnt] = number;
}
};
STRING_FIELD (result->e_name, isspace, 1);
)
#include "files-XXX.c"
DB_LOOKUP (hostton,
{
if (strcmp (result->e_name, name) == 0)
break;
}, const char *name)
DB_LOOKUP (ntohost,
{
if (memcmp (&result->e_addr, addr,
sizeof (struct ether_addr)) == 0)
break;
}, struct ether_addr *addr)