mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-22 10:50:07 +00:00
Update.
1999-07-08 Andreas Schwab <schwab@suse.de> * libio/iofopncook.c (fopencookie): Set _fileno to -2. * libio/libioP.h (_IO_file_is_open): Only check for -1, not all negative numbers. * libio/fileops.c (_IO_new_file_close_it): Set _fileno to -1, not EOF. * libio/oldfileops.c (_IO_old_file_close_it): Likewise. 1999-07-08 Andreas Schwab <schwab@suse.de> * stdio-common/vfprintf.c (buffered_vfprintf): Initialize _mode. 1999-07-08 Andreas Schwab <schwab@suse.de> * libio/fileno.c: Return -1 instead of EOF and set errno if the stream is not a real file stream. 1999-07-08 Andreas Schwab <schwab@suse.de> * manual/charset.texi: Fix typos.
This commit is contained in:
parent
94e365c612
commit
110215a9a7
24
ChangeLog
24
ChangeLog
@ -1,3 +1,27 @@
|
|||||||
|
1999-07-08 Andreas Schwab <schwab@suse.de>
|
||||||
|
|
||||||
|
* libio/iofopncook.c (fopencookie): Set _fileno to -2.
|
||||||
|
|
||||||
|
* libio/libioP.h (_IO_file_is_open): Only check for -1, not all
|
||||||
|
negative numbers.
|
||||||
|
|
||||||
|
* libio/fileops.c (_IO_new_file_close_it): Set _fileno to -1, not
|
||||||
|
EOF.
|
||||||
|
* libio/oldfileops.c (_IO_old_file_close_it): Likewise.
|
||||||
|
|
||||||
|
1999-07-08 Andreas Schwab <schwab@suse.de>
|
||||||
|
|
||||||
|
* stdio-common/vfprintf.c (buffered_vfprintf): Initialize _mode.
|
||||||
|
|
||||||
|
1999-07-08 Andreas Schwab <schwab@suse.de>
|
||||||
|
|
||||||
|
* libio/fileno.c: Return -1 instead of EOF and set errno if the
|
||||||
|
stream is not a real file stream.
|
||||||
|
|
||||||
|
1999-07-08 Andreas Schwab <schwab@suse.de>
|
||||||
|
|
||||||
|
* manual/charset.texi: Fix typos.
|
||||||
|
|
||||||
1999-07-07 Ulrich Drepper <drepper@cygnus.com>
|
1999-07-07 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
* sysdeps/gnu/Makefile (libdl-routines): Add eval.
|
* sysdeps/gnu/Makefile (libdl-routines): Add eval.
|
||||||
|
100
elf/dlfcn.h
100
elf/dlfcn.h
@ -1,100 +0,0 @@
|
|||||||
/* User functions for run-time dynamic loading.
|
|
||||||
Copyright (C) 1995, 1996, 1997, 1998, 1999 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., 59 Temple Place - Suite 330,
|
|
||||||
Boston, MA 02111-1307, USA. */
|
|
||||||
|
|
||||||
#ifndef _DLFCN_H
|
|
||||||
#define _DLFCN_H 1
|
|
||||||
|
|
||||||
#include <features.h>
|
|
||||||
#define __need_NULL
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
/* Collect various system dependent definitions and declarations. */
|
|
||||||
#include <bits/dlfcn.h>
|
|
||||||
|
|
||||||
/* If the first argument of `dlsym' or `dlvsym' is set to RTLD_NEXT
|
|
||||||
the run-time address of the symbol called NAME in the next shared
|
|
||||||
object is returned. The "next" relation is defined by the order
|
|
||||||
the shared objects were loaded. */
|
|
||||||
#define RTLD_NEXT ((void *) -1l)
|
|
||||||
|
|
||||||
/* If the first argument to `dlsym' or `dlvsym' is set to RTLD_DEFAULT
|
|
||||||
the run-time address of the symbol called NAME in the global scope
|
|
||||||
is returned. */
|
|
||||||
#define RTLD_DEFAULT NULL
|
|
||||||
|
|
||||||
__BEGIN_DECLS
|
|
||||||
|
|
||||||
/* Open the shared object FILE and map it in; return a handle that can be
|
|
||||||
passed to `dlsym' to get symbol values from it. */
|
|
||||||
extern void *dlopen __P ((__const char *__file, int __mode));
|
|
||||||
|
|
||||||
/* Unmap and close a shared object opened by `dlopen'.
|
|
||||||
The handle cannot be used again after calling `dlclose'. */
|
|
||||||
extern int dlclose __P ((void *__handle));
|
|
||||||
|
|
||||||
/* Find the run-time address in the shared object HANDLE refers to
|
|
||||||
of the symbol called NAME. */
|
|
||||||
extern void *dlsym __P ((void *__restrict __handle,
|
|
||||||
__const char *__restrict __name));
|
|
||||||
|
|
||||||
#ifdef __USE_GNU
|
|
||||||
/* Find the run-time address in the shared object HANDLE refers to
|
|
||||||
of the symbol called NAME with VERSION. */
|
|
||||||
extern void *dlvsym __P ((void *__restrict __handle,
|
|
||||||
__const char *__restrict __name,
|
|
||||||
__const char *__restrict __version));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* When any of the above functions fails, call this function
|
|
||||||
to return a string describing the error. Each call resets
|
|
||||||
the error string so that a following call returns null. */
|
|
||||||
extern char *dlerror __P ((void));
|
|
||||||
|
|
||||||
#ifdef __USE_GNU
|
|
||||||
/* Fill in *INFO with the following information about ADDRESS.
|
|
||||||
Returns 0 iff no shared object's segments contain that address. */
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
__const char *dli_fname; /* File name of defining object. */
|
|
||||||
void *dli_fbase; /* Load address of that object. */
|
|
||||||
__const char *dli_sname; /* Name of nearest symbol. */
|
|
||||||
void *dli_saddr; /* Exact value of nearest symbol. */
|
|
||||||
} Dl_info;
|
|
||||||
extern int dladdr __P ((const void *__address, Dl_info *__info));
|
|
||||||
|
|
||||||
/* To support profiling of shared objects it is a good idea to call
|
|
||||||
the function found using `dlsym' using the following macro since
|
|
||||||
these calls do not use the PLT. But this would mean the dynamic
|
|
||||||
loader has no chance to find out when the function is called. The
|
|
||||||
macro applies the necessary magic so that profiling is possible.
|
|
||||||
Rewrite
|
|
||||||
foo = (*fctp) (arg1, arg2);
|
|
||||||
into
|
|
||||||
foo = DL_CALL_FCT (fctp, (arg1, arg2));
|
|
||||||
*/
|
|
||||||
# define DL_CALL_FCT(fctp, args) \
|
|
||||||
(_dl_mcount_wrapper_check (fctp), (*(fctp)) args)
|
|
||||||
|
|
||||||
/* This function calls the profiling functions. */
|
|
||||||
extern void _dl_mcount_wrapper_check __P ((void *__selfpc));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
__END_DECLS
|
|
||||||
|
|
||||||
#endif /* dlfcn.h */
|
|
@ -32,8 +32,11 @@ fileno (fp)
|
|||||||
{
|
{
|
||||||
CHECK_FILE (fp, EOF);
|
CHECK_FILE (fp, EOF);
|
||||||
|
|
||||||
if (!(fp->_flags & _IO_IS_FILEBUF))
|
if (!(fp->_flags & _IO_IS_FILEBUF) || _IO_fileno (fp) < 0)
|
||||||
return EOF;
|
{
|
||||||
|
__set_errno (EBADF);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
return _IO_fileno (fp);
|
return _IO_fileno (fp);
|
||||||
}
|
}
|
||||||
|
@ -151,7 +151,7 @@ _IO_new_file_close_it (fp)
|
|||||||
|
|
||||||
_IO_un_link (fp);
|
_IO_un_link (fp);
|
||||||
fp->_flags = _IO_MAGIC|CLOSED_FILEBUF_FLAGS;
|
fp->_flags = _IO_MAGIC|CLOSED_FILEBUF_FLAGS;
|
||||||
fp->_fileno = EOF;
|
fp->_fileno = -1;
|
||||||
fp->_offset = _IO_pos_BAD;
|
fp->_offset = _IO_pos_BAD;
|
||||||
|
|
||||||
return close_status ? close_status : write_status;
|
return close_status ? close_status : write_status;
|
||||||
|
@ -167,5 +167,10 @@ fopencookie (cookie, mode, io_functions)
|
|||||||
_IO_mask_flags (&new_f->cfile.__file, read_write,
|
_IO_mask_flags (&new_f->cfile.__file, read_write,
|
||||||
_IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
|
_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;
|
||||||
|
|
||||||
return &new_f->cfile.__file;
|
return &new_f->cfile.__file;
|
||||||
}
|
}
|
||||||
|
@ -98,7 +98,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The 'finish' function does any final cleaning up of an _IO_FILE object.
|
/* The 'finish' function does any final cleaning up of an _IO_FILE object.
|
||||||
It does not delete (free) it, but does everything else to finalize it/
|
It does not delete (free) it, but does everything else to finalize it.
|
||||||
It matches the streambuf::~streambuf virtual destructor. */
|
It matches the streambuf::~streambuf virtual destructor. */
|
||||||
typedef void (*_IO_finish_t) __PMT ((_IO_FILE *, int)); /* finalize */
|
typedef void (*_IO_finish_t) __PMT ((_IO_FILE *, int)); /* finalize */
|
||||||
#define _IO_FINISH(FP) JUMP1 (__finish, FP, 0)
|
#define _IO_FINISH(FP) JUMP1 (__finish, FP, 0)
|
||||||
@ -422,7 +422,7 @@ extern int _IO_file_stat __P ((_IO_FILE *, void *));
|
|||||||
extern int _IO_file_close __P ((_IO_FILE *));
|
extern int _IO_file_close __P ((_IO_FILE *));
|
||||||
extern int _IO_file_underflow __P ((_IO_FILE *));
|
extern int _IO_file_underflow __P ((_IO_FILE *));
|
||||||
extern int _IO_file_overflow __P ((_IO_FILE *, int));
|
extern int _IO_file_overflow __P ((_IO_FILE *, int));
|
||||||
#define _IO_file_is_open(__fp) ((__fp)->_fileno >= 0)
|
#define _IO_file_is_open(__fp) ((__fp)->_fileno != -1)
|
||||||
extern void _IO_file_init __P ((_IO_FILE *));
|
extern void _IO_file_init __P ((_IO_FILE *));
|
||||||
extern _IO_FILE* _IO_file_attach __P ((_IO_FILE *, int));
|
extern _IO_FILE* _IO_file_attach __P ((_IO_FILE *, int));
|
||||||
extern _IO_FILE* _IO_file_open __P ((_IO_FILE *, const char *, int, int,
|
extern _IO_FILE* _IO_file_open __P ((_IO_FILE *, const char *, int, int,
|
||||||
|
@ -149,7 +149,7 @@ _IO_old_file_close_it (fp)
|
|||||||
|
|
||||||
_IO_un_link (fp);
|
_IO_un_link (fp);
|
||||||
fp->_flags = _IO_MAGIC|CLOSED_FILEBUF_FLAGS;
|
fp->_flags = _IO_MAGIC|CLOSED_FILEBUF_FLAGS;
|
||||||
fp->_fileno = EOF;
|
fp->_fileno = -1;
|
||||||
fp->_old_offset = _IO_pos_BAD;
|
fp->_old_offset = _IO_pos_BAD;
|
||||||
|
|
||||||
return close_status ? close_status : write_status;
|
return close_status ? close_status : write_status;
|
||||||
|
@ -2137,7 +2137,7 @@ module. These lines must contain three or four more words.
|
|||||||
The first word specifies the source character set, the second word the
|
The first word specifies the source character set, the second word the
|
||||||
destination character set of conversion implemented in this module. The
|
destination character set of conversion implemented in this module. The
|
||||||
third word is the name of the loadable module. The filename is
|
third word is the name of the loadable module. The filename is
|
||||||
constructed by appending the usual shared object prefix (normally
|
constructed by appending the usual shared object suffix (normally
|
||||||
@file{.so}) and this file is then supposed to be found in the same
|
@file{.so}) and this file is then supposed to be found in the same
|
||||||
directory the @file{gconv-modules} file is in. The last word on the
|
directory the @file{gconv-modules} file is in. The last word on the
|
||||||
line, which is optional, is a numeric value representing the cost of the
|
line, which is optional, is a numeric value representing the cost of the
|
||||||
@ -2202,11 +2202,11 @@ existing examples. It'll become clearer once it is. --drepper}
|
|||||||
A last remark about the @file{gconv-modules} is about the names not
|
A last remark about the @file{gconv-modules} is about the names not
|
||||||
ending with @code{//}. There often is a character set named
|
ending with @code{//}. There often is a character set named
|
||||||
@code{INTERNAL} mentioned. From the discussion above and the chosen
|
@code{INTERNAL} mentioned. From the discussion above and the chosen
|
||||||
name it should have become clear that this is the names for the
|
name it should have become clear that this is the name for the
|
||||||
representation used in the intermediate step of the triangulation. We
|
representation used in the intermediate step of the triangulation. We
|
||||||
have said that this is UCS4 but actually it is not quite right. The
|
have said that this is UCS4 but actually it is not quite right. The
|
||||||
UCS4 specification also includes the specification of the byte ordering
|
UCS4 specification also includes the specification of the byte ordering
|
||||||
used. Since an UCS4 value consists of four bytes a stored value is
|
used. Since a UCS4 value consists of four bytes a stored value is
|
||||||
effected by byte ordering. The internal representation is @emph{not}
|
effected by byte ordering. The internal representation is @emph{not}
|
||||||
the same as UCS4 in case the byte ordering of the processor (or at least
|
the same as UCS4 in case the byte ordering of the processor (or at least
|
||||||
the running process) is not the same as the one required for UCS4. This
|
the running process) is not the same as the one required for UCS4. This
|
||||||
@ -2231,7 +2231,7 @@ is necessary to get an overview.
|
|||||||
|
|
||||||
From the perspective of the user of @code{iconv} the interface is quite
|
From the perspective of the user of @code{iconv} the interface is quite
|
||||||
simple: the @code{iconv_open} function returns a handle which can be
|
simple: the @code{iconv_open} function returns a handle which can be
|
||||||
used in calls @code{iconv} and finally the handle is freed with a call
|
used in calls to @code{iconv} and finally the handle is freed with a call
|
||||||
to @code{iconv_close}. The problem is: the handle has to be able to
|
to @code{iconv_close}. The problem is: the handle has to be able to
|
||||||
represent the possibly long sequences of conversion steps and also the
|
represent the possibly long sequences of conversion steps and also the
|
||||||
state of each conversion since the handle is all which is passed to the
|
state of each conversion since the handle is all which is passed to the
|
||||||
@ -2278,7 +2278,7 @@ The interface will be explained below.
|
|||||||
@itemx int max_needed_from
|
@itemx int max_needed_from
|
||||||
@itemx int min_needed_to
|
@itemx int min_needed_to
|
||||||
@itemx int max_needed_to;
|
@itemx int max_needed_to;
|
||||||
These values have to be filled in the the init function of the module.
|
These values have to be filled in the init function of the module.
|
||||||
The @code{min_needed_from} value specifies how many bytes a character of
|
The @code{min_needed_from} value specifies how many bytes a character of
|
||||||
the source character set at least needs. The @code{max_needed_from}
|
the source character set at least needs. The @code{max_needed_from}
|
||||||
specifies the maximum value which also includes possible shift
|
specifies the maximum value which also includes possible shift
|
||||||
|
@ -1861,15 +1861,17 @@ buffered_vfprintf (register _IO_FILE *s, const CHAR_T *format,
|
|||||||
{
|
{
|
||||||
CHAR_T buf[_IO_BUFSIZ];
|
CHAR_T buf[_IO_BUFSIZ];
|
||||||
struct helper_file helper;
|
struct helper_file helper;
|
||||||
register _IO_FILE *hp = (_IO_FILE *) &helper;
|
register _IO_FILE *hp = &helper._f.file;
|
||||||
int result, to_flush;
|
int result, to_flush;
|
||||||
|
|
||||||
/* Initialize helper. */
|
/* Initialize helper. */
|
||||||
helper._put_stream = s;
|
helper._put_stream = s;
|
||||||
#ifdef COMPILE_WPRINTF
|
#ifdef COMPILE_WPRINTF
|
||||||
_IO_wsetp (hp, buf, buf + sizeof buf / sizeof (CHAR_T));
|
_IO_wsetp (hp, buf, buf + sizeof buf / sizeof (CHAR_T));
|
||||||
|
hp->_mode = 1;
|
||||||
#else
|
#else
|
||||||
_IO_setp (hp, buf, buf + sizeof buf);
|
_IO_setp (hp, buf, buf + sizeof buf);
|
||||||
|
hp->_mode = -1;
|
||||||
#endif
|
#endif
|
||||||
hp->_IO_file_flags = _IO_MAGIC|_IO_NO_READS;
|
hp->_IO_file_flags = _IO_MAGIC|_IO_NO_READS;
|
||||||
#if _IO_JUMPS_OFFSET
|
#if _IO_JUMPS_OFFSET
|
||||||
|
Loading…
Reference in New Issue
Block a user