diff options
author | Roland McGrath <roland@gnu.org> | 2000-03-10 08:46:33 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2000-03-10 08:46:33 +0000 |
commit | b4e54243c42ac249943bb6904cd74c82d0350e02 (patch) | |
tree | d7e3139873ccad36c0116d70b61f39fa364de870 /libio/iofopncook.c | |
parent | 418f095a3ef195e3188a969050a831f0ec96d793 (diff) | |
download | glibc-b4e54243c42ac249943bb6904cd74c82d0350e02.tar.gz |
* mach/devstream.c (devstream_write, devstream_read): New functions.
(input, output): Functions removed.
(mach_open_devstream): Use devstream_{read,write} as cookie functions,
using only the vanilla fopencookie interface.
* hurd/fopenport.c [! USE_IN_LIBIO] (cookie_io_functions_t): Define
as macro for __io_functions.
(funcsio): Use cookie_io_functions_t type name.
(fopenport): Renamed from __fopenport. Rewrite to call fopencookie.
* libio/iofopncook.c (_IO_cookie_init): New function, broken out of
fopencookie.
(fopencookie): Use it.
* libio/libio.h: Declare _IO_cookie_init.
* hurd/vpprintf.c (vpprintf) [USE_IN_LIBIO]: Implement using
_IO_cookie_init.
* libio/libio.h (__io_seek_fn): Fix second argument type
to be a pointer, in line with the manual and the old stdio.
* libio/iofopncook.c (_IO_cookie_seek): Fix (sole) caller.
* sysdeps/generic/bits/stdio-lock.h: New file.
This is a stub with #error, but that's better than no file at all.
* sysdeps/unix/sysv/linux/alpha/syscall.S:
* manual/message.texi (Using gettextized software):
* manual/filesys.texi (File Size):
* manual/charset.texi (glibc iconv Implementation):
* locale/programs/ld-collate.c (collate_output):
* manual/stdio.texi (Output Conversion Syntax):
Diffstat (limited to 'libio/iofopncook.c')
-rw-r--r-- | libio/iofopncook.c | 48 |
1 files changed, 28 insertions, 20 deletions
diff --git a/libio/iofopncook.c b/libio/iofopncook.c index 7b76826031..56f2239764 100644 --- a/libio/iofopncook.c +++ b/libio/iofopncook.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995, 1997, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1993,95,97,99,2000 Free Software Foundation, Inc. This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or @@ -74,10 +74,9 @@ _IO_cookie_seek (fp, offset, dir) { struct _IO_cookie_file *cfile = (struct _IO_cookie_file *) fp; - if (cfile->__io_functions.seek == NULL) - return _IO_pos_BAD; - - return cfile->__io_functions.seek (cfile->__cookie, offset, dir); + return ((cfile->__io_functions.seek == NULL + || cfile->__io_functions.seek (cfile->__cookie, &offset, dir)) + ? _IO_pos_BAD : offset); } static int @@ -117,6 +116,29 @@ static struct _IO_jump_t _IO_cookie_jumps = { }; +void +_IO_cookie_init (struct _IO_cookie_file *cfile, int read_write, + void *cookie, _IO_cookie_io_functions_t io_functions) +{ + _IO_init (&cfile->__file, 0); + _IO_JUMPS (&cfile->__file) = &_IO_cookie_jumps; + + cfile->__cookie = cookie; + cfile->__io_functions = io_functions; + + _IO_file_init(&cfile->__file); + + cfile->__file._IO_file_flags = + _IO_mask_flags (&cfile->__file, read_write, + _IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING); + + /* We use a negative number different from -1 for _fileno to mark that + this special stream is not associated with a real file, but still has + to be treated as such. */ + cfile->__file._fileno = -2; +} + + _IO_FILE * fopencookie (cookie, mode, io_functions) void *cookie; @@ -156,21 +178,7 @@ fopencookie (cookie, mode, io_functions) new_f->cfile.__file._lock = &new_f->lock; #endif - _IO_init (&new_f->cfile.__file, 0); - _IO_JUMPS (&new_f->cfile.__file) = &_IO_cookie_jumps; - new_f->cfile.__cookie = cookie; - new_f->cfile.__io_functions = io_functions; - - _IO_file_init(&new_f->cfile.__file); - - new_f->cfile.__file._IO_file_flags = - _IO_mask_flags (&new_f->cfile.__file, read_write, - _IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING); - - /* We use a negative number different from -1 for _fileno to mark that - this special stream is not associated with a real file, but still has - to be treated as such. */ - new_f->cfile.__file._fileno = -2; + _IO_cookie_init (&new_f->cfile, read_write, cookie, io_functions); return &new_f->cfile.__file; } |