* io/Makefile (routines): Add euidaccess.

* sysdeps/mach/hurd/euidaccess.c: New file.
	* sysdeps/stub/euidaccess.c: New file.
	* posix/unistd.h [__USE_GNU] (euidaccess): Declare it.

	* dirent/Makefile (routines): Add dirfd.
	* sysdeps/stub/dirfd.c: New file.
	* sysdeps/unix/dirfd.c: New file.
	* sysdeps/unix/dirstream.h (_DIR_dirfd): New macro.
	* dirent/dirent.h (dirfd): Declare new function.  Define as macro
 	_DIR_dirfd if that is defined.
	* sysdeps/mach/hurd/dirstream.h (DIR): Replace `__port' member
 	with `void *__fd'.
	* sysdeps/mach/hurd/opendir.c: Use DIRP->__fd instead of DIRP->__port.
	Open the file with `open'; set FD_CLOEXEC on the fd.
	* sysdeps/mach/hurd/closedir.c: Likewise.
	* sysdeps/mach/hurd/readdir.c: Likewise.
	* sysdeps/mach/hurd/dirfd.c: New file.

	* posix/Makefile (glob/configure): Do cvs commit if there is a CVS
 	directory.
	(glob/ChangeLog): Likewise.

	* locale/locale.h (LC_*): Use small integers instead of bit masks.
This commit is contained in:
Roland McGrath 1995-02-25 01:23:32 +00:00
parent e66f63fb63
commit 22a1292a42
20 changed files with 1348 additions and 678 deletions

View File

@ -1,5 +1,30 @@
Fri Feb 24 14:40:48 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* io/Makefile (routines): Add euidaccess.
* sysdeps/mach/hurd/euidaccess.c: New file.
* sysdeps/stub/euidaccess.c: New file.
* posix/unistd.h [__USE_GNU] (euidaccess): Declare it.
* dirent/Makefile (routines): Add dirfd.
* sysdeps/stub/dirfd.c: New file.
* sysdeps/unix/dirfd.c: New file.
* sysdeps/unix/dirstream.h (_DIR_dirfd): New macro.
* dirent/dirent.h (dirfd): Declare new function. Define as macro
_DIR_dirfd if that is defined.
* sysdeps/mach/hurd/dirstream.h (DIR): Replace `__port' member
with `void *__fd'.
* sysdeps/mach/hurd/opendir.c: Use DIRP->__fd instead of DIRP->__port.
Open the file with `open'; set FD_CLOEXEC on the fd.
* sysdeps/mach/hurd/closedir.c: Likewise.
* sysdeps/mach/hurd/readdir.c: Likewise.
* sysdeps/mach/hurd/dirfd.c: New file.
* posix/Makefile (glob/configure): Do cvs commit if there is a CVS
directory.
(glob/ChangeLog): Likewise.
* locale/locale.h (LC_*): Use small integers instead of bit masks.
* stdio/bug4.c: Put temporary files in /tmp.
* stdio/bug3.c: Likewise.
* stdio/bug5.c: Likewise.

5
NEWS
View File

@ -1,4 +1,4 @@
GNU C Library NEWS -- history of user-visible changes. 17 February 1995
GNU C Library NEWS -- history of user-visible changes. 24 February 1995
Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
See the end for copying conditions.
@ -63,6 +63,9 @@ Version 1.10
numbers as indicated by the locale. In the default "C" locale, numbers
are not grouped; but locales for specific countries will define the
usual conventions (i.e. separate thousands with `,' in the US locale).
* New function `euidaccess' checks allowed access to a file like `access',
but using the effective IDs instead of the real IDs.
Version 1.09

View File

@ -24,7 +24,7 @@ subdir := dirent
headers := dirent.h dirstream.h
routines := opendir closedir readdir rewinddir \
seekdir telldir scandir alphasort \
getdents
getdents dirfd
distribute := direct.h
tests := list tst-seekdir

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1992, 1993, 1994, 1995 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
@ -96,6 +96,13 @@ extern void rewinddir __P ((DIR * __dirp));
#if defined(__USE_BSD) || defined(__USE_MISC)
/* Return the file descriptor used by DIRP. */
extern int dirfd __P ((DIR *__dirp));
#if defined (__OPTIMIZE__) && defined (_DIR_dirfd)
#define dirfd(dirp) _DIR_dirfd (dirp)
#endif
#ifndef MAXNAMLEN
/* Get the definitions of the POSIX.1 limits. */
#include <posix1_lim.h>

View File

@ -31,7 +31,7 @@ routines := \
mkfifo \
stat fstat lstat \
umask chmod fchmod mkdir \
open close read write lseek access \
open close read write lseek access euidaccess \
fcntl flock lockf \
dup dup2 pipe \
creat \

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1992, 1995 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
@ -28,16 +28,14 @@ Cambridge, MA 02139, USA. */
__BEGIN_DECLS
/* These are the possibilities for the first argument to setlocale.
Note that although they are bit masks, they cannot be OR'd together
to form a new argument to pass. They must be used one at a time. */
#define LC_COLLATE (1 << 0)
#define LC_CTYPE (1 << 1)
#define LC_MONETARY (1 << 2)
#define LC_NUMERIC (1 << 3)
#define LC_TIME (1 << 4)
#define LC_RESPONSE (1 << 5)
#define LC_ALL (LC_COLLATE|LC_CTYPE|LC_MONETARY|LC_NUMERIC|LC_TIME|\
LC_RESPONSE)
The code assumes that LC_ALL is the highest value, and zero the lowest. */
#define LC_COLLATE 0
#define LC_CTYPE 1
#define LC_MONETARY 2
#define LC_NUMERIC 3
#define LC_TIME 4
#define LC_MESSAGES 5
#define LC_ALL 6
/* Structure giving information about numeric and monetary notation. */

View File

@ -451,7 +451,7 @@ however---BSD does not provide any way to free such blocks.
@comment malloc.h stdlib.h
@comment BSD
@deftypefun {void *} memalign (size_t @var{size}, size_t @var{boundary})
@deftypefun {void *} memalign (size_t @var{boundary}, size_t @var{size})
The @code{memalign} function allocates a block of @var{size} bytes whose
address is a multiple of @var{boundary}. The @var{boundary} must be a
power of two! The function @code{memalign} works by calling
@ -469,7 +469,7 @@ as the value of the second argument. It is implemented like this:
void *
valloc (size_t size)
@{
return memalign (size, getpagesize ());
return memalign (getpagesize (), size);
@}
@end smallexample
@c !!! xref getpagesize

View File

@ -70,11 +70,13 @@ glob/%.h: %.h
glob/configure: glob/configure.in
cd glob; autoconf $(ACFLAGS)
test -d CVS && cvs commit -m'Regenerated: autoconf $(ACFLAGS) $<' $@
glob/ChangeLog: ../ChangeLog
changelog-extract --regexp 'posix/(glob|fnmatch).*' < $< > $@.new
chmod a-w $@.new
mv -f $@.new $@
test -d CVS && cvs commit -mRegenerated $@
%.Z: %
compress -c $< > $@-tmp

1700
posix/glob/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -107,10 +107,16 @@ __BEGIN_DECLS
#define X_OK 1 /* Test for execute permission. */
#define F_OK 0 /* Test for existence. */
/* Test for access to NAME. */
/* Test for access to NAME using the real UID and real GID. */
extern int __access __P ((__const char *__name, int __type));
extern int access __P ((__const char *__name, int __type));
#ifdef __USE_GNU
/* Test for access to NAME using the effective UID and GID
(as normal file operations use). */
extern int euidaccess __P ((__const char *__name, int __type));
#endif
/* Values for the WHENCE argument to lseek. */
#ifndef _STDIO_H /* <stdio.h> has the same definitions. */

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1993 Free Software Foundation, Inc.
/* Copyright (C) 1993, 1995 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
@ -37,13 +37,13 @@ DEFUN(closedir, (dirp), DIR *dirp)
return -1;
}
if ((err = __vm_deallocate (__mach_task_self (),
(vm_address_t) dirp->__data, dirp->__allocation))
|| (err = __mach_port_deallocate (__mach_task_self (), dirp->__port)))
{
errno = err;
return -1;
}
if (err = __vm_deallocate (__mach_task_self (),
(vm_address_t) dirp->__data, dirp->__allocation))
return __hurd_fail (err);
dirp->__data = NULL;
if (err = _hurd_fd_close (dirp->__fd))
return __hurd_fail (err);
free (dirp);

39
sysdeps/mach/hurd/dirfd.c Normal file
View File

@ -0,0 +1,39 @@
/* dirfd -- Return the file desciptor used by a DIR stream. Hurd version.
Copyright (C) 1995 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. */
#include <dirent.h>
#include <dirstream.h>
int
dirfd (DIR *dirp)
{
int fd;
__mutex_lock (&_hurd_dtable_lock);
for (fd = 0; fd < _hurd_dtablesize; ++fd)
if (_hurd_dtable[fd] == dirp->__fd)
break;
if (fd == _hurd_dtablesize)
{
errno = EINVAL
fd = -1;
}
__mutex_unlock (&_hurd_dtable_lock);
return fd;
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1993, 1994 Free Software Foundation, Inc.
/* Copyright (C) 1993, 1994, 1995 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
@ -27,8 +27,7 @@ Cambridge, MA 02139, USA. */
typedef struct
{
/* XXX we need a namespace-clean name for mach_port_t! */
unsigned int __port; /* Port to the directory. */
void *__fd; /* `struct hurd_fd' pointer for descriptor. */
char *__data; /* Directory block. */
int __entry_data; /* Entry number `__data' corresponds to. */
char *__ptr; /* Current pointer into the block. */

View File

@ -0,0 +1,58 @@
/* Test for access to FILE using effective UID and GID. Hurd version.
Copyright (C) 1991, 1995 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. */
#include <errno.h>
#include <stddef.h>
#include <unistd.h>
#include <hurd.h>
int
euidaccess (file, type)
const char *file;
int type;
{
file_t port;
int allowed, flags;
port = __file_name_lookup (file, 0, 0);
if (port == MACH_PORT_NULL)
return -1;
/* Find out what types of access we are allowed to this file. */
err = __file_check_access (file, &allowed);
__mach_port_deallocate (__mach_task_self (), file);
if (err)
return __hurd_fail (err);
flags = 0;
if (type & R_OK)
flags |= O_READ;
if (type & W_OK)
flags |= O_WRITE;
if (type & X_OK)
flags |= O_EXEC;
if (flags & ~allowed)
/* We are not allowed all the requested types of access. */
return __hurd_fail (EACCES);
return 0;
}
weak_alias (__access, access)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1993, 1994 Free Software Foundation, Inc.
/* Copyright (C) 1993, 1994, 1995 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
@ -36,21 +36,29 @@ DEFUN(opendir, (name), CONST char *name)
{
DIR *dirp;
file_t port;
int fd;
port = __file_name_lookup (name, O_RDONLY, 0);
if (port == MACH_PORT_NULL)
fd = __open (name, O_RDONLY);
if (fd < 0)
return NULL;
/* XXX this port should be deallocated on exec */
dirp = (DIR *) malloc (sizeof (DIR));
if (dirp == NULL)
{
__mach_port_deallocate (__mach_task_self (), port);
__close (fd);
return NULL;
}
dirp->__port = port;
/* Extract the pointer to the descriptor structure. */
__mutex_lock (&_hurd_dtable_lock);
dirp->__fd = _hurd_dtable[fd];
__mutex_unlock (&_hurd_dtable_lock);
/* Set the descriptor to close on exec. */
__spin_lock (&dirp->__fd->port.lock);
dirp->__fd->flags |= FD_CLOEXEC;
__spin_unlock (&dirp->__fd->port.lock);
dirp->__data = dirp->__ptr = NULL;
dirp->__entry_data = dirp->__entry_ptr = 0;
dirp->__allocation = 0;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1993, 1994 Free Software Foundation, Inc.
/* Copyright (C) 1993, 1994, 1995 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
@ -49,8 +49,11 @@ DEFUN(readdir, (dirp), DIR *dirp)
int nentries;
error_t err;
if (err = __dir_readdir (dirp->__port, &data, &dirp->__size,
dirp->__entry_ptr, -1, 0, &nentries))
if (err = HURD_FD_PORT_USE (dirp->__fd,
__dir_readdir (dirp->__port,
&data, &dirp->__size,
dirp->__entry_ptr,
-1, 0, &nentries)))
return __hurd_fail (err), NULL;
/* DATA now corresponds to entry index DIRP->__entry_ptr. */

30
sysdeps/stub/dirfd.c Normal file
View File

@ -0,0 +1,30 @@
/* dirfd -- Return the file desciptor used by a DIR stream. Stub version.
Copyright (C) 1995 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. */
#include <dirent.h>
#include <dirstream.h>
#include <errno.h>
int
dirfd (dirp)
FILE *dirp;
{
errno = ENOSYS;
return -1;
}

38
sysdeps/stub/euidaccess.c Normal file
View File

@ -0,0 +1,38 @@
/* Test for access to FILE using effective UID and GID. Stub version.
Copyright (C) 1991, 1995 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. */
#include <errno.h>
#include <stddef.h>
#include <unistd.h>
int
euidaccess (file, type)
const char *file;
int type;
{
if (file == NULL || (type & ~(R_OK|W_OK|X_OK|F_OK)) != 0)
{
errno = EINVAL;
return -1;
}
errno = ENOSYS;
return -1;
}
stub_warning (euidaccess)

28
sysdeps/unix/dirfd.c Normal file
View File

@ -0,0 +1,28 @@
/* dirfd -- Return the file desciptor used by a DIR stream. Unix version.
Copyright (C) 1995 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. */
#include <dirent.h>
#include <dirstream.h>
int
dirfd (dirp)
FILE *dirp;
{
return dirp->__fd;
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1993 Free Software Foundation, Inc.
/* Copyright (C) 1993, 1995 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
@ -40,4 +40,6 @@ typedef struct
struct dirent __entry; /* Returned by `readdir'. */
} DIR;
#define _DIR_dirfd(dirp) ((dirp)->__fd)
#endif /* dirstream.h */