mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-22 19:00:07 +00:00
Fri Nov 15 12:27:25 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* sysdeps/posix/readv.c (readv): Change return type to ssize_t. Deansideclized. * sysdeps/posix/writev.c (writev): Likewise.
This commit is contained in:
parent
63afd6ae40
commit
ebe3b3ebb7
@ -37,6 +37,14 @@
|
|||||||
/*
|
/*
|
||||||
* HISTORY
|
* HISTORY
|
||||||
* $Log$
|
* $Log$
|
||||||
|
* Revision 1.12 1996/11/15 19:44:13 thomas
|
||||||
|
* Tue Nov 12 16:58:41 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
|
||||||
|
*
|
||||||
|
* * mach/msg-destroy.c (mach_msg_destroy_port,
|
||||||
|
* mach_msg_destroy_memory): Use prototype syntax.
|
||||||
|
* * hurd/hurdmalloc.c (more_memory, malloc_fork_prepare,
|
||||||
|
* malloc_fork_parent, malloc_fork_child): Likewise.
|
||||||
|
*
|
||||||
* Revision 1.11 1996/06/06 15:13:47 miles
|
* Revision 1.11 1996/06/06 15:13:47 miles
|
||||||
* Changes to bring in line with the hurd libthreads/malloc.c:
|
* Changes to bring in line with the hurd libthreads/malloc.c:
|
||||||
* (more_memory): Use assert_perror instead of MACH_CALL.
|
* (more_memory): Use assert_perror instead of MACH_CALL.
|
||||||
@ -206,9 +214,7 @@ malloc_init (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
more_memory(size, fl)
|
more_memory(int size, free_list_t fl)
|
||||||
int size;
|
|
||||||
register free_list_t fl;
|
|
||||||
{
|
{
|
||||||
register int amount;
|
register int amount;
|
||||||
register int n;
|
register int n;
|
||||||
@ -448,7 +454,8 @@ print_malloc_free_list()
|
|||||||
}
|
}
|
||||||
#endif DEBUG
|
#endif DEBUG
|
||||||
|
|
||||||
static void malloc_fork_prepare()
|
static void
|
||||||
|
malloc_fork_prepare(void)
|
||||||
/*
|
/*
|
||||||
* Prepare the malloc module for a fork by insuring that no thread is in a
|
* Prepare the malloc module for a fork by insuring that no thread is in a
|
||||||
* malloc critical section.
|
* malloc critical section.
|
||||||
@ -461,7 +468,8 @@ static void malloc_fork_prepare()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void malloc_fork_parent()
|
static void
|
||||||
|
malloc_fork_parent(void)
|
||||||
/*
|
/*
|
||||||
* Called in the parent process after a fork() to resume normal operation.
|
* Called in the parent process after a fork() to resume normal operation.
|
||||||
*/
|
*/
|
||||||
@ -473,7 +481,8 @@ static void malloc_fork_parent()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void malloc_fork_child()
|
static void
|
||||||
|
malloc_fork_child(void)
|
||||||
/*
|
/*
|
||||||
* Called in the child process after a fork() to resume normal operation.
|
* Called in the child process after a fork() to resume normal operation.
|
||||||
*/
|
*/
|
||||||
|
10
mach/mach.h
10
mach/mach.h
@ -1,5 +1,5 @@
|
|||||||
/* Standard header for all Mach programs.
|
/* Standard header for all Mach programs.
|
||||||
Copyright (C) 1993, 1994 Free Software Foundation, Inc.
|
Copyright (C) 1993, 1994, 1996 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
|
||||||
@ -71,6 +71,14 @@ mach_msg_server_timeout (boolean_t (*__demux) (mach_msg_header_t *__request,
|
|||||||
mach_msg_timeout_t __timeout);
|
mach_msg_timeout_t __timeout);
|
||||||
|
|
||||||
|
|
||||||
|
/* Deallocate all port rights and out-of-line memory in MSG. */
|
||||||
|
extern void
|
||||||
|
__mach_msg_destroy (mach_msg_header_t *msg),
|
||||||
|
mach_msg_destroy (mach_msg_header_t *msg);
|
||||||
|
|
||||||
|
/* XXX should be in mach/message.h. */
|
||||||
|
extern typeof (mach_msg) __mach_msg;
|
||||||
|
|
||||||
#define __need_FILE
|
#define __need_FILE
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
@ -26,6 +26,17 @@
|
|||||||
/*
|
/*
|
||||||
* HISTORY
|
* HISTORY
|
||||||
* $Log$
|
* $Log$
|
||||||
|
* Revision 1.4 1996/11/15 19:44:43 thomas
|
||||||
|
* Tue Nov 12 16:58:41 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
|
||||||
|
*
|
||||||
|
* * mach/mach.h (__mach_msg_destroy, mach_msg_destroy, __mach_msg):
|
||||||
|
* Provide prototypes.
|
||||||
|
*
|
||||||
|
* * mach/msg-destroy.c (mach_msg_destroy_port,
|
||||||
|
* mach_msg_destroy_memory): Use prototype syntax.
|
||||||
|
* * hurd/hurdmalloc.c (more_memory, malloc_fork_prepare,
|
||||||
|
* malloc_fork_parent, malloc_fork_child): Likewise.
|
||||||
|
*
|
||||||
* Revision 1.3 1995/01/23 22:16:52 roland
|
* Revision 1.3 1995/01/23 22:16:52 roland
|
||||||
* (mach_msg_destroy): Define as weak alias for __mach_msg_destroy.
|
* (mach_msg_destroy): Define as weak alias for __mach_msg_destroy.
|
||||||
*
|
*
|
||||||
@ -53,8 +64,8 @@
|
|||||||
#include <mach_init.h>
|
#include <mach_init.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void mach_msg_destroy_port();
|
static void mach_msg_destroy_port(mach_port_t, mach_msg_type_name_t);
|
||||||
static void mach_msg_destroy_memory();
|
static void mach_msg_destroy_memory(vm_offset_t, vm_size_t);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Routine: mach_msg_destroy
|
* Routine: mach_msg_destroy
|
||||||
|
@ -894,6 +894,73 @@ Go home and have a glass of warm, dairy-fresh milk.
|
|||||||
This error code has no purpose.
|
This error code has no purpose.
|
||||||
@end deftypevr
|
@end deftypevr
|
||||||
|
|
||||||
|
@comment errno.h
|
||||||
|
@comment XOPEN: Bad message
|
||||||
|
@deftypevr Macro int EBADMSG
|
||||||
|
@comment errno 107
|
||||||
|
@end deftypevr
|
||||||
|
|
||||||
|
@comment errno.h
|
||||||
|
@comment XOPEN: Identifier removed
|
||||||
|
@deftypevr Macro int EIDRM
|
||||||
|
@comment errno 108
|
||||||
|
@end deftypevr
|
||||||
|
|
||||||
|
@comment errno.h
|
||||||
|
@comment XOPEN: Multihop attempted
|
||||||
|
@deftypevr Macro int EMULTIHOP
|
||||||
|
@comment errno 109
|
||||||
|
@end deftypevr
|
||||||
|
|
||||||
|
@comment errno.h
|
||||||
|
@comment XOPEN: No data available
|
||||||
|
@deftypevr Macro int ENODATA
|
||||||
|
@comment errno 110
|
||||||
|
@end deftypevr
|
||||||
|
|
||||||
|
@comment errno.h
|
||||||
|
@comment XOPEN: Link has been severed
|
||||||
|
@deftypevr Macro int ENOLINK
|
||||||
|
@comment errno 111
|
||||||
|
@end deftypevr
|
||||||
|
|
||||||
|
@comment errno.h
|
||||||
|
@comment XOPEN: No message of desired type
|
||||||
|
@deftypevr Macro int ENOMSG
|
||||||
|
@comment errno 112
|
||||||
|
@end deftypevr
|
||||||
|
|
||||||
|
@comment errno.h
|
||||||
|
@comment XOPEN: Out of streams resources
|
||||||
|
@deftypevr Macro int ENOSR
|
||||||
|
@comment errno 113
|
||||||
|
@end deftypevr
|
||||||
|
|
||||||
|
@comment errno.h
|
||||||
|
@comment XOPEN: Device not a stream
|
||||||
|
@deftypevr Macro int ENOSTR
|
||||||
|
@comment errno 114
|
||||||
|
@end deftypevr
|
||||||
|
|
||||||
|
@comment errno.h
|
||||||
|
@comment XOPEN: Value too large for defined data type
|
||||||
|
@deftypevr Macro int EOVERFLOW
|
||||||
|
@comment errno 115
|
||||||
|
@end deftypevr
|
||||||
|
|
||||||
|
@comment errno.h
|
||||||
|
@comment XOPEN: Protocol error
|
||||||
|
@deftypevr Macro int EPROTO
|
||||||
|
@comment errno 116
|
||||||
|
@end deftypevr
|
||||||
|
|
||||||
|
@comment errno.h
|
||||||
|
@comment XOPEN: Timer expired
|
||||||
|
@deftypevr Macro int ETIME
|
||||||
|
@comment errno 117
|
||||||
|
@end deftypevr
|
||||||
|
|
||||||
|
|
||||||
@emph{The following error codes are defined by the Linux/i386 kernel.
|
@emph{The following error codes are defined by the Linux/i386 kernel.
|
||||||
They are not yet documented.}
|
They are not yet documented.}
|
||||||
|
|
||||||
@ -903,18 +970,6 @@ They are not yet documented.}
|
|||||||
@comment errno ???/85
|
@comment errno ???/85
|
||||||
@end deftypevr
|
@end deftypevr
|
||||||
|
|
||||||
@comment errno.h
|
|
||||||
@comment Linux???: No message of desired type
|
|
||||||
@deftypevr Macro int ENOMSG
|
|
||||||
@comment errno ???/42
|
|
||||||
@end deftypevr
|
|
||||||
|
|
||||||
@comment errno.h
|
|
||||||
@comment Linux???: Identifier removed
|
|
||||||
@deftypevr Macro int EIDRM
|
|
||||||
@comment errno ???/43
|
|
||||||
@end deftypevr
|
|
||||||
|
|
||||||
@comment errno.h
|
@comment errno.h
|
||||||
@comment Linux???: Channel number out of range
|
@comment Linux???: Channel number out of range
|
||||||
@deftypevr Macro int ECHRNG
|
@deftypevr Macro int ECHRNG
|
||||||
@ -1011,30 +1066,6 @@ They are not yet documented.}
|
|||||||
@comment errno ???/59
|
@comment errno ???/59
|
||||||
@end deftypevr
|
@end deftypevr
|
||||||
|
|
||||||
@comment errno.h
|
|
||||||
@comment Linux???: Device not a stream
|
|
||||||
@deftypevr Macro int ENOSTR
|
|
||||||
@comment errno ???/60
|
|
||||||
@end deftypevr
|
|
||||||
|
|
||||||
@comment errno.h
|
|
||||||
@comment Linux???: No data available
|
|
||||||
@deftypevr Macro int ENODATA
|
|
||||||
@comment errno ???/61
|
|
||||||
@end deftypevr
|
|
||||||
|
|
||||||
@comment errno.h
|
|
||||||
@comment Linux???: Timer expired
|
|
||||||
@deftypevr Macro int ETIME
|
|
||||||
@comment errno ???/62
|
|
||||||
@end deftypevr
|
|
||||||
|
|
||||||
@comment errno.h
|
|
||||||
@comment Linux???: Out of streams resources
|
|
||||||
@deftypevr Macro int ENOSR
|
|
||||||
@comment errno ???/63
|
|
||||||
@end deftypevr
|
|
||||||
|
|
||||||
@comment errno.h
|
@comment errno.h
|
||||||
@comment Linux???: Machine is not on the network
|
@comment Linux???: Machine is not on the network
|
||||||
@deftypevr Macro int ENONET
|
@deftypevr Macro int ENONET
|
||||||
@ -1047,12 +1078,6 @@ They are not yet documented.}
|
|||||||
@comment errno ???/65
|
@comment errno ???/65
|
||||||
@end deftypevr
|
@end deftypevr
|
||||||
|
|
||||||
@comment errno.h
|
|
||||||
@comment Linux???: Link has been severed
|
|
||||||
@deftypevr Macro int ENOLINK
|
|
||||||
@comment errno ???/67
|
|
||||||
@end deftypevr
|
|
||||||
|
|
||||||
@comment errno.h
|
@comment errno.h
|
||||||
@comment Linux???: Advertise error
|
@comment Linux???: Advertise error
|
||||||
@deftypevr Macro int EADV
|
@deftypevr Macro int EADV
|
||||||
@ -1071,36 +1096,12 @@ They are not yet documented.}
|
|||||||
@comment errno ???/70
|
@comment errno ???/70
|
||||||
@end deftypevr
|
@end deftypevr
|
||||||
|
|
||||||
@comment errno.h
|
|
||||||
@comment Linux???: Protocol error
|
|
||||||
@deftypevr Macro int EPROTO
|
|
||||||
@comment errno ???/71
|
|
||||||
@end deftypevr
|
|
||||||
|
|
||||||
@comment errno.h
|
|
||||||
@comment Linux???: Multihop attempted
|
|
||||||
@deftypevr Macro int EMULTIHOP
|
|
||||||
@comment errno ???/72
|
|
||||||
@end deftypevr
|
|
||||||
|
|
||||||
@comment errno.h
|
@comment errno.h
|
||||||
@comment Linux???: RFS specific error
|
@comment Linux???: RFS specific error
|
||||||
@deftypevr Macro int EDOTDOT
|
@deftypevr Macro int EDOTDOT
|
||||||
@comment errno ???/73
|
@comment errno ???/73
|
||||||
@end deftypevr
|
@end deftypevr
|
||||||
|
|
||||||
@comment errno.h
|
|
||||||
@comment Linux???: Not a data message
|
|
||||||
@deftypevr Macro int EBADMSG
|
|
||||||
@comment errno ???/74
|
|
||||||
@end deftypevr
|
|
||||||
|
|
||||||
@comment errno.h
|
|
||||||
@comment Linux???: Value too large for defined data type
|
|
||||||
@deftypevr Macro int EOVERFLOW
|
|
||||||
@comment errno ???/75
|
|
||||||
@end deftypevr
|
|
||||||
|
|
||||||
@comment errno.h
|
@comment errno.h
|
||||||
@comment Linux???: Name not unique on network
|
@comment Linux???: Name not unique on network
|
||||||
@deftypevr Macro int ENOTUNIQ
|
@deftypevr Macro int ENOTUNIQ
|
||||||
|
@ -96,7 +96,7 @@
|
|||||||
# define ungetc(c, s) (--read_in, ungetc (c, s))
|
# define ungetc(c, s) (--read_in, ungetc (c, s))
|
||||||
# define inchar() ((c = getc (s)), (void) ++read_in, c)
|
# define inchar() ((c = getc (s)), (void) ++read_in, c)
|
||||||
# define encode_error() do { \
|
# define encode_error() do { \
|
||||||
_IO_funlockfile (s); \
|
funlockfile (s); \
|
||||||
__set_errno (EILSEQ); \
|
__set_errno (EILSEQ); \
|
||||||
return done; \
|
return done; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
@ -27,9 +27,7 @@ Cambridge, MA 02139, USA. */
|
|||||||
|
|
||||||
/* Dissect the given mode string into an __io_mode. */
|
/* Dissect the given mode string into an __io_mode. */
|
||||||
int
|
int
|
||||||
__getmode (mode, mptr)
|
__getmode (const char *mode, __io_mode *mptr)
|
||||||
const char *mode;
|
|
||||||
__io_mode *mptr;
|
|
||||||
{
|
{
|
||||||
register unsigned char i;
|
register unsigned char i;
|
||||||
|
|
||||||
|
@ -24,8 +24,7 @@ Cambridge, MA 02139, USA. */
|
|||||||
|
|
||||||
/* Make sure that FP has its functions set. */
|
/* Make sure that FP has its functions set. */
|
||||||
void
|
void
|
||||||
__stdio_check_funcs (fp)
|
__stdio_check_funcs (register FILE *fp)
|
||||||
register FILE *fp;
|
|
||||||
{
|
{
|
||||||
if (!fp->__seen)
|
if (!fp->__seen)
|
||||||
{
|
{
|
||||||
@ -51,8 +50,7 @@ __stdio_check_funcs (fp)
|
|||||||
/* Figure out what kind of buffering (none, line, or full)
|
/* Figure out what kind of buffering (none, line, or full)
|
||||||
and what buffer size to give FP. */
|
and what buffer size to give FP. */
|
||||||
static void
|
static void
|
||||||
init_stream (fp)
|
init_stream (register FILE *fp)
|
||||||
register FILE *fp;
|
|
||||||
{
|
{
|
||||||
__stdio_check_funcs (fp);
|
__stdio_check_funcs (fp);
|
||||||
|
|
||||||
@ -141,8 +139,7 @@ __stdio_check_offset (stream)
|
|||||||
seeking as necessary and updating its `offset' field.
|
seeking as necessary and updating its `offset' field.
|
||||||
Sets ferror(FP) (and possibly errno) for errors. */
|
Sets ferror(FP) (and possibly errno) for errors. */
|
||||||
static void
|
static void
|
||||||
seek_to_target (fp)
|
seek_to_target (FILE *fp)
|
||||||
FILE *fp;
|
|
||||||
{
|
{
|
||||||
int save = errno;
|
int save = errno;
|
||||||
if (__stdio_check_offset (fp) == EOF)
|
if (__stdio_check_offset (fp) == EOF)
|
||||||
@ -197,9 +194,7 @@ seek_to_target (fp)
|
|||||||
flushed to avoid a system call for a single character.
|
flushed to avoid a system call for a single character.
|
||||||
This is the default `output room' function. */
|
This is the default `output room' function. */
|
||||||
static void
|
static void
|
||||||
flushbuf (fp, c)
|
flushbuf (register FILE *fp, int c)
|
||||||
register FILE *fp;
|
|
||||||
int c;
|
|
||||||
{
|
{
|
||||||
int flush_only = c == EOF;
|
int flush_only = c == EOF;
|
||||||
size_t buffer_written;
|
size_t buffer_written;
|
||||||
@ -394,8 +389,7 @@ flushbuf (fp, c)
|
|||||||
/* Fill the buffer for FP and return the first character read (or EOF).
|
/* Fill the buffer for FP and return the first character read (or EOF).
|
||||||
This is the default `input_room' function. */
|
This is the default `input_room' function. */
|
||||||
static int
|
static int
|
||||||
fillbuf (fp)
|
fillbuf (register FILE *fp)
|
||||||
register FILE *fp;
|
|
||||||
{
|
{
|
||||||
/* How far into the buffer we read we want to start bufp. */
|
/* How far into the buffer we read we want to start bufp. */
|
||||||
size_t buffer_offset = 0;
|
size_t buffer_offset = 0;
|
||||||
|
@ -29,9 +29,7 @@ struct memstream_info
|
|||||||
|
|
||||||
/* Enlarge STREAM's buffer. */
|
/* Enlarge STREAM's buffer. */
|
||||||
static void
|
static void
|
||||||
enlarge_buffer (stream, c)
|
enlarge_buffer (register FILE *stream, int c)
|
||||||
register FILE *stream;
|
|
||||||
int c;
|
|
||||||
{
|
{
|
||||||
struct memstream_info *info = (struct memstream_info *) stream->__cookie;
|
struct memstream_info *info = (struct memstream_info *) stream->__cookie;
|
||||||
size_t need;
|
size_t need;
|
||||||
@ -96,10 +94,7 @@ enlarge_buffer (stream, c)
|
|||||||
There is no external state to munge. */
|
There is no external state to munge. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
seek (cookie, pos, whence)
|
seek (void *cookie, fpos_t *pos, int whence)
|
||||||
void *cookie;
|
|
||||||
fpos_t *pos;
|
|
||||||
int whence;
|
|
||||||
{
|
{
|
||||||
switch (whence)
|
switch (whence)
|
||||||
{
|
{
|
||||||
@ -120,8 +115,7 @@ seek (cookie, pos, whence)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
free_info (cookie)
|
free_info (void *cookie)
|
||||||
void *cookie;
|
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
struct memstream_info *info = (struct memstream_info *) cookie;
|
struct memstream_info *info = (struct memstream_info *) cookie;
|
||||||
|
@ -302,7 +302,7 @@ extern char *tmpnam_r __P ((char *__s));
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if def(__USE_SVID) || defined(__USE_XOPEN)
|
#if defined(__USE_SVID) || defined(__USE_XOPEN)
|
||||||
/* Generate a unique temporary filename using up to five characters of PFX
|
/* Generate a unique temporary filename using up to five characters of PFX
|
||||||
if it is not NULL. The directory to put this file in is searched for
|
if it is not NULL. The directory to put this file in is searched for
|
||||||
as follows: First the environment variable "TMPDIR" is checked.
|
as follows: First the environment variable "TMPDIR" is checked.
|
||||||
|
@ -256,7 +256,7 @@ __libc_init_first (int argc __attribute__ ((unused)), ...)
|
|||||||
cause ld.so to gain an init function, which is not a cool thing. */
|
cause ld.so to gain an init function, which is not a cool thing. */
|
||||||
|
|
||||||
void
|
void
|
||||||
_dl_start ()
|
_dl_start (void)
|
||||||
{
|
{
|
||||||
abort ();
|
abort ();
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ Cambridge, MA 02139, USA. */
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <hurd/ioctl.h>
|
#include <hurd/ioctl.h>
|
||||||
|
#include <mach/mig_support.h>
|
||||||
|
|
||||||
#define typesize(type) (1 << (type))
|
#define typesize(type) (1 << (type))
|
||||||
|
|
||||||
|
44
sysdeps/mach/hurd/lchown.c
Normal file
44
sysdeps/mach/hurd/lchown.c
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/* Copyright (C) 1991, 1992, 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
|
||||||
|
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>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
/* Change the owner and group of FILE; if it's a link, do the link and
|
||||||
|
not the target. */
|
||||||
|
int
|
||||||
|
__lchown (file, owner, group)
|
||||||
|
const char *file;
|
||||||
|
uid_t owner;
|
||||||
|
gid_t group;
|
||||||
|
{
|
||||||
|
error_t err;
|
||||||
|
file_t port = __file_name_lookup (file, O_NOLINK, 0);
|
||||||
|
if (port == MACH_PORT_NULL)
|
||||||
|
return -1;
|
||||||
|
err = __file_chown (port, owner, group);
|
||||||
|
__mach_port_deallocate (__mach_task_self (), port);
|
||||||
|
if (err)
|
||||||
|
return __hurd_fail (err);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
weak_alias (__lchown, lchown)
|
@ -117,16 +117,23 @@ DEFUN(__select, (nfds, readfds, writefds, exceptfds, timeout),
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* Send them all io_select request messages. */
|
/* Send them all io_select request messages. */
|
||||||
|
|
||||||
|
if (firstfd == -1)
|
||||||
|
/* But not if there were no ports to deal with at all. */
|
||||||
|
portset = __mach_reply_port ();
|
||||||
|
else
|
||||||
|
{
|
||||||
err = 0;
|
err = 0;
|
||||||
got = 0;
|
got = 0;
|
||||||
portset = MACH_PORT_NULL;
|
portset = MACH_PORT_NULL;
|
||||||
|
|
||||||
for (i = firstfd; i <= lastfd; ++i)
|
for (i = firstfd; i <= lastfd; ++i)
|
||||||
if (d[i].type)
|
if (d[i].type)
|
||||||
{
|
{
|
||||||
int type = d[i].type;
|
int type = d[i].type;
|
||||||
d[i].reply_port = __mach_reply_port ();
|
d[i].reply_port = __mach_reply_port ();
|
||||||
err = __io_select (d[i].io_port, d[i].reply_port,
|
err = __io_select (d[i].io_port, d[i].reply_port,
|
||||||
/* Poll only when there's a single descriptor. */
|
/* Poll only if there's a single descriptor. */
|
||||||
(firstfd == lastfd) ? to : 0,
|
(firstfd == lastfd) ? to : 0,
|
||||||
&type);
|
&type);
|
||||||
switch (err)
|
switch (err)
|
||||||
@ -135,9 +142,9 @@ DEFUN(__select, (nfds, readfds, writefds, exceptfds, timeout),
|
|||||||
/* No immediate response. This is normal. */
|
/* No immediate response. This is normal. */
|
||||||
err = 0;
|
err = 0;
|
||||||
if (firstfd == lastfd)
|
if (firstfd == lastfd)
|
||||||
/* When there's a single descriptor, we don't need a portset,
|
/* When there's a single descriptor, we don't need a
|
||||||
so just pretend we have one, but really use the single reply
|
portset, so just pretend we have one, but really
|
||||||
port. */
|
use the single reply port. */
|
||||||
portset = d[i].reply_port;
|
portset = d[i].reply_port;
|
||||||
else if (got == 0)
|
else if (got == 0)
|
||||||
/* We've got multiple reply ports, so we need a port set to
|
/* We've got multiple reply ports, so we need a port set to
|
||||||
@ -157,9 +164,10 @@ DEFUN(__select, (nfds, readfds, writefds, exceptfds, timeout),
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
/* No other error should happen. Callers of select don't
|
/* No other error should happen. Callers of select
|
||||||
expect to see errors, so we simulate readiness of the erring
|
don't expect to see errors, so we simulate
|
||||||
object and the next call hopefully will get the error again. */
|
readiness of the erring object and the next call
|
||||||
|
hopefully will get the error again. */
|
||||||
type = SELECT_ALL;
|
type = SELECT_ALL;
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
|
|
||||||
@ -177,6 +185,7 @@ DEFUN(__select, (nfds, readfds, writefds, exceptfds, timeout),
|
|||||||
}
|
}
|
||||||
_hurd_port_free (&d[i].cell->port, &d[i].ulink, d[i].io_port);
|
_hurd_port_free (&d[i].cell->port, &d[i].ulink, d[i].io_port);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Now wait for reply messages. */
|
/* Now wait for reply messages. */
|
||||||
if (!err && got == 0)
|
if (!err && got == 0)
|
||||||
@ -234,7 +243,7 @@ DEFUN(__select, (nfds, readfds, writefds, exceptfds, timeout),
|
|||||||
(msg.success.result & SELECT_ALL) == 0)
|
(msg.success.result & SELECT_ALL) == 0)
|
||||||
{
|
{
|
||||||
/* Error or bogus reply. Simulate readiness. */
|
/* Error or bogus reply. Simulate readiness. */
|
||||||
__mach_msg_destroy (&msg);
|
__mach_msg_destroy (&msg.head);
|
||||||
msg.success.result = SELECT_ALL;
|
msg.success.result = SELECT_ALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -242,8 +251,10 @@ DEFUN(__select, (nfds, readfds, writefds, exceptfds, timeout),
|
|||||||
readiness. */
|
readiness. */
|
||||||
{
|
{
|
||||||
int had = got;
|
int had = got;
|
||||||
|
if (firstfd != -1)
|
||||||
for (i = firstfd; i <= lastfd; ++i)
|
for (i = firstfd; i <= lastfd; ++i)
|
||||||
if (d[i].type && d[i].reply_port == msg.head.msgh_local_port)
|
if (d[i].type
|
||||||
|
&& d[i].reply_port == msg.head.msgh_local_port)
|
||||||
{
|
{
|
||||||
d[i].type &= msg.success.result;
|
d[i].type &= msg.success.result;
|
||||||
d[i].type |= SELECT_RETURNED;
|
d[i].type |= SELECT_RETURNED;
|
||||||
@ -280,10 +291,11 @@ DEFUN(__select, (nfds, readfds, writefds, exceptfds, timeout),
|
|||||||
err = 0;
|
err = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (firstfd != -1)
|
||||||
for (i = firstfd; i <= lastfd; ++i)
|
for (i = firstfd; i <= lastfd; ++i)
|
||||||
if (d[i].type)
|
if (d[i].type)
|
||||||
__mach_port_destroy (__mach_task_self (), d[i].reply_port);
|
__mach_port_destroy (__mach_task_self (), d[i].reply_port);
|
||||||
if (firstfd != lastfd && portset != MACH_PORT_NULL)
|
if (firstfd == -1 || (firstfd != lastfd && portset != MACH_PORT_NULL))
|
||||||
/* Destroy PORTSET, but only if it's not actually the reply port for a
|
/* Destroy PORTSET, but only if it's not actually the reply port for a
|
||||||
single descriptor (in which case it's destroyed in the previous loop;
|
single descriptor (in which case it's destroyed in the previous loop;
|
||||||
not doing it here is just a bit more efficient). */
|
not doing it here is just a bit more efficient). */
|
||||||
@ -298,6 +310,7 @@ DEFUN(__select, (nfds, readfds, writefds, exceptfds, timeout),
|
|||||||
|
|
||||||
/* Set the user bitarrays. We only ever have to clear bits, as all desired
|
/* Set the user bitarrays. We only ever have to clear bits, as all desired
|
||||||
ones are initially set. */
|
ones are initially set. */
|
||||||
|
if (firstfd != -1)
|
||||||
for (i = firstfd; i <= lastfd; ++i)
|
for (i = firstfd; i <= lastfd; ++i)
|
||||||
{
|
{
|
||||||
int type = d[i].type;
|
int type = d[i].type;
|
||||||
|
@ -106,8 +106,20 @@ struct stat
|
|||||||
protection bits for unknown users. */
|
protection bits for unknown users. */
|
||||||
#define S_IUNKSHIFT 12
|
#define S_IUNKSHIFT 12
|
||||||
|
|
||||||
/* All the unused bits. */
|
/* Read only bits: */
|
||||||
#define S_ISPARE (~(S_IFMT|S_INOCACHE|S_IUNKNOWN|07777))
|
|
||||||
|
/* There is a passive translator set for this file */
|
||||||
|
#define S_IPTRANS 000010000000
|
||||||
|
/* There is an active translator running on this file */
|
||||||
|
#define S_IATRANS 000020000000
|
||||||
|
/* This is the root of a filesystem (or single node translator) */
|
||||||
|
#define S_IROOT 000040000000
|
||||||
|
/* All the bits relevant to translators */
|
||||||
|
#define S_ITRANS 000070000000
|
||||||
|
|
||||||
|
/* ALL the unused bits. */
|
||||||
|
#define S_ISPARE (~(S_IFMT|S_ITRANS|S_INOCACHE| \
|
||||||
|
S_IUSEUNK|S_IUNKNOWN|07777))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Default file creation mask (umask). */
|
/* Default file creation mask (umask). */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
|
/* Copyright (C) 1991, 1992, 1996 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
|
||||||
@ -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,
|
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||||
Cambridge, MA 02139, USA. */
|
Cambridge, MA 02139, USA. */
|
||||||
|
|
||||||
#include <ansidecl.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -27,9 +26,11 @@ Cambridge, MA 02139, USA. */
|
|||||||
The buffers are filled in the order specified.
|
The buffers are filled in the order specified.
|
||||||
Operates just like `read' (see <unistd.h>) except that data are
|
Operates just like `read' (see <unistd.h>) except that data are
|
||||||
put in VECTOR instead of a contiguous buffer. */
|
put in VECTOR instead of a contiguous buffer. */
|
||||||
int
|
ssize_t
|
||||||
DEFUN(readv, (fd, vector, count),
|
readv (fd, vector, count)
|
||||||
int fd AND CONST struct iovec *vector AND size_t count)
|
int fd;
|
||||||
|
const struct iovec *vector;
|
||||||
|
size_t count;
|
||||||
{
|
{
|
||||||
char *buffer;
|
char *buffer;
|
||||||
size_t bytes;
|
size_t bytes;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
|
/* Copyright (C) 1991, 1992, 1996 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
|
||||||
@ -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,
|
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||||
Cambridge, MA 02139, USA. */
|
Cambridge, MA 02139, USA. */
|
||||||
|
|
||||||
#include <ansidecl.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -27,9 +26,11 @@ Cambridge, MA 02139, USA. */
|
|||||||
The data is written in the order specified.
|
The data is written in the order specified.
|
||||||
Operates just like `write' (see <unistd.h>) except that the data
|
Operates just like `write' (see <unistd.h>) except that the data
|
||||||
are taken from VECTOR instead of a contiguous buffer. */
|
are taken from VECTOR instead of a contiguous buffer. */
|
||||||
int
|
ssize_t
|
||||||
DEFUN(writev, (fd, vector, count),
|
writev (fd, vector, count)
|
||||||
int fd AND CONST struct iovec *vector AND size_t count)
|
int fd;
|
||||||
|
const struct iovec *vector;
|
||||||
|
size_t count;
|
||||||
{
|
{
|
||||||
char *buffer;
|
char *buffer;
|
||||||
register char *bp;
|
register char *bp;
|
||||||
|
Loading…
Reference in New Issue
Block a user