* 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> 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/bug4.c: Put temporary files in /tmp.
* stdio/bug3.c: Likewise. * stdio/bug3.c: Likewise.
* stdio/bug5.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. Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
See the end for copying conditions. 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 numbers as indicated by the locale. In the default "C" locale, numbers
are not grouped; but locales for specific countries will define the are not grouped; but locales for specific countries will define the
usual conventions (i.e. separate thousands with `,' in the US locale). 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 Version 1.09

View File

@ -24,7 +24,7 @@ subdir := dirent
headers := dirent.h dirstream.h headers := dirent.h dirstream.h
routines := opendir closedir readdir rewinddir \ routines := opendir closedir readdir rewinddir \
seekdir telldir scandir alphasort \ seekdir telldir scandir alphasort \
getdents getdents dirfd
distribute := direct.h distribute := direct.h
tests := list tst-seekdir 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or 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) #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 #ifndef MAXNAMLEN
/* Get the definitions of the POSIX.1 limits. */ /* Get the definitions of the POSIX.1 limits. */
#include <posix1_lim.h> #include <posix1_lim.h>

View File

@ -31,7 +31,7 @@ routines := \
mkfifo \ mkfifo \
stat fstat lstat \ stat fstat lstat \
umask chmod fchmod mkdir \ umask chmod fchmod mkdir \
open close read write lseek access \ open close read write lseek access euidaccess \
fcntl flock lockf \ fcntl flock lockf \
dup dup2 pipe \ dup dup2 pipe \
creat \ 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -28,16 +28,14 @@ Cambridge, MA 02139, USA. */
__BEGIN_DECLS __BEGIN_DECLS
/* These are the possibilities for the first argument to setlocale. /* These are the possibilities for the first argument to setlocale.
Note that although they are bit masks, they cannot be OR'd together The code assumes that LC_ALL is the highest value, and zero the lowest. */
to form a new argument to pass. They must be used one at a time. */ #define LC_COLLATE 0
#define LC_COLLATE (1 << 0) #define LC_CTYPE 1
#define LC_CTYPE (1 << 1) #define LC_MONETARY 2
#define LC_MONETARY (1 << 2) #define LC_NUMERIC 3
#define LC_NUMERIC (1 << 3) #define LC_TIME 4
#define LC_TIME (1 << 4) #define LC_MESSAGES 5
#define LC_RESPONSE (1 << 5) #define LC_ALL 6
#define LC_ALL (LC_COLLATE|LC_CTYPE|LC_MONETARY|LC_NUMERIC|LC_TIME|\
LC_RESPONSE)
/* Structure giving information about numeric and monetary notation. */ /* 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 malloc.h stdlib.h
@comment BSD @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 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 address is a multiple of @var{boundary}. The @var{boundary} must be a
power of two! The function @code{memalign} works by calling 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 * void *
valloc (size_t size) valloc (size_t size)
@{ @{
return memalign (size, getpagesize ()); return memalign (getpagesize (), size);
@} @}
@end smallexample @end smallexample
@c !!! xref getpagesize @c !!! xref getpagesize

View File

@ -70,11 +70,13 @@ glob/%.h: %.h
glob/configure: glob/configure.in glob/configure: glob/configure.in
cd glob; autoconf $(ACFLAGS) cd glob; autoconf $(ACFLAGS)
test -d CVS && cvs commit -m'Regenerated: autoconf $(ACFLAGS) $<' $@
glob/ChangeLog: ../ChangeLog glob/ChangeLog: ../ChangeLog
changelog-extract --regexp 'posix/(glob|fnmatch).*' < $< > $@.new changelog-extract --regexp 'posix/(glob|fnmatch).*' < $< > $@.new
chmod a-w $@.new chmod a-w $@.new
mv -f $@.new $@ mv -f $@.new $@
test -d CVS && cvs commit -mRegenerated $@
%.Z: % %.Z: %
compress -c $< > $@-tmp 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 X_OK 1 /* Test for execute permission. */
#define F_OK 0 /* Test for existence. */ #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));
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. */ /* Values for the WHENCE argument to lseek. */
#ifndef _STDIO_H /* <stdio.h> has the same definitions. */ #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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -37,13 +37,13 @@ DEFUN(closedir, (dirp), DIR *dirp)
return -1; return -1;
} }
if ((err = __vm_deallocate (__mach_task_self (), if (err = __vm_deallocate (__mach_task_self (),
(vm_address_t) dirp->__data, dirp->__allocation)) (vm_address_t) dirp->__data, dirp->__allocation))
|| (err = __mach_port_deallocate (__mach_task_self (), dirp->__port))) return __hurd_fail (err);
{ dirp->__data = NULL;
errno = err;
return -1; if (err = _hurd_fd_close (dirp->__fd))
} return __hurd_fail (err);
free (dirp); 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -27,8 +27,7 @@ Cambridge, MA 02139, USA. */
typedef struct typedef struct
{ {
/* XXX we need a namespace-clean name for mach_port_t! */ void *__fd; /* `struct hurd_fd' pointer for descriptor. */
unsigned int __port; /* Port to the directory. */
char *__data; /* Directory block. */ char *__data; /* Directory block. */
int __entry_data; /* Entry number `__data' corresponds to. */ int __entry_data; /* Entry number `__data' corresponds to. */
char *__ptr; /* Current pointer into the block. */ 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or 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; DIR *dirp;
file_t port; file_t port;
int fd;
port = __file_name_lookup (name, O_RDONLY, 0); fd = __open (name, O_RDONLY);
if (port == MACH_PORT_NULL) if (fd < 0)
return NULL; return NULL;
/* XXX this port should be deallocated on exec */
dirp = (DIR *) malloc (sizeof (DIR)); dirp = (DIR *) malloc (sizeof (DIR));
if (dirp == NULL) if (dirp == NULL)
{ {
__mach_port_deallocate (__mach_task_self (), port); __close (fd);
return NULL; 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->__data = dirp->__ptr = NULL;
dirp->__entry_data = dirp->__entry_ptr = 0; dirp->__entry_data = dirp->__entry_ptr = 0;
dirp->__allocation = 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -49,8 +49,11 @@ DEFUN(readdir, (dirp), DIR *dirp)
int nentries; int nentries;
error_t err; error_t err;
if (err = __dir_readdir (dirp->__port, &data, &dirp->__size, if (err = HURD_FD_PORT_USE (dirp->__fd,
dirp->__entry_ptr, -1, 0, &nentries)) __dir_readdir (dirp->__port,
&data, &dirp->__size,
dirp->__entry_ptr,
-1, 0, &nentries)))
return __hurd_fail (err), NULL; return __hurd_fail (err), NULL;
/* DATA now corresponds to entry index DIRP->__entry_ptr. */ /* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or 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'. */ struct dirent __entry; /* Returned by `readdir'. */
} DIR; } DIR;
#define _DIR_dirfd(dirp) ((dirp)->__fd)
#endif /* dirstream.h */ #endif /* dirstream.h */