update from main archive 961020

Mon Oct 21 01:32:36 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/rtld.c (dl_main): Move initialization of `_dl_starting_up'
	to beginning of function.  So libc functions can use this flag.
	* sysdeps/generic/_strerror.c: Don't use dgettext for message
	translation while `_dl_starting_up' is nonzero.

	* elf/dl-deps.c (_dl_map_object_deps): Add new parameter
 	TRACE_MODE.
	Pass parameter value to _dl_map_object.
	* elf/dl-load (_dl_map_object): Add new parameter TRACE_MODE.
	If TRACE_MODE is nonzero don#t signal error when shared lib
	is not found.  Instead create fake entry for link map.
	* dl-open.c (dl-open): Pass 0 for new argument to _dl_map_object.
	* dl-runtime.c (_dl_object_relocation_scope): Pass 0 for new
	argument to _dl_map_object_deps.
	* elf/link.h: Add new parameter TRACE_MODE for prototypes of
	_dl_map_object and _dl_map_object_deps.
	* elf/rtld.c (dl_main): Pass 0 for new argument to _dl_map_object
	and _dl_map_object_deps.
	When mode == trace test for l_opencount == 0 before printing
	link information since this means the lib is not found.

Sun Oct 20 22:19:58 1996  Ulrich Drepper  <drepper@cygnus.com>

	* rpm/template: Add INSTALL to %doc line to follow copyright
	restrictions which demand the distribution of the copyright
	messages in INSTALL even for binary distributions.

	* features.h: Rename to...
	* features.h.in: ...this.  Change value of __GNU_LIBRARY__ to 2
	(for major version numberof package) and add __GNU_LIBRARY_MINOR__
	and __GNU_LIBRARY_INTERFACE__.
	* Makefile ($(objpfx)features.h): New rule to generate features.h
	from template features.h.in.

	* sysdeps/unix/sysv/linux/getsysstats.c: Include <paths.h>.

Sun Oct 20 00:00:13 1996  Richard Henderson  <rth@tamu.edu>

	* locale/programs/linereader.c (lr_open): Cast away const before free.
	(lr_close): Likewise.

	* misc/mntent.h: Move _PATH_MNTTAB & _PATH_MOUNTED to paths.h.
	* misc/paths.h: Move to ...
	* sysdeps/generic/paths.h: ... here.
	* paths.h: Remove.
	* sysdeps/unix/sysv/linux/paths.h: New file.  Correct _PATH_STDPATH,
	_PATH_MAILDIR, _PATH_MOUNTED, _PATH_UNIX to comply with the fsstd.

	* nss/nss_db/db-netgrp.h: Include <string.h>.

	* stdio-common/psignal.c: De-ansidecl-ify.  Allow NULL entries in
	_sys_siglist, which result in the "Unknown signal" message.
	* string/strsignal.c: Likewise.
	* sysdeps/generic/Makefile [stdio-common]: If $(inhibit-siglist),
	don't auto-generate siglist.c.
	* sysdeps/unix/sysv/linux/Makefile [stdio-common]: Set inhibit-siglist.
	* sysdeps/unix/sysv/linux/siglist.c: New file.  Not needing to
	autogenerate makes bootstrapping and cross-compiling much easier.
	* sysdeps/unix/sysv/linux/siglist.h: New file.

	* stdlib/longlong.h: Prototype __udiv_qrnnd.

	* sysdeps/unix/sysv/linux/alpha/Makefile (sysdep_headers): Remove
	sys/io.h.  It is already added in .../linux/Makefile.

	* sysdeps/unix/sysv/linux/alpha/sigaction.h: New file.
	* sysdeps/unix/sysv/linux/alpha/signum.h: New file.
	* sysdeps/unix/sysv/linux/alpha/statbuf.h: New file.

Sun Oct 20 17:17:12 1996  Ulrich Drepper  <drepper@cygnus.com>

	Add implementation of POSIX.1g function getaddrinfo.
	* posix/Makefile (routines): Add getaddrinfo.
	* sysdeps/posix/getaddrinfo.c.: New file.  Add implementation by
 	Craig Metz.
	* sysdeps/stub/getaddrinfo.c: New file.  Stub implementation.
	* resolv/netdb.h [__USE_POSIX]: Add getaddrinfo prototypes and
	related constants and structures.

Sun Oct 20 13:02:34 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/stub/lockfile.c: Rename functions to __internal_*.
	Make all old names weak alises so that they can be replaced
	by libpthread.

	* stdio-common/vfprintf.c: Only declare __flockfile and __funlockfile
	for !USE_IN_LIBIO.
	[USE_IN_LIBIO]: Call _IO_flockfile and _IO_funlockfile instead of
	__flockfile and __funlockfile.
	Reported by NIIBE Yutaka.

	* crypt/md5.c: Change form of copyright message according to GNITS
	rules.
	Add warning for requirement on RESBUF parameter for `md5_finish_ctx'
	and `md5_read_ctx' function.
	* crypt/md5.h: Likewise.

	* grp/testgrp.c: Don't use perror for error cases since getgr* and
	getpw* functions do not return usable error codes.

Sun Oct 19 23:05:32 1996  Jim Meyering  <meyering@asic.sc.ti.com>

	* crypt/md5.c (md5_process_bytes): Used casting for pointer
 	arithmetic.

Sun Oct 20 03:53:23 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sunrpc/Makefile (others): Remove portmap here, too.
This commit is contained in:
Ulrich Drepper 1996-10-21 01:26:31 +00:00
parent 8145a97443
commit 46ec036de6
38 changed files with 1313 additions and 104 deletions

111
ChangeLog
View File

@ -1,3 +1,114 @@
Mon Oct 21 01:32:36 1996 Ulrich Drepper <drepper@cygnus.com>
* elf/rtld.c (dl_main): Move initialization of `_dl_starting_up'
to beginning of function. So libc functions can use this flag.
* sysdeps/generic/_strerror.c: Don't use dgettext for message
translation while `_dl_starting_up' is nonzero.
* elf/dl-deps.c (_dl_map_object_deps): Add new parameter
TRACE_MODE.
Pass parameter value to _dl_map_object.
* elf/dl-load (_dl_map_object): Add new parameter TRACE_MODE.
If TRACE_MODE is nonzero don#t signal error when shared lib
is not found. Instead create fake entry for link map.
* dl-open.c (dl-open): Pass 0 for new argument to _dl_map_object.
* dl-runtime.c (_dl_object_relocation_scope): Pass 0 for new
argument to _dl_map_object_deps.
* elf/link.h: Add new parameter TRACE_MODE for prototypes of
_dl_map_object and _dl_map_object_deps.
* elf/rtld.c (dl_main): Pass 0 for new argument to _dl_map_object
and _dl_map_object_deps.
When mode == trace test for l_opencount == 0 before printing
link information since this means the lib is not found.
Sun Oct 20 22:19:58 1996 Ulrich Drepper <drepper@cygnus.com>
* rpm/template: Add INSTALL to %doc line to follow copyright
restrictions which demand the distribution of the copyright
messages in INSTALL even for binary distributions.
* features.h: Rename to...
* features.h.in: ...this. Change value of __GNU_LIBRARY__ to 2
(for major version numberof package) and add __GNU_LIBRARY_MINOR__
and __GNU_LIBRARY_INTERFACE__.
* Makefile ($(objpfx)features.h): New rule to generate features.h
from template features.h.in.
* sysdeps/unix/sysv/linux/getsysstats.c: Include <paths.h>.
Sun Oct 20 00:00:13 1996 Richard Henderson <rth@tamu.edu>
* locale/programs/linereader.c (lr_open): Cast away const before free.
(lr_close): Likewise.
* misc/mntent.h: Move _PATH_MNTTAB & _PATH_MOUNTED to paths.h.
* misc/paths.h: Move to ...
* sysdeps/generic/paths.h: ... here.
* paths.h: Remove.
* sysdeps/unix/sysv/linux/paths.h: New file. Correct _PATH_STDPATH,
_PATH_MAILDIR, _PATH_MOUNTED, _PATH_UNIX to comply with the fsstd.
* nss/nss_db/db-netgrp.h: Include <string.h>.
* stdio-common/psignal.c: De-ansidecl-ify. Allow NULL entries in
_sys_siglist, which result in the "Unknown signal" message.
* string/strsignal.c: Likewise.
* sysdeps/generic/Makefile [stdio-common]: If $(inhibit-siglist),
don't auto-generate siglist.c.
* sysdeps/unix/sysv/linux/Makefile [stdio-common]: Set inhibit-siglist.
* sysdeps/unix/sysv/linux/siglist.c: New file. Not needing to
autogenerate makes bootstrapping and cross-compiling much easier.
* sysdeps/unix/sysv/linux/siglist.h: New file.
* stdlib/longlong.h: Prototype __udiv_qrnnd.
* sysdeps/unix/sysv/linux/alpha/Makefile (sysdep_headers): Remove
sys/io.h. It is already added in .../linux/Makefile.
* sysdeps/unix/sysv/linux/alpha/sigaction.h: New file.
* sysdeps/unix/sysv/linux/alpha/signum.h: New file.
* sysdeps/unix/sysv/linux/alpha/statbuf.h: New file.
Sun Oct 20 17:17:12 1996 Ulrich Drepper <drepper@cygnus.com>
Add implementation of POSIX.1g function getaddrinfo.
* posix/Makefile (routines): Add getaddrinfo.
* sysdeps/posix/getaddrinfo.c.: New file. Add implementation by
Craig Metz.
* sysdeps/stub/getaddrinfo.c: New file. Stub implementation.
* resolv/netdb.h [__USE_POSIX]: Add getaddrinfo prototypes and
related constants and structures.
Sun Oct 20 13:02:34 1996 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/stub/lockfile.c: Rename functions to __internal_*.
Make all old names weak alises so that they can be replaced
by libpthread.
* stdio-common/vfprintf.c: Only declare __flockfile and __funlockfile
for !USE_IN_LIBIO.
[USE_IN_LIBIO]: Call _IO_flockfile and _IO_funlockfile instead of
__flockfile and __funlockfile.
Reported by NIIBE Yutaka.
* crypt/md5.c: Change form of copyright message according to GNITS
rules.
Add warning for requirement on RESBUF parameter for `md5_finish_ctx'
and `md5_read_ctx' function.
* crypt/md5.h: Likewise.
* grp/testgrp.c: Don't use perror for error cases since getgr* and
getpw* functions do not return usable error codes.
Sun Oct 19 23:05:32 1996 Jim Meyering <meyering@asic.sc.ti.com>
* crypt/md5.c (md5_process_bytes): Used casting for pointer
arithmetic.
Sun Oct 20 03:53:23 1996 Ulrich Drepper <drepper@cygnus.com>
* sunrpc/Makefile (others): Remove portmap here, too.
Sat Oct 19 17:42:24 1996 Ulrich Drepper <drepper@cygnus.com>
* intl/locale.alias: Language for entry `czech' is `cs'.

60
INSTALL
View File

@ -773,9 +773,10 @@ parts of the library were contributed or worked on by other people.
platforms was written by Per Bothner and modified by Ulrich
Drepper.
* The Internet-related code (most of the `inet' subdirectory) and
several other miscellaneous functions and header files have been
included from 4.4 BSD with little or no modification.
* Some of the Internet-related code (most of the `inet'
subdirectory) and several other miscellaneous functions and
header files have been included from 4.4 BSD with little or no
modification.
All code incorporated from 4.4 BSD is under the following
copyright:
@ -916,3 +917,56 @@ parts of the library were contributed or worked on by other people.
or `Software.Distribution@CS.CMU.EDU' any improvements or
extensions that they make and grant Carnegie Mellon the
rights to redistribute these changes.
* The `getaddrinfo' function is written by Craig Metz and it has the
following copyright:
The Inner Net License, Version 2.00
===================================
The author(s) grant permission for redistribution and use in source and
binary forms, with or without modification, of the software
and documentation provided that the following conditions are met:
0. If you receive a version of the software that is
specifically labelled as not being for redistribution
(check the version message and/or README), you are not
permitted to redistribute that version of the software in
any way or form.
1. All terms of the all other applicable copyrights and
licenses must be followed.
2. Redistributions of source code must retain the authors'
copyright notice(s), this list of conditions, and the
following disclaimer.
3. Redistributions in binary form must reproduce the authors'
copyright notice(s), this list of conditions, and the
following disclaimer in the documentation and/or other
materials provided with the distribution.
4. All advertising materials mentioning features or use of
this software must display the following acknowledgement
with the name(s) of the authors as specified in the
copyright notice(s) substituted where indicated:
This product includes software developed by <name(s)>, The Inner
Net, and other contributors.
5. Neither the name(s) of the author(s) nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior written
permission.
THIS SOFTWARE IS PROVIDED BY ITS AUTHORS AND CONTRIBUTORS ``AS
IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
OF SUCH DAMAGE.
If these license terms cause you a real problem, contact the author.

View File

@ -84,7 +84,7 @@ subdirs := $(filter mach,$(subdirs)) $(filter hurd,$(subdirs)) \
headers := errno.h sys/errno.h errnos.h limits.h values.h \
features.h gnu-versions.h libc-lock.h
aux = sysdep $(libc-init) version
before-compile = $(objpfx)version-info.h
before-compile = $(objpfx)version-info.h $(objpfx)features.h
echo-headers: subdir_echo-headers
@ -151,6 +151,23 @@ $(objpfx)version-info.h: $(+sysdir_pfx)config.make $(all-Banner-files)
version.c-objects := $(addprefix $(objpfx)version,$(object-suffixes))
$(version.c-objects): $(objpfx)version-info.h
$(objpfx)features.h: features.h.in Makefile $(common-objpfx)soversions.mk
nr="$(libc.so-version)"; \
if test -n $$nr; then \
nr=`echo $$nr | sed 's/^[.]//'`; \
tmpfile=$${TMPDIR:-/tmp}/sedtmp.$$$$; \
rm -f $$tmpfile; \
(echo '/^INTERFACENUMBER/ { i\'; \
echo '/* Interface number of the shared library. */\'; \
echo "#define __GNU_LIBRARY_INTERFACE__ $$nr"; \
echo ' s/^INTERFACENUMBER//'; \
echo '}') > $$tmpfile; \
sed -f $$tmpfile < $< > $@; \
rm -f $$tmpfile; \
else \
sed -e '/^INTERFACENUMBER/d' < $< > $@; \
fi
# Makerules creates a file `stub-$(subdir)' for each subdirectory, which
# contains `#define __stub_FUNCTION' for each function which is a stub.
# Here we paste all of these together into <stubs.h>.

View File

@ -24,7 +24,8 @@ Cambridge, MA 02139, USA. */
void
_dl_map_object_deps (struct link_map *map,
struct link_map **preloads, unsigned int npreloads)
struct link_map **preloads, unsigned int npreloads,
int trace_mode)
{
struct list
{
@ -75,7 +76,7 @@ _dl_map_object_deps (struct link_map *map,
struct link_map *dep
= _dl_map_object (l, strtab + d->d_un.d_val,
l->l_type == lt_executable ? lt_library :
l->l_type);
l->l_type, trace_mode);
if (dep->l_reserved)
/* This object is already in the search list we are

View File

@ -477,7 +477,8 @@ open_path (const char *name, size_t namelen,
/* Map in the shared object file NAME. */
struct link_map *
_dl_map_object (struct link_map *loader, const char *name, int type)
_dl_map_object (struct link_map *loader, const char *name, int type,
int trace_mode)
{
int fd;
char *realname;
@ -582,7 +583,26 @@ _dl_map_object (struct link_map *loader, const char *name, int type)
}
if (fd == -1)
_dl_signal_error (errno, name, "cannot open shared object file");
{
if (trace_mode)
{
/* We haven't found an appropriate library. But since we
are only interested in the list of libraries this isn't
so severe. Fake an entry with all the information we
have (in fact only the name). */
/* Enter the new object in the list of loaded objects. */
if ((name_copy = local_strdup (name)) == NULL
|| (l = _dl_new_object (name_copy, name, type)) == NULL)
_dl_signal_error (ENOMEM, name,
"cannot create shared object descriptor");
/* We use an opencount of 0 as a sign for the faked entry. */
l->l_opencount = 0;
l->l_reserved = 0;
}
else
_dl_signal_error (errno, name, "cannot open shared object file");
}
return _dl_map_object_from_fd (name_copy, fd, realname, loader, type);
}

View File

@ -46,13 +46,13 @@ _dl_open (const char *file, int mode)
struct r_debug *r;
/* Load the named object. */
new = _dl_map_object (NULL, file, lt_loaded);
new = _dl_map_object (NULL, file, lt_loaded, 0);
if (new->l_searchlist)
/* It was already open. */
return new;
/* Load that object's dependencies. */
_dl_map_object_deps (new, NULL, 0);
_dl_map_object_deps (new, NULL, 0, 0);
/* Relocate the objects loaded. We do this in reverse order so that copy

View File

@ -41,7 +41,7 @@ _dl_object_relocation_scope (struct link_map *l)
if (! l->l_searchlist)
/* We must construct the searchlist for this object. */
_dl_map_object_deps (l, NULL, 0);
_dl_map_object_deps (l, NULL, 0, 0);
/* The primary scope is this object itself and its
dependencies. */

View File

@ -195,7 +195,8 @@ extern int _dlerror_run (void (*operate) (void));
LOADER's DT_RPATH is used in searching for NAME.
If the object is already opened, returns its existing map. */
extern struct link_map *_dl_map_object (struct link_map *loader,
const char *name, int type);
const char *name, int type,
int trace_mode);
/* Call _dl_map_object on the dependencies of MAP, and set up
MAP->l_searchlist. PRELOADS points to a vector of NPRELOADS previously
@ -203,7 +204,7 @@ extern struct link_map *_dl_map_object (struct link_map *loader,
but before its dependencies. */
extern void _dl_map_object_deps (struct link_map *map,
struct link_map **preloads,
unsigned int npreloads);
unsigned int npreloads, int trace_mode);
/* Cache the locations of MAP's hash table. */
extern void _dl_setup_hash (struct link_map *map);

View File

@ -149,6 +149,9 @@ dl_main (const ElfW(Phdr) *phdr,
mode = getenv ("LD_TRACE_LOADED_OBJECTS") != NULL ? trace : normal;
/* Set up a flag which tells we are just starting. */
_dl_starting_up = 1;
if (*user_entry == (ElfW(Addr)) &_start)
{
/* Ho ho. We are not the program interpreter! We are the program
@ -210,7 +213,7 @@ of this helper program; chances are you did not intend to run this program.\n",
{
void doit (void)
{
l = _dl_map_object (NULL, _dl_argv[0], lt_library);
l = _dl_map_object (NULL, _dl_argv[0], lt_library, 0);
}
char *err_str = NULL;
const char *obj_name __attribute__ ((unused));
@ -223,7 +226,7 @@ of this helper program; chances are you did not intend to run this program.\n",
}
}
else
l = _dl_map_object (NULL, _dl_argv[0], lt_library);
l = _dl_map_object (NULL, _dl_argv[0], lt_library, 0);
phdr = l->l_phdr;
phent = l->l_phnum;
@ -322,7 +325,7 @@ of this helper program; chances are you did not intend to run this program.\n",
char *p;
while ((p = strsep (&list, ":")) != NULL)
{
(void) _dl_map_object (NULL, p, lt_library);
(void) _dl_map_object (NULL, p, lt_library, 0);
++npreloads;
}
}
@ -378,7 +381,7 @@ of this helper program; chances are you did not intend to run this program.\n",
runp = file;
while ((p = strsep (&runp, ": \t\n")) != NULL)
{
(void) _dl_map_object (NULL, p, lt_library);
(void) _dl_map_object (NULL, p, lt_library, 0);
++npreloads;
}
}
@ -386,7 +389,7 @@ of this helper program; chances are you did not intend to run this program.\n",
if (problem != NULL)
{
char *p = strndupa (problem, file_size - (problem - file));
(void) _dl_map_object (NULL, p, lt_library);
(void) _dl_map_object (NULL, p, lt_library, 0);
}
/* We don't need the file anymore. */
@ -412,7 +415,7 @@ of this helper program; chances are you did not intend to run this program.\n",
/* Load all the libraries specified by DT_NEEDED entries. If LD_PRELOAD
specified some libraries to load, these are inserted before the actual
dependencies in the executable's searchlist for symbol resolution. */
_dl_map_object_deps (l, preloads, npreloads);
_dl_map_object_deps (l, preloads, npreloads, mode == trace);
#ifndef MAP_ANON
/* We are done mapping things, so close the zero-fill descriptor. */
@ -459,15 +462,20 @@ of this helper program; chances are you did not intend to run this program.\n",
_dl_sysdep_message ("\t", "statically linked\n", NULL);
else
for (l = _dl_loaded->l_next; l; l = l->l_next)
{
char buf[20], *bp;
buf[sizeof buf - 1] = '\0';
bp = _itoa (l->l_addr, &buf[sizeof buf - 1], 16, 0);
while ((size_t) (&buf[sizeof buf - 1] - bp) < sizeof l->l_addr * 2)
*--bp = '0';
_dl_sysdep_message ("\t", l->l_libname, " => ", l->l_name,
" (0x", bp, ")\n", NULL);
}
if (l->l_opencount == 0)
/* The library was not found. */
_dl_sysdep_message ("\t", l->l_libname, " => not found\n", NULL);
else
{
char buf[20], *bp;
buf[sizeof buf - 1] = '\0';
bp = _itoa (l->l_addr, &buf[sizeof buf - 1], 16, 0);
while ((size_t) (&buf[sizeof buf - 1] - bp)
< sizeof l->l_addr * 2)
*--bp = '0';
_dl_sysdep_message ("\t", l->l_libname, " => ", l->l_name,
" (0x", bp, ")\n", NULL);
}
if (mode != trace)
for (i = 1; i < _dl_argc; ++i)
@ -563,9 +571,6 @@ of this helper program; chances are you did not intend to run this program.\n",
_dl_debug_state ();
}
/* We finished the intialization and will start up. */
_dl_starting_up = 1;
/* Once we return, _dl_sysdep_start will invoke
the DT_INIT functions and then *USER_ENTRY. */
}

View File

@ -1,4 +1,3 @@
#include <ansidecl.h>
#include <grp.h>
#include <pwd.h>
#include <sys/types.h>
@ -7,7 +6,7 @@
#include <stdio.h>
int
DEFUN_VOID(main)
main (int argc, char *argv[])
{
uid_t me;
struct passwd *my_passwd;
@ -17,7 +16,7 @@ DEFUN_VOID(main)
me = getuid ();
my_passwd = getpwuid (me);
if (my_passwd == NULL)
perror ("getpwuid");
printf ("Cannot find user entry for UID %d\n", me);
else
{
printf ("My login name is %s.\n", my_passwd->pw_name);
@ -27,7 +26,7 @@ DEFUN_VOID(main)
my_group = getgrgid (my_passwd->pw_gid);
if (my_group == NULL)
perror ("getgrgid");
printf ("No data for group %d found\n", my_passwd->pw_gid);
else
{
printf ("My default group is %s (%d).\n",
@ -40,6 +39,3 @@ DEFUN_VOID(main)
exit (my_passwd && my_group ? EXIT_SUCCESS : EXIT_FAILURE);
}

View File

@ -80,7 +80,7 @@ lr_open (const char *fname, kw_hash_fct_t hf)
{
int save = errno;
fclose (result->fp);
free (result->fname);
free ((char *) result->fname);
free (result);
errno = save;
return NULL;
@ -108,7 +108,7 @@ void
lr_close (struct linereader *lr)
{
fclose (lr->fp);
free (lr->fname);
free ((char *) lr->fname);
free (lr->buf);
free (lr);
}

View File

@ -26,11 +26,9 @@ Cambridge, MA 02139, USA. */
/* File listing canonical interesting mount points. */
#define _PATH_MNTTAB "/etc/fstab"
#define MNTTAB _PATH_MNTTAB /* Deprecated alias. */
/* File listing currently active mount points. */
#define _PATH_MOUNTED "/var/run/mtab"
#define MOUNTED _PATH_MOUNTED /* Deprecated alias. */

View File

@ -21,6 +21,7 @@ Boston, MA 02111-1307, USA. */
#include <db.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <libc-lock.h>
#include <paths.h>
#include "nsswitch.h"

View File

@ -1 +0,0 @@
#include <misc/paths.h>

View File

@ -45,7 +45,8 @@ routines := \
confstr \
getopt getopt1 \
sched_setp sched_getp sched_sets sched_gets sched_yield sched_primax \
sched_primin sched_rr_gi
sched_primin sched_rr_gi \
getaddrinfo
aux := init-posix environ
tests := tstgetopt testfnm
@ -57,6 +58,7 @@ gpl2lgpl := getopt.c getopt1.c getopt.h regex.c regex.h
include ../Rules
CFLAGS-regex.c = -Wno-unused -Wno-strict-prototypes
CFLAGS-getaddrinfo.c = -DRESOLVER
$(objpfx)libposix.a: $(dep-dummy-lib); $(make-dummy-lib)
lib: $(objpfx)libposix.a

View File

@ -357,6 +357,50 @@ extern int getnetgrent_r __P ((char **__hostp, char **__userp,
char *__buffer, int __buflen));
#endif
/* Extension from POSIX.1g. */
#ifdef __USE_POSIX
/* Structure to contain information about address of a service provider. */
struct addrinfo
{
int ai_flags; /* Input flags. */
int ai_family; /* Protocol family for socket. */
int ai_socktype; /* Socket type. */
int ai_protocol; /* Protocol for socket. */
int ai_addrlen; /* Length of socket address. */
struct sockaddr *ai_addr; /* Socket address for socket. */
char *ai_canonname; /* Canonical name for service location. */
struct addrinfo *ai_next; /* Pointer to next in list. */
};
/* Possible values for `ai_flags' field in `addrinfo' structure. */
#define AI_PASSIVE 1 /* Socket address is intended for `bind'. */
#define AI_CANONNAME 2 /* Request for canonical name. */
/* Error values for `getaddrinfo' function. */
#define EAI_BADFLAGS -1 /* Invalid value for `ai_flags' field. */
#define EAI_NONAME -2 /* NAME or SERVICE is unknown. */
#define EAI_AGAIN -3 /* Temporary failure in name resolution. */
#define EAI_FAIL -4 /* Non-recoverable failure in name res. */
#define EAI_NODATA -5 /* No address associated with NAME. */
#define EAI_FAMILY -6 /* `ai_family' not supported. */
#define EAI_SOCKTYPE -7 /* `ai_socktype' not supported. */
#define EAI_SERVICE -8 /* SERVICE not supported for `ai_socktype'. */
#define EAI_ADDRFAMILY -9 /* Address family for NAME not supported. */
#define EAI_MEMORY -10 /* Memory allocation failure. */
#define EAI_SYSTEM -11 /* System error returned in `errno'. */
/* Translate name of a service location and/or a service name to set of
socket addresses. */
extern int getaddrinfo __P ((__const char *__name, __const char *__service,
__const struct addrinfo *__req,
struct addrinfo **__pai));
/* Free `addrinfo' structure AI including associated storage. */
extern void freeaddrinfo __P ((struct addrinfo *__ai));
#endif /* POSIX */
__END_DECLS
#endif /* netdb.h */

View File

@ -23,4 +23,4 @@ make
make install
%files
%doc FAQ NEWS NOTES README
%doc FAQ NEWS NOTES README INSTALL

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1995 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1992, 1995, 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
@ -16,7 +16,6 @@ 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 <stdio.h>
#include <signal.h>
@ -26,24 +25,24 @@ Cambridge, MA 02139, USA. */
#endif
/* Defined in sys_siglist.c. */
extern CONST char *CONST _sys_siglist[];
extern const char *const _sys_siglist[];
/* Print out on stderr a line consisting of the test in S, a colon, a space,
a message describing the meaning of the signal number SIG and a newline.
If S is NULL or "", the colon and space are omitted. */
void
DEFUN(psignal, (sig, s), int sig AND register CONST char *s)
psignal (int sig, const char *s)
{
CONST char *colon;
const char *colon, *desc;
if (s == NULL || s == '\0')
s = colon = "";
else
colon = ": ";
if (sig >= 0 && sig < NSIG)
(void) fprintf (stderr, "%s%s%s\n", s, colon, _(_sys_siglist[sig]));
if (sig >= 0 && sig < NSIG && (desc = _sys_siglist[sig]) != NULL)
(void) fprintf (stderr, "%s%s%s\n", s, colon, _(desc));
else
(void) fprintf (stderr, _("%s%sUnknown signal %d\n"), s, colon, sig);
}

View File

@ -23,7 +23,6 @@ Boston, MA 02111-1307, USA. */
#include <stdlib.h>
#include <errno.h>
#include <wchar.h>
#include <libc-lock.h>
#include "_itoa.h"
#include "../locale/localeinfo.h"
@ -124,6 +123,11 @@ ssize_t __wprintf_pad __P ((FILE *, wchar_t pad, size_t n));
} \
while (0)
# define UNBUFFERED_P(s) ((s)->__buffer == NULL)
/* XXX These declarations should go as soon as the stdio header files
have these prototypes. */
extern void __flockfile (FILE *);
extern void __funlockfile (FILE *);
#endif /* USE_IN_LIBIO */
@ -152,8 +156,6 @@ ssize_t __wprintf_pad __P ((FILE *, wchar_t pad, size_t n));
# define is_longlong is_long_double
#endif
extern void __flockfile (FILE *);
extern void __funlockfile (FILE *);
/* Global variables. */
static const char null[] = "(null)";
@ -848,8 +850,13 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
f = lead_str_end = find_spec (format, &mbstate);
/* Lock stream. */
#ifdef USE_IN_LIBIO
__libc_cleanup_region_start ((void (*) (void *)) &_IO_funlockfile, s);
_IO_flockfile (s);
#else
__libc_cleanup_region_start ((void (*) (void *)) &__funlockfile, s);
__flockfile (s);
#endif
/* Write the literal text before the first format. */
outstring ((const UCHAR_T *) format,

View File

@ -166,7 +166,7 @@ MA 02111-1307, USA. */
(q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \
(r) = __r; \
} while (0)
extern UDItype __udiv_qrnnd ();
extern UDItype __udiv_qrnnd __P ((UDItype *, UDItype, UDItype, UDItype));
#define UDIV_TIME 220
#endif /* LONGLONG_STANDALONE */
#endif /* __alpha */
@ -477,7 +477,7 @@ extern USItype __udiv_qrnnd ();
: "=d" (__w) \
: "%dI" ((USItype)(u)), \
"dI" ((USItype)(v))); \
__w; })
__w; })
#define udiv_qrnnd(q, r, nh, nl, d) \
do { \
union {UDItype __ll; \

152
string/stratcliff.c Normal file
View File

@ -0,0 +1,152 @@
#define _GNU_SOURCE 1
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/param.h>
#ifndef MAX
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#endif
int
main (int argc, char *argv[])
{
size_t size = sysconf (_SC_PAGESIZE);
char *adr;
int result = 0;
adr = (char *) mmap (NULL, size, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
if (adr == NULL)
{
if (errno == ENOSYS)
puts ("No test, mmap not available.");
else
{
printf ("mmaping failed: %m");
result = 1;
}
}
else
{
char dest[size];
int inner, middle, outer;
memset (adr, 'T', size);
/* strlen test */
for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
{
for (inner = MAX (outer, size - 64); inner < size; ++inner)
{
adr[inner] = '\0';
if (strlen (&adr[outer]) != inner - outer)
{
printf ("strlen flunked for outer = %d, inner = %d\n",
outer, inner);
result = 1;
}
adr[inner] = 'T';
}
}
/* strchr test */
for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
{
for (middle = MAX (outer, size - 64); middle < size; ++middle)
{
for (inner = middle; inner < size; ++inner)
{
char *cp;
adr[middle] = 'V';
adr[inner] = '\0';
cp = strchr (&adr[outer], 'V');
if ((inner == middle && cp != NULL)
|| (inner != middle
&& (cp - &adr[outer]) != middle - outer))
{
printf ("strchr flunked for outer = %d, middle = %d, "
"inner = %d\n", outer, middle, inner);
result = 1;
}
adr[inner] = 'T';
adr[middle] = 'T';
}
}
}
/* strrchr test */
for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
{
for (middle = MAX (outer, size - 64); middle < size; ++middle)
{
for (inner = middle; inner < size; ++inner)
{
char *cp;
adr[middle] = 'V';
adr[inner] = '\0';
cp = strrchr (&adr[outer], 'V');
if ((inner == middle && cp != NULL)
|| (inner != middle
&& (cp - &adr[outer]) != middle - outer))
{
printf ("strrchr flunked for outer = %d, middle = %d, "
"inner = %d\n", outer, middle, inner);
result = 1;
}
adr[inner] = 'T';
adr[middle] = 'T';
}
}
}
/* strcpy test */
for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
{
for (inner = MAX (outer, size - 64); inner < size; ++inner)
{
adr[inner] = '\0';
if (strcpy (dest, &adr[outer]) != dest
|| strlen (dest) != inner - outer)
{
printf ("strcpy flunked for outer = %d, inner = %d\n",
outer, inner);
result = 1;
}
adr[inner] = 'T';
}
}
/* stpcpy test */
for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
{
for (inner = MAX (outer, size - 64); inner < size; ++inner)
{
adr[inner] = '\0';
if ((stpcpy (dest, &adr[outer]) - dest) != inner - outer)
{
printf ("stpcpy flunked for outer = %d, inner = %d\n",
outer, inner);
result = 1;
}
adr[inner] = 'T';
}
}
}
return result;
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1994, 1995 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1994, 1995, 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
@ -16,7 +16,6 @@ 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 <signal.h>
#include <stdio.h>
#include <string.h>
@ -27,14 +26,16 @@ Cambridge, MA 02139, USA. */
#endif
/* Defined in siglist.c. */
extern CONST char *CONST _sys_siglist[];
extern const char *const _sys_siglist[];
/* Return a string describing the meaning of the signal number SIGNUM. */
char *
DEFUN(strsignal, (signum), int signum)
strsignal (int signum)
{
if (signum < 0 || signum > NSIG)
const char *desc;
if (signum < 0 || signum > NSIG || (desc = _sys_siglist[signum]) == NULL)
{
static char buf[512];
int len = __snprintf (buf, sizeof buf, _("Unknown signal %d"), signum);
@ -44,5 +45,5 @@ DEFUN(strsignal, (signum), int signum)
return buf;
}
return (char *) _(_sys_siglist[signum]);
return (char *) _(desc);
}

View File

@ -66,7 +66,7 @@ routines := auth_none auth_unix authuxprot bindrsvprt \
svc_tcp svc_udp xdr xdr_array xdr_float xdr_mem \
xdr_rec xdr_ref xdr_stdio
others := portmap rpcinfo
others := rpcinfo
install-bin := rpcgen
install-sbin := rpcinfo
rpcgen-objs = rpc_main.o rpc_hout.o rpc_cout.o rpc_parse.o \

View File

@ -32,8 +32,8 @@ common-generated := $(common-generated) bytesex.h det_endian
endif
ifeq ($(subdir),stdio-common)
ifeq "$(filter $(objpfx)siglist.c,$(before-compile))" ""
ifneq ($(inhibit-siglist),yes)
ifeq "$(filter %siglist.c,$(before-compile))" ""
before-compile := $(before-compile) $(objpfx)siglist.c
$(objpfx)siglist.c: $(objpfx)make_siglist
@rm -f $@
@ -49,5 +49,5 @@ $(objpfx)make_siglist: $(sysdep_dir)/generic/make_siglist.c
generated := $(generated) make_siglist siglist.c
endif
endif
endif

View File

@ -16,6 +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 <libintl.h>
#include <stdio.h>
#include <string.h>
#include "../stdio-common/_itoa.h"
@ -25,6 +26,9 @@ Cambridge, MA 02139, USA. */
#define _sys_nerr sys_nerr
#endif
/* Set if startup process finished. */
extern int _dl_starting_up;
/* Return a string describing the errno code in ERRNUM. */
char *
_strerror_internal (int errnum,
@ -33,7 +37,8 @@ _strerror_internal (int errnum,
{
if (errnum < 0 || errnum >= _sys_nerr)
{
const char *unk = _("Unknown error ");
static const char unk_orig[] = N_("Unknown error ");
const char *unk = _dl_starting_up ? unk_orig : _(unk_orig);
const size_t unklen = strlen (unk);
char *p = buf + buflen;
*--p = '\0';
@ -41,5 +46,6 @@ _strerror_internal (int errnum,
return memcpy (p - unklen, unk, unklen);
}
return (char *) _(_sys_errlist[errnum]);
return (char *) (_dl_starting_up ? _sys_errlist[errnum]
: _(_sys_errlist[errnum]));
}

View File

@ -52,6 +52,8 @@
#define _PATH_MAILDIR "/var/mail"
#define _PATH_MAN "/usr/man"
#define _PATH_MEM "/dev/mem"
#define _PATH_MNTTAB "/etc/fstab"
#define _PATH_MOUNTED "/var/run/mtab"
#define _PATH_NOLOGIN "/etc/nologin"
#define _PATH_SENDMAIL "/usr/sbin/sendmail"
#define _PATH_SHELLS "/etc/shells"

487
sysdeps/posix/getaddrinfo.c Normal file
View File

@ -0,0 +1,487 @@
/* The Inner Net License, Version 2.00
The author(s) grant permission for redistribution and use in source and
binary forms, with or without modification, of the software and documentation
provided that the following conditions are met:
0. If you receive a version of the software that is specifically labelled
as not being for redistribution (check the version message and/or README),
you are not permitted to redistribute that version of the software in any
way or form.
1. All terms of the all other applicable copyrights and licenses must be
followed.
2. Redistributions of source code must retain the authors' copyright
notice(s), this list of conditions, and the following disclaimer.
3. Redistributions in binary form must reproduce the authors' copyright
notice(s), this list of conditions, and the following disclaimer in the
documentation and/or other materials provided with the distribution.
4. All advertising materials mentioning features or use of this software
must display the following acknowledgement with the name(s) of the
authors as specified in the copyright notice(s) substituted where
indicated:
This product includes software developed by <name(s)>, The Inner
Net, and other contributors.
5. Neither the name(s) of the author(s) nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY ITS AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
If these license terms cause you a real problem, contact the author. */
/* This software is Copyright 1996 by Craig Metz, All Rights Reserved. */
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#ifdef INET6
#include <netinet6/in6.h>
#endif /* INET6 */
#include <netdb.h>
#define GAIH_OKIFUNSPEC 0x0100
#define GAIH_EAI ~(GAIH_OKIFUNSPEC)
#ifdef HOSTTABLE
struct hostent *_hostname2addr_hosts(const char *name, int);
struct hostent *_addr2hostname_hosts(const char *name, int, int);
#endif /* HOSTTABLE */
static struct addrinfo nullreq =
{ 0, PF_UNSPEC, 0, 0, 0, NULL, NULL, NULL };
struct gaih_service {
char *name;
unsigned long num;
};
struct gaih_servtuple {
struct gaih_servtuple *next;
int socktype;
int protocol;
int port;
};
static struct gaih_servtuple nullserv = {
NULL, 0, 0, 0
};
struct gaih_addrtuple {
struct gaih_addrtuple *next;
int family;
char addr[16];
};
static struct gaih_addrtuple nulladdr;
struct gaih_typeproto {
int socktype;
int protocol;
char *name;
};
static struct gaih_typeproto gaih_inet_typeproto[] = {
{ 0, 0, NULL },
{ SOCK_STREAM, IPPROTO_TCP, "tcp" },
{ SOCK_DGRAM, IPPROTO_UDP, "udp" },
{ 0, 0, NULL }
};
static int gaih_inet_serv(char *servicename, struct gaih_typeproto *tp, struct gaih_servtuple **st)
{
struct servent *s;
if (!(s = getservbyname(servicename, tp->name)))
return (GAIH_OKIFUNSPEC | -EAI_SERVICE);
if (!(*st = malloc(sizeof(struct gaih_servtuple))))
return -EAI_MEMORY;
(*st)->next = NULL;
(*st)->socktype = tp->socktype;
(*st)->protocol = tp->protocol;
(*st)->port = s->s_port;
return 0;
}
static int gaih_inet(const char *name, const struct gaih_service *service,
const struct addrinfo *req, struct addrinfo **pai)
{
struct hostent *h = NULL;
struct gaih_typeproto *tp = gaih_inet_typeproto;
struct gaih_servtuple *st = &nullserv;
struct gaih_addrtuple *at = &nulladdr;
int i;
if (req->ai_protocol || req->ai_socktype) {
for (tp++; tp->name &&
((req->ai_socktype != tp->socktype) || !req->ai_socktype) &&
((req->ai_protocol != tp->protocol) || !req->ai_protocol); tp++);
if (!tp->name)
if (req->ai_socktype)
return (GAIH_OKIFUNSPEC | -EAI_SOCKTYPE);
else
return (GAIH_OKIFUNSPEC | -EAI_SERVICE);
}
if (service) {
if (service->name) {
if (tp->name) {
if (i = gaih_inet_serv(service->name, tp, &st))
return i;
} else {
struct gaih_servtuple **pst = &st;
for (tp++; tp->name; tp++) {
if (i = gaih_inet_serv(service->name, tp, pst)) {
if (i & GAIH_OKIFUNSPEC)
continue;
goto ret;
}
pst = &((*pst)->next);
}
if (st == &nullserv) {
i = (GAIH_OKIFUNSPEC | -EAI_SERVICE);
goto ret;
}
}
} else {
if (!(st = malloc(sizeof(struct gaih_servtuple))))
return -EAI_MEMORY;
st->next = NULL;
st->socktype = tp->socktype;
st->protocol = tp->protocol;
st->port = htons(service->num);
}
}
if (name) {
if (!(at = malloc(sizeof(struct gaih_addrtuple)))) {
i = -EAI_MEMORY;
goto ret;
}
at->family = 0;
at->next = NULL;
if (!at->family || !req->ai_family || (req->ai_family == AF_INET))
if (inet_pton(AF_INET, name, at->addr) > 0)
at->family = AF_INET;
#ifdef INET6
if (!at->family && (!req->ai_family || (req->ai_family == AF_INET6)))
if (inet_pton(AF_INET6, name, at->addr) > 0)
at->family = AF_INET6;
#endif /* INET6 */
#ifdef HOSTTABLE
if (!at->family) {
struct hostent *h;
struct gaih_addrtuple **pat = &at;
#ifdef INET6
if (!req->ai_family || (req->ai_family == AF_INET6))
if (h = _hostname2addr_hosts(name, AF_INET6)) {
for (i = 0; h->h_addr_list[i]; i++) {
if (!*pat) {
if (!(*pat = malloc(sizeof(struct gaih_addrtuple)))) {
i = -EAI_MEMORY;
goto ret;
}
}
(*pat)->next = NULL;
(*pat)->family = AF_INET6;
memcpy((*pat)->addr, h->h_addr_list[i], sizeof(struct in6_addr));
pat = &((*pat)->next);
}
}
#endif /* INET6 */
if (!req->ai_family || (req->ai_family == AF_INET))
if (h = _hostname2addr_hosts(name, AF_INET)) {
for (i = 0; h->h_addr_list[i]; i++) {
if (!*pat) {
if (!(*pat = malloc(sizeof(struct gaih_addrtuple)))) {
i = -EAI_MEMORY;
goto ret;
}
}
(*pat)->next = NULL;
(*pat)->family = AF_INET;
memcpy((*pat)->addr, h->h_addr_list[i], sizeof(struct in_addr));
pat = &((*pat)->next);
}
}
}
#endif /* HOSTTABLE */
#ifdef RESOLVER
if (!at->family) {
struct hostent *h;
struct gaih_addrtuple **pat = &at;
#ifdef INET6
if (!req->ai_family || (req->ai_family == AF_INET6))
if (h = gethostbyname2(name, AF_INET6)) {
for (i = 0; h->h_addr_list[i]; i++) {
if (!*pat) {
if (!(*pat = malloc(sizeof(struct gaih_addrtuple)))) {
i = -EAI_MEMORY;
goto ret;
}
}
(*pat)->next = NULL;
(*pat)->family = AF_INET6;
memcpy((*pat)->addr, h->h_addr_list[i], sizeof(struct in6_addr));
pat = &((*pat)->next);
}
}
#endif /* INET6 */
if (!req->ai_family || (req->ai_family == AF_INET))
if (h = gethostbyname2(name, AF_INET)) {
for (i = 0; h->h_addr_list[i]; i++) {
if (!*pat) {
if (!(*pat = malloc(sizeof(struct gaih_addrtuple)))) {
i = -EAI_MEMORY;
goto ret;
}
}
(*pat)->next = NULL;
(*pat)->family = AF_INET;
memcpy((*pat)->addr, h->h_addr_list[i], sizeof(struct in_addr));
pat = &((*pat)->next);
}
}
}
#endif /* RESOLVER */
if (!at->family)
return (GAIH_OKIFUNSPEC | -EAI_NONAME);
} else {
memset(&nulladdr, 0, sizeof(nulladdr));
#ifdef INET6
if (!req->ai_family || (req->ai_family == AF_INET6))
nulladdr.family = AF_INET6;
else
#endif /* INET6 */
nulladdr.family = AF_INET;
}
{
const char *c = NULL;
struct gaih_servtuple *st2;
struct gaih_addrtuple *at2 = at;
int j;
while(at2) {
if (req->ai_flags & AI_CANONNAME) {
struct hostent *h = NULL;
#ifdef RESOLVER
h = gethostbyaddr(at2->addr,
#ifdef INET6
(at2->family == AF_INET6) ? sizeof(struct in6_addr) :
#endif /* INET6 */
sizeof(struct in_addr), at2->family);
#endif /* RESOLVER */
#ifdef HOSTTABLE
if (!h)
h = _addr2hostname_hosts(at2->addr,
#ifdef INET6
(at2->family == AF_INET6) ? sizeof(struct in6_addr) :
#endif /* INET6 */
sizeof(struct in_addr), at2->family);
#endif /* HOSTTABLE */
if (!h) {
c = inet_ntop(at2->family, at2->addr, NULL, 0);
} else
c = h->h_name;
if (!c) {
i = (GAIH_OKIFUNSPEC | -EAI_NONAME);
goto ret;
}
j = strlen(c) + 1;
} else
j = 0;
#ifdef INET6
if (at2->family == AF_INET6)
i = sizeof(struct sockaddr_in6);
else
#endif /* INET6 */
i = sizeof(struct sockaddr_in);
st2 = st;
while(st2) {
if (!(*pai = malloc(sizeof(struct addrinfo) + i + j))) {
i = -EAI_MEMORY;
goto ret;
}
(*pai)->ai_flags = req->ai_flags;
(*pai)->ai_family = at2->family;
(*pai)->ai_socktype = st2->socktype;
(*pai)->ai_protocol = st2->protocol;
(*pai)->ai_addrlen = i;
(*pai)->ai_addr = (void *)(*pai) + sizeof(struct addrinfo);
#if SALEN
((struct sockaddr_in *)(*pai)->ai_addr)->sin_len = i;
#endif /* SALEN */
((struct sockaddr_in *)(*pai)->ai_addr)->sin_family = at2->family;
((struct sockaddr_in *)(*pai)->ai_addr)->sin_port = st2->port;
#ifdef INET6
if (at2->family == AF_INET6) {
((struct sockaddr_in6 *)(*pai)->ai_addr)->sin6_flowinfo = 0;
memcpy(&((struct sockaddr_in6 *)(*pai)->ai_addr)->sin6_addr, at2->addr, sizeof(struct in6_addr));
} else
#endif /* INET6 */
{
memcpy(&((struct sockaddr_in *)(*pai)->ai_addr)->sin_addr, at2->addr, sizeof(struct in_addr));
memset(((struct sockaddr_in *)(*pai)->ai_addr)->sin_zero, 0, sizeof(((struct sockaddr_in *)(*pai)->ai_addr)->sin_zero));
}
if (c) {
(*pai)->ai_canonname = (void *)(*pai) + sizeof(struct addrinfo) + i;
strcpy((*pai)->ai_canonname, c);
} else
(*pai)->ai_canonname = NULL;
(*pai)->ai_next = NULL;
pai = &((*pai)->ai_next);
st2 = st2->next;
}
at2 = at2->next;
}
}
i = 0;
ret:
if (st != &nullserv) {
struct gaih_servtuple *st2 = st;
while(st) {
st2 = st->next;
free(st);
st = st2;
}
}
if (at != &nulladdr) {
struct gaih_addrtuple *at2 = at;
while(at) {
at2 = at->next;
free(at);
at = at2;
}
}
return i;
}
struct gaih {
int family;
int (*gaih)(const char *name, const struct gaih_service *service,
const struct addrinfo *req, struct addrinfo **pai);
};
static struct gaih gaih[] = {
#ifdef INET6
{ PF_INET6, gaih_inet },
#endif /* INET6 */
{ PF_INET, gaih_inet },
{ PF_UNSPEC, NULL }
};
int getaddrinfo(const char *name, const char *service,
const struct addrinfo *req, struct addrinfo **pai)
{
int i, j = 0;
struct addrinfo *p = NULL, **end = &p;
struct gaih *g = gaih, *pg = NULL;
struct gaih_service gaih_service, *pservice;
if (!name && !service)
return EAI_NONAME;
if (!req)
req = &nullreq;
if (req->ai_flags & ~3)
return EAI_BADFLAGS;
if ((req->ai_flags & AI_CANONNAME) && !name)
return EAI_BADFLAGS;
if (service && *service) {
char *c;
gaih_service.num = strtoul(gaih_service.name = (void *)service, &c, 10);
if (!*c) {
if (!req->ai_socktype)
return EAI_SERVICE;
gaih_service.name = NULL;
}
pservice = &gaih_service;
} else
pservice = NULL;
while(g->gaih) {
if ((req->ai_family == g->family) || !req->ai_family) {
j++;
if (!((pg && (pg->gaih == g->gaih)))) {
pg = g;
if (i = g->gaih(name, pservice, req, end)) {
if (!req->ai_family && (i & GAIH_OKIFUNSPEC))
continue;
goto gaih_err;
}
while(*end) end = &((*end)->ai_next);
}
}
g++;
}
if (!j)
return EAI_FAMILY;
if (p) {
*pai = p;
return 0;
}
gaih_err:
if (p)
freeaddrinfo(p);
if (i)
return -(i & GAIH_EAI);
return EAI_NONAME;
}
void freeaddrinfo(struct addrinfo *ai)
{
struct addrinfo *p;
while(ai) {
p = ai;
ai = ai->ai_next;
free((void *)p);
}
}

View File

@ -0,0 +1,38 @@
/* Stub version of getaddrinfo function.
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 <errno.h>
#include <netdb.h>
int
getaddrinfo (const char *name, const char *service, const struct addrinfo *req,
struct addrinfo **pai)
{
__set_errno (ENOSYS);
return EAI_SYSTEM;
}
stub_warning (getaddrinfo)
void
freeaddrinfo (struct addrinfo *ai)
{
/* Nothing. */
}
stub_warning (freeaddrinfo)

View File

@ -21,34 +21,40 @@ typedef FILE;
void
__flockfile (FILE *stream)
__internal_flockfile (FILE *stream)
{
/* Do nothing. Using this version does not do any locking. */
}
#ifdef USE_IN_LIBIO
strong_alias (__flockfile, _IO_flockfile)
weak_alias (__internal_flockfile, _IO_flockfile)
#else
weak_alias (__internal_flockfile, __flockfile)
#endif
weak_alias (__flockfile, flockfile);
weak_alias (__internal_flockfile, flockfile);
void
__funlockfile (FILE *stream)
__internal_funlockfile (FILE *stream)
{
/* Do nothing. Using this version does not do any locking. */
}
#ifdef USE_IN_LIBIO
strong_alias (__funlockfile, _IO_funlockfile)
weak_alias (__internal_funlockfile, _IO_funlockfile)
#else
weak_alias (__internal_funlockfile, __internal_funlockfile)
#endif
weak_alias (__funlockfile, funlockfile);
weak_alias (__internal_funlockfile, funlockfile);
int
__ftrylockfile (FILE *stream)
__internal_ftrylockfile (FILE *stream)
{
/* Do nothing. Using this version does not do any locking. */
return 1;
}
#ifdef USE_IN_LIBIO
strong_alias (__ftrylockfile, _IO_ftrylockfile)
weak_alias (__internal_ftrylockfile, __ftrylockfile)
#else
weak_alias (__internal_ftrylockfile, _IO_ftrylockfile)
#endif
weak_alias (__ftrylockfile, ftrylockfile);
weak_alias (__internal_ftrylockfile, ftrylockfile);

View File

@ -43,5 +43,10 @@ ifeq ($(subdir), termios)
sysdep_headers += termio.h
endif
ifeq ($(subdir), stdio-common)
# Just disable the auto generation in sysdeps/generic
inhibit-siglist := yes
endif
# Don't compile the ctype glue code, since there is no old non-GNU C library.
inhibit-glue = yes

View File

@ -1,5 +1,5 @@
ifeq ($(subdir), misc)
sysdep_headers += alpha/ptrace.h alpha/regdef.h sys/io.h
sysdep_headers += alpha/ptrace.h alpha/regdef.h
sysdep_routines += ieee_get_fp_control ieee_set_fp_control \
sethae ioperm osf_sigprocmask fstatfs statfs llseek

View File

@ -0,0 +1,51 @@
/* The proper definitions for Linux/Alpha sigaction.
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. */
/* Structure describing the action to be taken when a signal arrives. */
struct sigaction
{
/* Signal handler. */
__sighandler_t sa_handler;
/* Additional set of signals to be blocked. */
__sigset_t sa_mask;
/* Special flags. */
unsigned int sa_flags;
};
/* Bits in `sa_flags'. */
#define SA_NOCLDSTOP 0x00000004 /* Don't send SIGCHLD when children stop. */
#ifdef __USE_MISC
#define SA_STACK 0x00000001 /* Use signal stack by using `sa_restorer'. */
#define SA_RESTART 0x00000002 /* Don't restart syscall on signal return. */
#define SA_INTERRUPT 0x20000000 /* Historical no-op. */
#define SA_NOMASK 0x00000008 /* Don't automatically block the signal when
its handler is being executed. */
#define SA_ONESHOT 0x00000010 /* Reset to SIG_DFL on entry to handler. */
/* Some aliases for the SA_ constants. */
#define SA_NODEFER SA_NOMASK
#define SA_RESETHAND SA_ONESHOT
#endif
/* Values for the HOW argument to `sigprocmask'. */
#define SIG_BLOCK 1 /* Block signals. */
#define SIG_UNBLOCK 2 /* Unblock signals. */
#define SIG_SETMASK 3 /* Set the set of blocked signals. */

View File

@ -0,0 +1,69 @@
/* Signal number definitions. Linux/Alpha version.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#ifdef _SIGNAL_H
/* Fake signal functions. */
#define SIG_ERR ((__sighandler_t) -1) /* Error return. */
#define SIG_DFL ((__sighandler_t) 0) /* Default action. */
#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */
/*
* Linux/AXP has different signal numbers that Linux/i386: I'm trying
* to make it OSF/1 binary compatible, at least for normal binaries.
*/
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGEMT 7
#define SIGFPE 8
#define SIGKILL 9
#define SIGBUS 10
#define SIGSEGV 11
#define SIGSYS 12
#define SIGPIPE 13
#define SIGALRM 14
#define SIGTERM 15
#define SIGURG 16
#define SIGSTOP 17
#define SIGTSTP 18
#define SIGCONT 19
#define SIGCHLD 20
#define SIGTTIN 21
#define SIGTTOU 22
#define SIGIO 23
#define SIGXCPU 24
#define SIGXFSZ 25
#define SIGVTALRM 26
#define SIGPROF 27
#define SIGWINCH 28
#define SIGINFO 29
#define SIGUSR1 30
#define SIGUSR2 31
#define SIGPOLL SIGIO
#define SIGPWR SIGINFO
#define SIGIOT SIGABRT
#define _NSIG 32 /* Biggest signal number + 1. */
#endif /* <signal.h> included. */

View File

@ -1,5 +1,5 @@
/* Copyright (C) 1993 Free Software Foundation, Inc.
Contributed by Brendan Kehoe (brendan@zen.org).
/* 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
@ -19,32 +19,30 @@ Cambridge, MA 02139, USA. */
#ifndef _STATBUF_H
#define _STATBUF_H
#include <gnu/types.h>
/* The Alpha has no additional syscall versions. */
/* Versions of the `struct stat' data structure. */
#define _STAT_VER 0
/* Versions of the `xmknod' interface. */
#define _MKNOD_VER_LINUX 0
/* Structure describing file characteristics. */
struct stat
{
int st_dev; /* Device. */
unsigned int st_ino; /* File serial number. */
unsigned int st_mode; /* File mode. */
unsigned int st_nlink; /* Link count. */
unsigned int st_uid; /* User ID of the file's owner. */
unsigned int st_gid; /* Group ID of the file's group.*/
int st_rdev; /* Device number, if device. */
long st_size; /* Size of file, in bytes. */
int st_atime; /* Time of last access. */
int st_atime_usec;
int st_mtime; /* Time of last modification. */
int st_mtime_usec;
int st_ctime; /* Time of last status change. */
int st_ctime_usec;
unsigned int st_blksize; /* Optimal block size for I/O. */
#define _STATBUF_ST_BLKSIZE /* Tell code we have this member. */
int st_blocks; /* Number of 512-byte blocks allocated. */
unsigned int st_dev; /* Device. */
unsigned int st_ino; /* File serial number. */
unsigned int st_mode; /* File mode. */
unsigned int st_nlink; /* Link count. */
unsigned int st_uid; /* User ID of the file's owner. */
unsigned int st_gid; /* Group ID of the file's group.*/
unsigned int st_rdev; /* Device number, if device. */
long int st_size; /* Size of file, in bytes. */
unsigned long int st_atime; /* Time of last access. */
unsigned long int st_mtime; /* Time of last modification. */
unsigned long int st_ctime; /* Time of last status change. */
unsigned int st_blksize; /* Optimal block size for I/O. */
#define _STATBUF_ST_BLKSIZE /* Tell code we have this member. */
int st_blocks; /* Nr. of 512-byte blocks allocated. */
unsigned int st_flags;
unsigned int st_gen;
};
@ -60,6 +58,7 @@ struct stat
#define __S_IFREG 0100000 /* Regular file. */
#define __S_IFIFO 0010000 /* FIFO. */
/* These don't actually exist on System V, but having them doesn't hurt. */
#define __S_IFLNK 0120000 /* Symbolic link. */
#define __S_IFSOCK 0140000 /* Socket. */

View File

@ -20,6 +20,7 @@ Boston, MA 02111-1307, USA. */
#include <errno.h>
#include <mntent.h>
#include <paths.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

View File

@ -0,0 +1,71 @@
/*
* Copyright (c) 1989, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)paths.h 8.1 (Berkeley) 6/2/93
*/
#ifndef _PATHS_H_
#define _PATHS_H_
/* Default search path. */
#define _PATH_DEFPATH "/usr/bin:/bin"
/* All standard utilities path. */
#define _PATH_STDPATH \
"/usr/bin:/bin:/usr/sbin:/sbin"
#define _PATH_BSHELL "/bin/sh"
#define _PATH_CONSOLE "/dev/console"
#define _PATH_CSHELL "/bin/csh"
#define _PATH_DEVDB "/var/run/dev.db"
#define _PATH_DEVNULL "/dev/null"
#define _PATH_DRUM "/dev/drum"
#define _PATH_KMEM "/dev/kmem"
#define _PATH_MAILDIR "/var/spool/mail"
#define _PATH_MAN "/usr/man"
#define _PATH_MEM "/dev/mem"
#define _PATH_MNTTAB "/etc/fstab"
#define _PATH_MOUNTED "/etc/mtab"
#define _PATH_NOLOGIN "/etc/nologin"
#define _PATH_SENDMAIL "/usr/sbin/sendmail"
#define _PATH_SHELLS "/etc/shells"
#define _PATH_TTY "/dev/tty"
#define _PATH_UNIX "/vmlinux"
#define _PATH_VI "/usr/bin/vi"
/* Provide trailing slash, since mostly used for building pathnames. */
#define _PATH_DEV "/dev/"
#define _PATH_TMP "/tmp/"
#define _PATH_VARDB "/var/db/"
#define _PATH_VARRUN "/var/run/"
#define _PATH_VARTMP "/var/tmp/"
#endif /* !_PATHS_H_ */

View File

@ -0,0 +1,19 @@
#include <stddef.h>
#include <signal.h>
const char * const _sys_siglist[NSIG] =
{
#define init_sig(sig, abbrev, desc) [sig] desc,
#include "siglist.h"
#undef init_sig
};
const char * const _sys_sigabbrev[NSIG] =
{
#define init_sig(sig, abbrev, desc) [sig] abbrev,
#include "siglist.h"
#undef init_sig
};
weak_alias(_sys_siglist, sys_siglist)
weak_alias(_sys_sigabbrev, sys_sigabbrev)

View File

@ -0,0 +1,47 @@
/* This file is included multiple times. */
/* Standard signals */
init_sig (SIGHUP, "HUP", "Hangup")
init_sig (SIGINT, "INT", "Interrupt")
init_sig (SIGQUIT, "QUIT", "Quit")
init_sig (SIGILL, "ILL", "Illegal Instruction")
init_sig (SIGTRAP, "TRAP", "Trace/breakpoint trap")
init_sig (SIGABRT, "ABRT", "Aborted")
init_sig (SIGFPE, "FPE", "Floating point exception")
init_sig (SIGKILL, "KILL", "Killed")
init_sig (SIGBUS, "BUS", "Bus error")
init_sig (SIGSEGV, "SEGV", "Segmentation fault")
init_sig (SIGPIPE, "PIPE", "Broken pipe")
init_sig (SIGALRM, "ALRM", "Alarm clock")
init_sig (SIGTERM, "TERM", "Terminated")
init_sig (SIGURG, "URG", "Urgent I/O condition")
init_sig (SIGSTOP, "STOP", "Stopped (signal)")
init_sig (SIGTSTP, "TSTP", "Stopped")
init_sig (SIGCONT, "CONT", "Continued")
init_sig (SIGCHLD, "CHLD", "Child exited")
init_sig (SIGTTIN, "TTIN", "Stopped (tty input)")
init_sig (SIGTTOU, "TTOU", "Stopped (tty output)")
init_sig (SIGIO, "IO", "I/O possible")
init_sig (SIGXCPU, "XCPU", "CPU time limit exceeded")
init_sig (SIGXFSZ, "XFSZ", "File size limit exceeded")
init_sig (SIGVTALRM, "VTALRM", "Virtual timer expired")
init_sig (SIGPROF, "PROF", "Profiling timer expired")
init_sig (SIGWINCH, "WINCH", "Window changed")
init_sig (SIGUSR1, "USR1", "User defined signal 1")
init_sig (SIGUSR2, "USR2", "User defined signal 2")
/* Variations */
#ifdef SIGEMT
init_sig (SIGEMT, "EMT", "EMT trap")
#endif
#ifdef SIGSYS
init_sig (SIGSYS, "SYS", "Bad system call")
#endif
#ifdef SIGSTKFLT
init_sig (SIGSTKFLT, "STKFLT", "Stack fault")
#endif
#ifdef SIGINFO
init_sig (SIGINFO, "INFO", "Information request")
#elif defined(SIGPWR)
init_sig (SIGPWR, "PWR", "Power failure")
#endif