about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1996-05-23 03:15:42 +0000
committerRoland McGrath <roland@gnu.org>1996-05-23 03:15:42 +0000
commitfa0bc87c32d02cd81ec4d0ae00e0d943c683e6e1 (patch)
tree197250e2e9e1f2c900d3bf042dbf14898dc0fb73 /sysdeps
parente685238c901f1a7aa0c1956e63cc9f2de5599998 (diff)
downloadglibc-fa0bc87c32d02cd81ec4d0ae00e0d943c683e6e1.tar.gz
glibc-fa0bc87c32d02cd81ec4d0ae00e0d943c683e6e1.tar.xz
glibc-fa0bc87c32d02cd81ec4d0ae00e0d943c683e6e1.zip
Wed May 22 22:10:01 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
	* stdlib/canonicalize.c: New file.
	* stdlib/stdlib.h: Declare canonicalize_file_name, realpath.
	* stdlib/Makefile (routines): Add canonicalize.

	* posix/unistd.h: Declare __canonicalize_directory_name_internal.

Thu May 23 00:01:10 1996  Ulrich Drepper  <drepper@cygnus.com>

	* db/recno/rec_seq.c: Prevent `sccsid' definition by using the
	same #if condition as in the other db files.

	* intl/Makefile: Add -Wno-unused CFLAGS for compilation of
	bindtextdom.c, finddomain.c, and localealias.c.

	* intl/dcgettext.c: Don't define prototype for getcwd() when
	compiling in glibc.

	* libio/cleanup.c: Add prototype for _IO_register_cleanup.

	* libio/filedoalloc.c, libio/fileops.c, libio/iopopen.c: Don't
        define _POSIX_SOURCE unconditionally.

	* libio/filedoalloc.c, libio/iopopen.c: Include <unistd.h> if
        compiling in glibc.

	* libio/fileops.c (_IO_file_close_it): Don't sync file, call
	flush instead.  This relaxes the rules from POSIX.1 about
	changing the active handle a bit.

	* libio/iofopncook.c (struct _IO_cookie_file): Move definition
	into <libio.h>.
	Add prototypes for local functions to prevent warnings.

	* libio/iopopen.c: Change prototypes for _IO_fork, _IO_pipe, and
        _IO_DUP2 to contain complete parameter list.

	* libio/libio.h: Add definition of struct _IO_cookie_file.

	* libio/libioP.h: Add prototypes for _IO_vasprintf, _IO_vdprintf,
        and _IO_vsnprintf.

	* libio/memstream.c: Include <stdio.h>.

	* libio/stdio.h: Add prototypes for fopencookie,
        __stdio_gen_tempname, __vfscanf, __vsscanf, and __vsnprintf.

	* libio/strops.c: Avoid useless expression in `for' initializer.

	* locale/findlocale.c: Add some casts to prevent warnings.

	* locale/programs/locfile.c (write_locale_data): Don't use
	double `/' in locale binary file.

	* posix/unistd.h: Remove prototype for `reboot'.

	Update from bind-4.9.4-T1A.
	* resolv/Makefile (routines): Add inet_ntop and inet_pton.
	* resolv/arpa/nameser.h: Add definition of IN6ADDRSZ.
	* resolv/gethnamaddr.c, resolv/getnetnamadr.c, resolv/res_comp.c,
	resolv/res_debug.c, resolv/res_init.c

	* resolv/inet_ntop.c, resolv/inet_pton.c: New files.

	* resolv/resolv.h: Add RES_USE_INET6 flag.
	(__dn_isvalid): Renamed to __res_dnok.
	Add prototypes for __res_ownok and __res_mailok.

	* stdio-common/Makefile: Add -Wno-unused to CFLAGS for _itoa.c.

	* stdio-common/getline.c, stdio-common/vfscanf.c,
        sysdeps/posix/tempname.c: Don't use <ansidecl.h> anymore.

	* sysdeps/unix/sysv/linux/Makefile [$subdir == misc]
        (sysdep_routines): Add s_reboot.
	(install-others): Add $(includedir)/sys/syscall.h.
	New rule for $(includedir)/sys/syscall.h to produce from
	<asm/unistd.h>.

	* sysdeps/unix/sysv/linux/reboot.c: New file.  Make single
        argument function call 3 argument system call.

	* sysdeps/unix/sysv/linux/sys/reboot.h: New file.  Linux specific
	definition for reboot function.

	* sysdeps/unix/sysv/linux/syscall.h: Remove old and obsolete
        comment.

	* sysdeps/unix/sysv/linux/syscalls.list: Rename function for
	reboot syscall to __syscall_reboot.

	* wcsmbs/wchar.h: Protect prototypes for wcstof and wcstold by
	__USE_GNU, not USE_GNU.

Tue May 21 21:55:49 1996  David Mosberger-Tang  <davidm@AZStarNet.com>

	* locale/programs/charset.c, locale/programs/ld-collate.c:
	Add casts to prevent warnings on 64-bit machines.

	* locale/programs/ld-monetary.c: Don't do unnecessary tests for
	int_frac_digits and frac_digits which only produce warnings.

Mon May 13 23:45:29 1996  David Mosberger-Tang  <davidm@AZStarNet.com>

	* inet/arpa/inet.h: Backup return type of inet_addr to u_long.
	* resolv/inet_addr.c: Likewise.

	* resolv/Makefile (distribute): Add res_hconf.h
	(routines): Add res_hconf.

	* resolv/gethnamaddr.c: Add support for /etc/host.conf.

	* resolv/res_init.c: Initialize /etc/host.conf reader.

	* resolv/res_hconf.c, resolv/res_hconf.h: New files.
        Implementation of reading /etc/host.conf.

Wed May 22 21:21:15 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* Rules (%.out rules): Prepend $($*-ENV) to the command.

	* sysdeps/unix/sysv/linux/i386/brk.c (___brk_addr): Define as weak
	alias for __curbrk.

Wed May 22 19:37:27 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* hurd/hurdexec.c (_hurd_exec): Pass INIT_TRACEMASK.
	* hurd/hurdmsg.c (set_int): Support INIT_TRACEMASK.

Wed May 22 18:47:31 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/mach/hurd/getcwd.c
	(_hurd_canonicalize_directory_name_internal): New function, broken out
	of __getcwd.
	(__getcwd): Use it.
	(__canonicalize_directory_name_internal): New function using it.

	* sysdeps/posix/getcwd.c (__canonicalize_directory_name_internal): New
	function, broken out of __getcwd.
	(__getcwd): Use it.

Wed May 22 18:14:05 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* string/argz-create.c (__argz_create): Correctly calculate length.

	* string/argz-extract.c (__argz_extract): Add terminating 0 entry.
	* hurd/hurdstartup.c (_hurd_startup): ... and don't so here.

	[HAVE_VMSDIR_H]: Include "vmsdir.h".
	(glob) [VMS]: Don't grok ~.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/mach/hurd/getcwd.c47
-rw-r--r--sysdeps/posix/getcwd.c29
-rw-r--r--sysdeps/posix/tempname.c19
-rw-r--r--sysdeps/unix/sysv/linux/Makefile23
-rw-r--r--sysdeps/unix/sysv/linux/reboot.c28
-rw-r--r--sysdeps/unix/sysv/linux/sys/reboot.h43
-rw-r--r--sysdeps/unix/sysv/linux/syscall.h10
-rw-r--r--sysdeps/unix/sysv/linux/syscalls.list2
8 files changed, 163 insertions, 38 deletions
diff --git a/sysdeps/mach/hurd/getcwd.c b/sysdeps/mach/hurd/getcwd.c
index ed8ed96697..463b28ce29 100644
--- a/sysdeps/mach/hurd/getcwd.c
+++ b/sysdeps/mach/hurd/getcwd.c
@@ -29,14 +29,16 @@ Cambridge, MA 02139, USA.  */
 #include <fcntl.h>
 
 
-/* Get the pathname of the current working directory, and put it in SIZE
-   bytes of BUF.  Returns NULL if the directory couldn't be determined or
-   SIZE was too small.  If successful, returns BUF.  In GNU, if BUF is
-   NULL, an array is allocated with `malloc'; the array is SIZE bytes long,
-   unless SIZE <= 0, in which case it is as big as necessary.  */
+/* Get the canonical absolute name of the given directory port, and put it
+   in SIZE bytes of BUF.  Returns NULL if the directory couldn't be
+   determined or SIZE was too small.  If successful, returns BUF.  In GNU,
+   if BUF is NULL, an array is allocated with `malloc'; the array is SIZE
+   bytes long, unless SIZE <= 0, in which case it is as big as necessary.  */
 
 char *
-__getcwd (char *buf, size_t size)
+_hurd_canonicalize_directory_name_internal (file_t thisdir,
+					    char *buf,
+					    size_t size)
 {
   error_t err;
   mach_port_t rootid, thisid, rootdevid, thisdevid;
@@ -91,10 +93,9 @@ __getcwd (char *buf, size_t size)
     return __hurd_fail (err), NULL;
   __mach_port_deallocate (__mach_task_self (), rootdevid);
 
-  /* Get a port to our current working directory and stat it.  */
+  /* Stat the port to the directory of interest.  */
 
-  if (err = __USEPORT (CRDIR, __io_identity (port,
-					     &thisid, &thisdevid, &thisino)))
+  if (err = __io_identity (thisdir, &thisid, &thisdevid, &thisino))
     {
       __mach_port_deallocate (__mach_task_self (), rootid);
       return __hurd_fail (err), NULL;
@@ -255,4 +256,32 @@ __getcwd (char *buf, size_t size)
   cleanup ();
   return NULL;
 }
+
+char *
+__canonicalize_directory_name_internal (thisdir, buf, size)
+     const char *thisdir;
+     char *buf;
+     size_t size;
+{
+  char *result;
+  file_t port = __file_name_lookup (thisdir, 0, 0);
+  if (port == MACH_PORT_NULL)
+    return NULL;
+  result = _hurd_canonicalize_directory_name_internal (port, buf, size);
+  __mach_port_deallocate (__mach_task_self (), port);
+  return result;
+}
+
+/* Get the pathname of the current working directory, and put it in SIZE
+   bytes of BUF.  Returns NULL if the directory couldn't be determined or
+   SIZE was too small.  If successful, returns BUF.  In GNU, if BUF is
+   NULL, an array is allocated with `malloc'; the array is SIZE bytes long,
+   unless SIZE <= 0, in which case it is as big as necessary.  */
+char *
+__getcwd (char *buf, size_t size)
+{
+  return __USEPORT (CWDIR,
+		    _hurd_canonicalize_directory_name_internal (port,
+								buf, size));
+}
 weak_alias (__getcwd, getcwd)
diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c
index af858a2643..05f626f869 100644
--- a/sysdeps/posix/getcwd.c
+++ b/sysdeps/posix/getcwd.c
@@ -180,18 +180,15 @@ extern char *alloca ();
 #define	__lstat	stat
 #endif
 
-#ifndef _LIBC
-#define __getcwd getcwd
-#endif
-
-/* Get the pathname of the current working directory, and put it in SIZE
+/* Get the canonical absolute name of the named directory, and put it in SIZE
    bytes of BUF.  Returns NULL if the directory couldn't be determined or
    SIZE was too small.  If successful, returns BUF.  In GNU, if BUF is
    NULL, an array is allocated with `malloc'; the array is SIZE bytes long,
    unless SIZE <= 0, in which case it is as big as necessary.  */
 
 char *
-__getcwd (buf, size)
+__canonicalize_directory_name_internal (thisdir, buf, size)
+     const char *thisdir;
      char *buf;
      size_t size;
 {
@@ -230,7 +227,7 @@ __getcwd (buf, size)
   pathp = path + size;
   *--pathp = '\0';
 
-  if (__lstat (".", &st) < 0)
+  if (__lstat (thisdir, &st) < 0)
     return NULL;
   thisdev = st.st_dev;
   thisino = st.st_ino;
@@ -369,6 +366,24 @@ __getcwd (buf, size)
     free ((__ptr_t) dotlist);
   return NULL;
 }
+
+/* Get the pathname of the current working directory, and put it in SIZE
+   bytes of BUF.  Returns NULL if the directory couldn't be determined or
+   SIZE was too small.  If successful, returns BUF.  In GNU, if BUF is
+   NULL, an array is allocated with `malloc'; the array is SIZE bytes long,
+   unless SIZE <= 0, in which case it is as big as necessary.  */
+
+#ifndef _LIBC
+#define __getcwd getcwd
+#endif
+
+char *
+__getcwd (buf, size)
+     char *buf;
+     size_t size;
+{
+  return __canonicalize_directory_name_internal (".", buf, size);
+}
 
 #ifdef _LIBC
 weak_alias (__getcwd, getcwd)
diff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c
index c70a6e8d35..fdddae2d0c 100644
--- a/sysdeps/posix/tempname.c
+++ b/sysdeps/posix/tempname.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
@@ -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 <errno.h>
 #include <stddef.h>
 #include <stdio.h>
@@ -34,7 +33,7 @@ Cambridge, MA 02139, USA.  */
 
 /* Return nonzero if DIR is an existent directory.  */
 static int
-DEFUN(diraccess, (dir), CONST char *dir)
+diraccess (const char *dir)
 {
   struct stat buf;
   return __stat (dir, &buf) == 0 && S_ISDIR (buf.st_mode);
@@ -42,7 +41,7 @@ DEFUN(diraccess, (dir), CONST char *dir)
 
 /* Return nonzero if FILE exists.  */
 static int
-DEFUN(exists, (file), CONST char *file)
+exists (const char *file)
 {
   /* We can stat the file even if we can't read its data.  */
   struct stat st;
@@ -64,7 +63,7 @@ DEFUN(exists, (file), CONST char *file)
 
 
 /* These are the characters used in temporary filenames.  */
-static CONST char letters[] =
+static const char letters[] =
   "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
 
 /* Generate a temporary filename and return it (in a static buffer).  If
@@ -82,13 +81,11 @@ static CONST char letters[] =
    existing file will be returned.  When the cycle reaches its end
    (12345ZZZ), NULL is returned.  */
 char *
-DEFUN(__stdio_gen_tempname, (dir, pfx, dir_search, lenptr, streamptr),
-      CONST char *dir AND CONST char *pfx AND
-      int dir_search AND size_t *lenptr AND
-      FILE **streamptr)
+__stdio_gen_tempname (const char *dir, const char *pfx, int dir_search,
+		      size_t *lenptr, FILE **streamptr)
 {
   int saverrno = errno;
-  static CONST char tmpdir[] = P_tmpdir;
+  static const char tmpdir[] = P_tmpdir;
   static size_t indices[2];
   size_t *idx;
   static char buf[FILENAME_MAX];
@@ -98,7 +95,7 @@ DEFUN(__stdio_gen_tempname, (dir, pfx, dir_search, lenptr, streamptr),
 
   if (dir_search)
     {
-      register CONST char *d = getenv ("TMPDIR");
+      register const char *d = getenv ("TMPDIR");
       if (d != NULL && !diraccess (d))
 	d = NULL;
       if (d == NULL && dir != NULL && diraccess (dir))
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index d25e0525ca..8c9fcfe934 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -16,8 +16,29 @@ endif
 
 ifeq ($(subdir), misc)
 sysdep_routines += mount umount xmknod s_ptrace s_sysctl sysctl llseek \
-setfsgid setfsuid sysinfo uselib
+setfsgid setfsuid sysinfo uselib s_reboot
 headers += sys/mount.h sys/sysinfo.h sys/acct.h sys/sysctl.h
+
+install-others += $(includedir)/sys/syscall.h
+
+$(includedir)/sys/syscall.h::
+	@rm -f $(objpfx)syscall.h $(objpfx)syscall.sed
+	@(os=`uname -sr`; \
+	  echo -e '1i\\\n#ifndef _SYS_SYSCALL_H\\'; \
+	  echo -e '#define _SYS_SYSCALL_H\t1\\\n\\'; \
+	  echo -e -n '/* This file is automatically generated as part of '; \
+	  echo -e 'GNU libc-$(version)\\'; \
+	  echo -e "   on a system running $$os.  */\\"; echo; \
+	  echo -e -n 's/#define __NR_\\([A-Za-z0-9_]*\\)[ \t]*__NR_\\(.*\\)/';\
+	  echo -e '#define SYS_\\1 SYS_\\2/p'; \
+	  echo -e -n 's/#define __NR_\\([A-Za-z0-9_]*\\)[ \t]*\\(.*\\)/';\
+	  echo -e '#define SYS_\\1 \\2/p'; \
+	  echo -e '$$i\\\n\\\n#endif\t/* sys/syscall.h */\nd') \
+	    >  $(objpfx)syscall.sed
+	set -- `echo '#include <asm/unistd.h>'|$(CC) -M -E -`; \
+	sed -f $(objpfx)syscall.sed $$2 > $(objpfx)syscall.h
+	$(INSTALL_DATA) $(objpfx)syscall.h $@
+	rm -f $(objpfx)syscall.h $(objpfx)syscall.sed
 endif
 
 ifeq ($(subdir), time)
diff --git a/sysdeps/unix/sysv/linux/reboot.c b/sysdeps/unix/sysv/linux/reboot.c
new file mode 100644
index 0000000000..ecda522444
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/reboot.c
@@ -0,0 +1,28 @@
+/* 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 <unistd.h>
+
+extern int __syscall_reboot (int magic, int magic_too, int flag);
+
+/* Call kernel with additional two arguments the syscall requires.  */
+int
+reboot (int howto)
+{
+  return __syscall_reboot (0xfee1dead, 672274793, howto);
+}
diff --git a/sysdeps/unix/sysv/linux/sys/reboot.h b/sysdeps/unix/sysv/linux/sys/reboot.h
new file mode 100644
index 0000000000..a7b86fa804
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sys/reboot.h
@@ -0,0 +1,43 @@
+/* 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.  */
+
+/* This file should define RB_* macros to be used as flag
+   bits in the argument to the `reboot' system call.  */
+
+#ifndef _SYS_REBOOT_H
+
+#define _SYS_REBOOT_H	1
+#include <features.h>
+
+/* Perform a hard reset now.  */
+#define RB_AUTOBOOT	0x01234567
+
+/* Halt the system.  */
+#define RB_HALT_SYSTEM	0xcdef0123
+
+/* Enable reboot using Ctrl-Alt-Delete keystroke.  */
+#define RB_ENABLE_CAD	0x89abcdef
+
+/* Disable reboot using Ctrl-Alt-Delete keystroke.  */
+#define RB_DISABLE_CAD	0
+
+
+/* Reboot or halt the system.  */
+extern int reboot __P ((int __howto));
+
+#endif	/* sys/reboot.h */
diff --git a/sysdeps/unix/sysv/linux/syscall.h b/sysdeps/unix/sysv/linux/syscall.h
index efe285c1fe..62fca57d70 100644
--- a/sysdeps/unix/sysv/linux/syscall.h
+++ b/sysdeps/unix/sysv/linux/syscall.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
+/* Copyright (C) 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
@@ -24,12 +24,4 @@ Cambridge, MA 02139, USA.  */
    from the kernel sources.  */
 #include <asm/unistd.h>
 
-/* Among the system calls defined there are
-	_setdomainname	
-	_fchdir	
-	_readv	
-	_writev	
-   (This is a hack for the autoconf mechanism.  Don't change a single
-    character, esp white spaces, unless you know what you are doing!)  */
-
 #endif
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index 019d746a73..f401bc8c60 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -23,7 +23,7 @@ munlockall	-	munlockall	0	__munlockall	munlockall
 nanosleep	-	nanosleep	2	nanosleep
 personality	init-first personality	1	__personality	personality
 pipe		-	pipe		1	__pipe		pipe
-reboot		-	reboot		3	reboot
+s_reboot	-	reboot		3	__syscall_reboot
 s_getpriority	getpriority getpriority	2	__syscall_getpriority
 s_ptrace	ptrace	ptrace		4	__syscall_ptrace
 s_sigsuspend	sigsuspend sigsuspend	3	__syscall_sigsuspend