diff options
author | Roland McGrath <roland@gnu.org> | 2002-04-30 22:00:59 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2002-04-30 22:00:59 +0000 |
commit | a8c017767721fec8fd4ee53c1937e31e35dfac08 (patch) | |
tree | 11c43b6158f98ebcce0ab0b5555faa3a35d43187 /sysdeps/mach/hurd | |
parent | 8543f93de2a52f1e314051aa20f7394a7c13366f (diff) | |
download | glibc-a8c017767721fec8fd4ee53c1937e31e35dfac08.tar.gz glibc-a8c017767721fec8fd4ee53c1937e31e35dfac08.tar.xz glibc-a8c017767721fec8fd4ee53c1937e31e35dfac08.zip |
2002-04-30 Roland McGrath <roland@frob.com>
Removed old GNU stdio implementation; GNU libio is now the only option. * configure.in: Removed --enable-libio option and @stdio@ subst var. Define USE_IN_LIBIO unconditionally. * configure: Regenerated. * Makeconfig (stdio): Set to libio by default. * config.make.in (stdio): Variable removed. * sysdeps/unix/sysv/linux/configure.in: Don't set $stdio. * sysdeps/unix/sysv/linux/configure: Regenerated. * sysdeps/mach/hurd/configure.in: Don't test $stdio. * sysdeps/mach/hurd/configure: Regenerated. * stdio/.cvsignore: File removed. * stdio/Makefile: File removed. * stdio/Versions: File removed. * stdio/__fbufsize.c: File removed. * stdio/__flbf.c: File removed. * stdio/__fpending.c: File removed. * stdio/__fpurge.c: File removed. * stdio/__freadable.c: File removed. * stdio/__freading.c: File removed. * stdio/__fsetlocking.c: File removed. * stdio/__fwritable.c: File removed. * stdio/__fwriting.c: File removed. * stdio/clearerr.c: File removed. * stdio/fclose.c: File removed. * stdio/fcloseall.c: File removed. * stdio/feof.c: File removed. * stdio/ferror.c: File removed. * stdio/fflush.c: File removed. * stdio/fgetc.c: File removed. * stdio/fgetpos.c: File removed. * stdio/fgets.c: File removed. * stdio/fileno.c: File removed. * stdio/fmemopen.c: File removed. * stdio/fopen.c: File removed. * stdio/fopncook.c: File removed. * stdio/fputc.c: File removed. * stdio/fputs.c: File removed. * stdio/fread.c: File removed. * stdio/freopen.c: File removed. * stdio/fseek.c: File removed. * stdio/fsetpos.c: File removed. * stdio/ftell.c: File removed. * stdio/fwrite.c: File removed. * stdio/getc.c: File removed. * stdio/getchar.c: File removed. * stdio/getdelim.c: File removed. * stdio/gets.c: File removed. * stdio/glue.c: File removed. * stdio/internals.c: File removed. * stdio/linewrap.c: File removed. * stdio/linewrap.h: File removed. * stdio/memstream.c: File removed. * stdio/newstream.c: File removed. * stdio/obstream.c: File removed. * stdio/putc.c: File removed. * stdio/putchar.c: File removed. * stdio/puts.c: File removed. * stdio/rewind.c: File removed. * stdio/setbuf.c: File removed. * stdio/setbuffer.c: File removed. * stdio/setlinebuf.c: File removed. * stdio/setvbuf.c: File removed. * stdio/stdio.h: File removed. * stdio/ungetc.c: File removed. * stdio/vasprintf.c: File removed. * stdio/vscanf.c: File removed. * stdio/vsnprintf.c: File removed. * stdio/vsprintf.c: File removed. * stdio/vsscanf.c: File removed. * sysdeps/generic/defs.c: File removed. * sysdeps/generic/fdopen.c: File removed. * sysdeps/generic/pipestream.c: File removed. * sysdeps/generic/stdio_init.c: File removed. * sysdeps/generic/sysd-stdio.c: File removed. * sysdeps/generic/vdprintf.c: File removed. * sysdeps/mach/hurd/defs.c: File removed. * sysdeps/mach/hurd/fdopen.c: File removed. * sysdeps/mach/hurd/pipestream.c: File removed. * sysdeps/mach/hurd/stdio_init.c: File removed. * sysdeps/mach/hurd/sysd-stdio.c: File removed. * sysdeps/mach/hurd/vdprintf.c: File removed. * sysdeps/posix/defs.c: File removed. * sysdeps/posix/fdopen.c: File removed. * sysdeps/posix/pipestream.c: File removed. * sysdeps/posix/stdio_init.c: File removed. * sysdeps/posix/vdprintf.c: File removed. * sysdeps/unix/pipestream.c: File removed. * sysdeps/unix/sysv/sysd-stdio.c: File removed. * sysdeps/unix/sysv/sco3.2.4/pipestream.c: File removed. * sysdeps/unix/sysv/sysv4/pipestream.c: File removed.
Diffstat (limited to 'sysdeps/mach/hurd')
-rwxr-xr-x | sysdeps/mach/hurd/configure | 13 | ||||
-rw-r--r-- | sysdeps/mach/hurd/configure.in | 9 | ||||
-rw-r--r-- | sysdeps/mach/hurd/defs.c | 87 | ||||
-rw-r--r-- | sysdeps/mach/hurd/fdopen.c | 72 | ||||
-rw-r--r-- | sysdeps/mach/hurd/pipestream.c | 2 | ||||
-rw-r--r-- | sysdeps/mach/hurd/stdio_init.c | 62 | ||||
-rw-r--r-- | sysdeps/mach/hurd/sysd-stdio.c | 257 | ||||
-rw-r--r-- | sysdeps/mach/hurd/vdprintf.c | 57 |
8 files changed, 6 insertions, 553 deletions
diff --git a/sysdeps/mach/hurd/configure b/sysdeps/mach/hurd/configure index 93434c0e91..7017ea4adc 100755 --- a/sysdeps/mach/hurd/configure +++ b/sysdeps/mach/hurd/configure @@ -12,14 +12,9 @@ fi case "$machine" in i386*) - # With --enable-libio, the default oldest ABI is 2.2.6; - # without --enable-libio, the default oldest ABI is 2.0. + # The default oldest ABI is 2.2.6. # We only need a "yes" here if the oldest ABI supported will be < 2.2.6. - if if test "$stdio" = libio; then - test "$oldest_abi" != default && test "$oldest_abi" \< "2.2.6" - else - test "$oldest_abi" = default || test "$oldest_abi" \< "2.2.6" - fi; then + if test "$oldest_abi" != default && test "$oldest_abi" \< "2.2.6"; then libc_cv_gcc_unwind_find_fde=yes fi ;; @@ -29,7 +24,7 @@ esac # See if mig groks `retcode'. echo $ac_n "checking whether $MIG supports the retcode keyword""... $ac_c" 1>&6 -echo "configure:33: checking whether $MIG supports the retcode keyword" >&5 +echo "configure:28: checking whether $MIG supports the retcode keyword" >&5 if eval "test \"`echo '$''{'hurd_cv_mig_retcode'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -43,7 +38,7 @@ simpleroutine foobar_reply ( reply_port: reply_port_t; err: kern_return_t, RetCode); EOF -if { ac_try='CC="${CC}" ${MIG-false} -n conftest.defs 1>&5'; { (eval echo configure:47: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then +if { ac_try='CC="${CC}" ${MIG-false} -n conftest.defs 1>&5'; { (eval echo configure:42: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then hurd_cv_mig_retcode=yes else hurd_cv_mig_retcode=no diff --git a/sysdeps/mach/hurd/configure.in b/sysdeps/mach/hurd/configure.in index 26bdaf661d..f5afe2f1d3 100644 --- a/sysdeps/mach/hurd/configure.in +++ b/sysdeps/mach/hurd/configure.in @@ -14,14 +14,9 @@ fi case "$machine" in i386*) - # With --enable-libio, the default oldest ABI is 2.2.6; - # without --enable-libio, the default oldest ABI is 2.0. + # The default oldest ABI is 2.2.6. # We only need a "yes" here if the oldest ABI supported will be < 2.2.6. - if if test "$stdio" = libio; then - test "$oldest_abi" != default && test "$oldest_abi" \< "2.2.6" - else - test "$oldest_abi" = default || test "$oldest_abi" \< "2.2.6" - fi; then + if test "$oldest_abi" != default && test "$oldest_abi" \< "2.2.6"; then libc_cv_gcc_unwind_find_fde=yes fi ;; diff --git a/sysdeps/mach/hurd/defs.c b/sysdeps/mach/hurd/defs.c deleted file mode 100644 index 3999957d41..0000000000 --- a/sysdeps/mach/hurd/defs.c +++ /dev/null @@ -1,87 +0,0 @@ -/* Definitions of global stdio data structures. - Copyright (C) 1991,92,93,94,95,97,2000 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdio.h> -#include <hurd/fd.h> -#include <unistd.h> - -FILE *stdin, *stdout, *stderr; - -/* Pointer to the first stream in the list. */ -FILE *__stdio_head = NULL; - -/* XXX should be __init_stdio? */ -static void -init_stdio (void) -{ - inline void init (FILE **streamptr, int fd) - { - /* We want to use the existing FILE object if one has been allocated. - (This will only be the case if our image came from something like - Emacs's unexec, where we were called in the first run.) */ - FILE *s = *streamptr ?: __newstream (); - struct hurd_fd *d = _hurd_fd_get (fd); - if (d == NULL) - { - /* There is no file descriptor allocated. We want the standard - streams to always refer to their standard file descriptors, even - if those descriptors are not set up until later. So allocate - the descriptor structure with no ports and store it in the - stream. Operations will fail until ports are installed in the - file descriptor. */ - if (d = _hurd_alloc_fd (NULL, fd)) - __spin_unlock (&d->port.lock); - } - if (s) - s->__cookie = d; - *streamptr = s; - } -#define S(NAME, FD, MODE) \ - init (&NAME, FD); if (NAME) NAME->__mode.__##MODE = 1; - - S (stdin, STDIN_FILENO, read); - S (stdout, STDOUT_FILENO, write); - S (stderr, STDERR_FILENO, write); - -#undef S - - if (stderr) - stderr->__userbuf = 1; /* stderr is always unbuffered. */ - - (void) &init_stdio; /* Avoid "defined but not used" warning. */ -} -/* This initializer will be run along with other vanilla libc initializers - in a normal Posixoid environment. The earlier Hurd-speciifc initializer - phases cannot use normal facilities like malloc (which stdio uses). */ -text_set_element (__libc_subinit, init_stdio); - -/* This function MUST be in this file! - This is because we want _cleanup to go into the __libc_atexit set - when any stdio code is used (and to use any stdio code, one must reference - something defined in this file), and since only local symbols can be made - set elements, having the set element stab entry here and _cleanup elsewhere - loses; and having them both elsewhere loses because there is no reference - to cause _cleanup to be linked in. */ - -void -_cleanup (void) -{ - __fcloseall (); -} -text_set_element (__libc_atexit, _cleanup); diff --git a/sysdeps/mach/hurd/fdopen.c b/sysdeps/mach/hurd/fdopen.c deleted file mode 100644 index 49cf0e6938..0000000000 --- a/sysdeps/mach/hurd/fdopen.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 1991, 1994, 1995, 1997, 2000 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <stdio.h> -#include <hurd/fd.h> -#include <fcntl.h> -#include <hurd/io.h> - -/* Defined in fopen.c. */ -extern int __getmode (const char *mode, __io_mode *mptr); - -/* Open a new stream on a given system file descriptor. */ -FILE * -__fdopen (fd, mode) - int fd; - const char *mode; -{ - FILE *stream; - __io_mode m; - struct hurd_fd *d; - error_t err; - int openmodes; - - if (!__getmode (mode, &m)) - return NULL; - - HURD_CRITICAL_BEGIN; - d = _hurd_fd_get (fd); - if (d == NULL) - err = EBADF; - else - err = HURD_FD_PORT_USE (d, __io_get_openmodes (port, &openmodes)); - HURD_CRITICAL_END; - - if (err) - return __hurd_dfail (fd, err), NULL; - - /* Check the access mode. */ - if ((m.__read && !(openmodes & O_READ)) || - (m.__write && !(openmodes & O_WRITE))) - { - errno = EBADF; - return NULL; - } - - stream = __newstream (); - if (stream == NULL) - return NULL; - - stream->__cookie = d; - stream->__mode = m; - - return stream; -} - -weak_alias (__fdopen, fdopen) diff --git a/sysdeps/mach/hurd/pipestream.c b/sysdeps/mach/hurd/pipestream.c deleted file mode 100644 index 548e1e77eb..0000000000 --- a/sysdeps/mach/hurd/pipestream.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Make sure NO_WAITPID is not set; sysdeps/unix/pipestream.c defines it. */ -#include <sysdeps/posix/pipestream.c> diff --git a/sysdeps/mach/hurd/stdio_init.c b/sysdeps/mach/hurd/stdio_init.c deleted file mode 100644 index 2da15ce1b5..0000000000 --- a/sysdeps/mach/hurd/stdio_init.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 1995, 1997, 1998 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdio.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> -#include <hurd/fd.h> -#include <hurd/io.h> -#include <hurd/term.h> - -/* Initialize STREAM as necessary. - This may change I/O functions, give a buffer, etc. - If no buffer is allocated, but the bufsize is set, - the bufsize will be used to allocate the buffer. */ -void -__stdio_init_stream (FILE *stream) -{ - struct hurd_fd *const d = stream->__cookie; - struct stat statb; - error_t err; - - if (stream->__buffer != NULL || stream->__userbuf) - /* If's unbuffered by request, we can't do anything useful. */ - return; - - /* Find out what sort of file this is. */ - if (err = HURD_FD_PORT_USE (d, __io_stat (port, &statb))) - return; - - if (S_ISCHR (statb.st_mode)) - { - /* It's a character device. - Make it line-buffered if it's a terminal. */ - mach_port_t cttyid; - err = HURD_FD_PORT_USE (d, __term_getctty (port, &cttyid)); - if (! err) - { - __mach_port_deallocate (__mach_task_self (), cttyid); - stream->__linebuf = 1; - } - } - - /* Use the block-size field to determine - the system's optimal buffering size. */ - stream->__bufsize = statb.st_blksize; -} diff --git a/sysdeps/mach/hurd/sysd-stdio.c b/sysdeps/mach/hurd/sysd-stdio.c deleted file mode 100644 index 14a2aee232..0000000000 --- a/sysdeps/mach/hurd/sysd-stdio.c +++ /dev/null @@ -1,257 +0,0 @@ -/* Copyright (C) 1994,95,96,97,98,2001 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <stdio.h> -#include <sys/types.h> -#include <hurd.h> -#include <fcntl.h> -#include <hurd/fd.h> - -extern __io_read_fn __stdio_read; -extern __io_write_fn __stdio_write; -extern __io_seek_fn __stdio_seek; -extern __io_close_fn __stdio_close; -extern __io_fileno_fn __stdio_fileno; - - -/* Check ERR for wanting to generate a signal. */ - -static inline int -fd_fail (struct hurd_fd *fd, error_t err) -{ - int signo = _hurd_fd_error_signal (err); - if (signo) - { - const struct hurd_signal_detail detail - = { code: __stdio_fileno (fd), error: err, exc: 0 }; - _hurd_raise_signal (NULL, signo, &detail); - } - errno = err; - return -1; -} - - -/* Read up to N chars into BUF from COOKIE. - Return how many chars were read, 0 for EOF or -1 for error. */ -ssize_t -__stdio_read (cookie, buf, n) - void *cookie; - char *buf; - size_t n; -{ - error_t err; - struct hurd_fd *fd = cookie; - - if (! fd) - return __hurd_fail (EBADF); - - if (err = _hurd_fd_read (fd, buf, &n, -1)) - return fd_fail (fd, err); - - return n; -} - -/* Write up to N chars from BUF to COOKIE. - Return how many chars were written or -1 for error. */ -ssize_t -__stdio_write (cookie, buf, n) - void *cookie; - const char *buf; - size_t n; -{ - error_t err; - size_t wrote, nleft; - struct hurd_fd *fd = cookie; - - if (! fd) - return __hurd_fail (EBADF); - - nleft = n; - do - { - wrote = nleft; - if (err = _hurd_fd_write (fd, buf, &wrote, -1)) - return fd_fail (fd, err); - buf += wrote; - nleft -= wrote; - } while (nleft > 0); - - return wrote; -} - -/* Move COOKIE's file position *POS bytes, according to WHENCE. - The current file position is stored in *POS. - Returns zero if successful, nonzero if not. */ -int -__stdio_seek (cookie, pos, whence) - void *cookie; - fpos_t *pos; - int whence; -{ - error_t err; - struct hurd_fd *fd = cookie; - if (! fd) - return __hurd_fail (EBADF); - err = HURD_FD_PORT_USE (fd, __io_seek (port, *pos, whence, pos)); - return err ? fd_fail (fd, err) : 0; -} - -/* Close the file associated with COOKIE. - Return 0 for success or -1 for failure. */ -int -__stdio_close (cookie) - void *cookie; -{ - error_t error = cookie ? _hurd_fd_close (cookie) : EBADF; - return error ? fd_fail (cookie, error) : 0; -} - - -static inline int -modeflags (__io_mode m) -{ - int flags = 0; - if (m.__read) - flags |= O_READ; - if (m.__write) - flags |= O_WRITE; - if (m.__append) - flags |= O_APPEND; - if (m.__create) - flags |= O_CREAT; - if (m.__truncate) - flags |= O_TRUNC; - if (m.__exclusive) - flags |= O_EXCL; - return flags; -} - -/* Open FILENAME with the mode in M. */ -int -__stdio_open (filename, m, cookieptr) - const char *filename; - __io_mode m; - void **cookieptr; -{ - int flags; - file_t port; - struct hurd_fd *d; - - flags = modeflags (m); - port = __file_name_lookup (filename, flags, 0666 & ~_hurd_umask); - if (port == MACH_PORT_NULL) - return -1; - - HURD_CRITICAL_BEGIN; - d = _hurd_alloc_fd (NULL, 0); - if (d != NULL) - { - _hurd_port2fd (d, port, flags); - __spin_unlock (&d->port.lock); - } - HURD_CRITICAL_END; - - *cookieptr = d; - return 0; -} - - -/* Open FILENAME with the mode in M. Use the same magic cookie - already in *COOKIEPTR if possible, closing the old cookie with CLOSEFN. */ -int -__stdio_reopen (const char *filename, - __io_mode m, - void **cookieptr, - __io_close_fn closefn) -{ - int flags; - file_t port; - struct hurd_fd *d; - - if (closefn != __stdio_close) - { - /* The old cookie is Not Of The Body. - Just close it and do a normal open. */ - (*closefn) (*cookieptr); - return __stdio_open (filename, m, cookieptr); - } - - /* Open a new port on the file. */ - flags = modeflags (m); - port = __file_name_lookup (filename, flags, 0666 & ~_hurd_umask); - - /* Install the new port in the same file descriptor slot the old cookie - points to. If opening the file failed, PORT will be MACH_PORT_NULL - and installing it in the descriptor will have the effect of closing - the old descriptor. */ - - d = *cookieptr; - HURD_CRITICAL_BEGIN; - __spin_lock (&d->port.lock); - _hurd_port2fd (d, port, flags); - __spin_unlock (&d->port.lock); - HURD_CRITICAL_END; - - return port == MACH_PORT_NULL ? -1 : 0; -} - - -/* Write a message to the error output. - Try hard to make it really get out. */ -void -__stdio_errmsg (msg, len) - const char *msg; - size_t len; -{ - io_t server; - mach_msg_type_number_t wrote; - - server = __getdport (2); - __io_write (server, msg, len, -1, &wrote); - __mach_port_deallocate (__mach_task_self (), server); -} - - -/* Return the POSIX.1 file descriptor associated with COOKIE, - or -1 for errors. If COOKIE does not relate to any POSIX.1 file - descriptor, this should return -1 with errno set to EOPNOTSUPP. */ -int -__stdio_fileno (cookie) - void *cookie; -{ - int fd; - - if (! cookie) - return __hurd_fail (EBADF); - - __mutex_lock (&_hurd_dtable_lock); - for (fd = 0; fd < _hurd_dtablesize; ++fd) - if (_hurd_dtable[fd] == cookie) - { - __mutex_unlock (&_hurd_dtable_lock); - return fd; - } - __mutex_unlock (&_hurd_dtable_lock); - - /* This should never happen, because this function should not be - installed as a stream's __fileno function unless that stream's cookie - points to a file descriptor. */ - errno = EGRATUITOUS; - return -1; -} diff --git a/sysdeps/mach/hurd/vdprintf.c b/sysdeps/mach/hurd/vdprintf.c deleted file mode 100644 index 568fb6b733..0000000000 --- a/sysdeps/mach/hurd/vdprintf.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 1991, 1992, 1993, 1997 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <limits.h> -#include <stdarg.h> -#include <stdio.h> -#include <string.h> -#include <hurd/fd.h> - -/* Write formatted output to file descriptor D according to the format string - FORMAT, using the argument list in ARG. */ -int -vdprintf (int d, const char *format, va_list arg) -{ - int done; - FILE f; - struct hurd_fd *fd; - - HURD_CRITICAL_BEGIN; - fd = _hurd_fd_get (d); - HURD_CRITICAL_END; - - if (!fd) - return 0; - - /* Create an unbuffered stream talking to D on the stack. */ - memset ((void *) &f, 0, sizeof (f)); - f.__magic = _IOMAGIC; - f.__mode.__write = 1; - f.__cookie = fd; - f.__room_funcs = __default_room_functions; - f.__io_funcs = __default_io_functions; - f.__seen = 1; - f.__userbuf = 1; - - /* vfprintf will use a buffer on the stack for the life of the call, - and flush it when finished. */ - done = vfprintf (&f, format, arg); - - return done; -} |