1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00
2000-05-21  Jakub Jelinek  <jakub@redhat.com>

	* libio/libioP.h (_IO_CHECK_WIDE): Define.
	* libio/iosetbuffer.c (_IO_setbuffer): Use it.
	Call _IO_WSETBUF even for _mode 1.
	* libio/iosetvbuf.c (_IO_setvbuf): Likewise.
	* libio/fileops.c (_IO_new_file_fopen): Return NULL if
	_IO_CHECK_WIDE fails.
This commit is contained in:
Ulrich Drepper
2000-05-28 18:32:20 +00:00
parent 1ef9f0b673
commit 7163e69e10
6 changed files with 23 additions and 9 deletions

View File

@ -1,3 +1,12 @@
2000-05-21 Jakub Jelinek <jakub@redhat.com>
* libio/libioP.h (_IO_CHECK_WIDE): Define.
* libio/iosetbuffer.c (_IO_setbuffer): Use it.
Call _IO_WSETBUF even for _mode 1.
* libio/iosetvbuf.c (_IO_setvbuf): Likewise.
* libio/fileops.c (_IO_new_file_fopen): Return NULL if
_IO_CHECK_WIDE fails.
2000-05-28 Ulrich Drepper <drepper@redhat.com> 2000-05-28 Ulrich Drepper <drepper@redhat.com>
* po/da.po: New file. * po/da.po: New file.

View File

@ -1,5 +1,5 @@
/* Optimizing macros and inline functions for stdio functions. /* Optimizing macros and inline functions for stdio functions.
Copyright (C) 198 Free Software Foundation, Inc. Copyright (C) 1998, 2000 Free Software Foundation, Inc.
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
modify it under the terms of the GNU Library General Public License as modify it under the terms of the GNU Library General Public License as

View File

@ -278,9 +278,9 @@ _IO_new_file_fopen (fp, filename, mode, is32not64)
/* Yep. Load the appropriate conversions and set the orientation /* Yep. Load the appropriate conversions and set the orientation
to wide. */ to wide. */
struct gconv_fcts fcts; struct gconv_fcts fcts;
struct _IO_codecvt *cc = &fp->_wide_data->_codecvt; struct _IO_codecvt *cc;
if (__wcsmbs_named_conv (&fcts, cs + 5) != 0) if (! _IO_CHECK_WIDE (fp) || __wcsmbs_named_conv (&fcts, cs + 5) != 0)
{ {
/* Something went wrong, we cannot load the conversion modules. /* Something went wrong, we cannot load the conversion modules.
This means we cannot proceed since the user explicitly asked This means we cannot proceed since the user explicitly asked
@ -289,6 +289,8 @@ _IO_new_file_fopen (fp, filename, mode, is32not64)
return NULL; return NULL;
} }
cc = &fp->_wide_data->_codecvt;
/* The functions are always the same. */ /* The functions are always the same. */
*cc = __libio_codecvt; *cc = __libio_codecvt;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1993, 95, 96, 97, 98, 99 Free Software Foundation, Inc. /* Copyright (C) 1993, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
This file is part of the GNU IO Library. This file is part of the GNU IO Library.
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
@ -32,13 +32,13 @@ _IO_setbuffer (fp, buf, size)
_IO_size_t size; _IO_size_t size;
{ {
CHECK_FILE (fp, ); CHECK_FILE (fp, );
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
fp->_flags &= ~_IO_LINE_BUF; fp->_flags &= ~_IO_LINE_BUF;
if (!buf) if (!buf)
size = 0; size = 0;
(void) _IO_SETBUF (fp, buf, size); (void) _IO_SETBUF (fp, buf, size);
if (fp->_vtable_offset == 0 && fp->_mode == 0) if (fp->_vtable_offset == 0 && fp->_mode == 0 && _IO_CHECK_WIDE (fp))
/* We also have to set the buffer using the wide char function. */ /* We also have to set the buffer using the wide char function. */
(void) _IO_WSETBUF (fp, buf, size); (void) _IO_WSETBUF (fp, buf, size);
_IO_funlockfile (fp); _IO_funlockfile (fp);

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1993, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. /* Copyright (C) 1993, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
This file is part of the GNU IO Library. This file is part of the GNU IO Library.
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
@ -38,7 +38,7 @@ _IO_setvbuf (fp, buf, mode, size)
{ {
int result; int result;
CHECK_FILE (fp, EOF); CHECK_FILE (fp, EOF);
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
switch (mode) switch (mode)
{ {
@ -90,7 +90,8 @@ _IO_setvbuf (fp, buf, mode, size)
goto unlock_return; goto unlock_return;
} }
result = _IO_SETBUF (fp, buf, size) == NULL ? EOF : 0; result = _IO_SETBUF (fp, buf, size) == NULL ? EOF : 0;
if (result == 0 && fp->_vtable_offset == 0 && fp->_mode == 0) if (result == 0 && fp->_vtable_offset == 0 && fp->_mode == 0
&& _IO_CHECK_WIDE (fp))
/* We also have to set the buffer using the wide char function. */ /* We also have to set the buffer using the wide char function. */
result = _IO_WSETBUF (fp, buf, size) == NULL ? EOF : 0; result = _IO_WSETBUF (fp, buf, size) == NULL ? EOF : 0;

View File

@ -71,6 +71,8 @@ extern "C" {
#define _IO_JUMPS(THIS) ((struct _IO_FILE_plus *) (THIS))->vtable #define _IO_JUMPS(THIS) ((struct _IO_FILE_plus *) (THIS))->vtable
#define _IO_WIDE_JUMPS(THIS) ((struct _IO_FILE *) (THIS))->_wide_data->_wide_vtable #define _IO_WIDE_JUMPS(THIS) ((struct _IO_FILE *) (THIS))->_wide_data->_wide_vtable
#define _IO_CHECK_WIDE(THIS) (((struct _IO_FILE *) (THIS))->_wide_data != NULL)
#if _IO_JUMPS_OFFSET #if _IO_JUMPS_OFFSET
# define _IO_JUMPS_FUNC(THIS) \ # define _IO_JUMPS_FUNC(THIS) \
(*(struct _IO_jump_t **) ((void *) &((struct _IO_FILE_plus *) (THIS))->vtable\ (*(struct _IO_jump_t **) ((void *) &((struct _IO_FILE_plus *) (THIS))->vtable\