diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-05-28 18:32:20 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-05-28 18:32:20 +0000 |
commit | 7163e69e10f3bbbe71a416d15e66eac16c852d27 (patch) | |
tree | f9f24400eca60cf5f6b49e92fb8e6b62a8b3195b /libio | |
parent | 1ef9f0b673cc36f307161d653d4305dee8da00f9 (diff) | |
download | glibc-7163e69e10f3bbbe71a416d15e66eac16c852d27.tar.gz |
Update.
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.
Diffstat (limited to 'libio')
-rw-r--r-- | libio/bits/stdio.h | 2 | ||||
-rw-r--r-- | libio/fileops.c | 6 | ||||
-rw-r--r-- | libio/iosetbuffer.c | 6 | ||||
-rw-r--r-- | libio/iosetvbuf.c | 7 | ||||
-rw-r--r-- | libio/libioP.h | 2 |
5 files changed, 14 insertions, 9 deletions
diff --git a/libio/bits/stdio.h b/libio/bits/stdio.h index d698132558..2522a3846e 100644 --- a/libio/bits/stdio.h +++ b/libio/bits/stdio.h @@ -1,5 +1,5 @@ /* 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 modify it under the terms of the GNU Library General Public License as diff --git a/libio/fileops.c b/libio/fileops.c index c5aea3a60e..cd57370d98 100644 --- a/libio/fileops.c +++ b/libio/fileops.c @@ -278,9 +278,9 @@ _IO_new_file_fopen (fp, filename, mode, is32not64) /* Yep. Load the appropriate conversions and set the orientation to wide. */ 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. This means we cannot proceed since the user explicitly asked @@ -289,6 +289,8 @@ _IO_new_file_fopen (fp, filename, mode, is32not64) return NULL; } + cc = &fp->_wide_data->_codecvt; + /* The functions are always the same. */ *cc = __libio_codecvt; diff --git a/libio/iosetbuffer.c b/libio/iosetbuffer.c index 852a2dd36c..99738a7faf 100644 --- a/libio/iosetbuffer.c +++ b/libio/iosetbuffer.c @@ -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 library is free software; you can redistribute it and/or @@ -32,13 +32,13 @@ _IO_setbuffer (fp, buf, size) _IO_size_t size; { 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); fp->_flags &= ~_IO_LINE_BUF; if (!buf) size = 0; (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. */ (void) _IO_WSETBUF (fp, buf, size); _IO_funlockfile (fp); diff --git a/libio/iosetvbuf.c b/libio/iosetvbuf.c index a0287a3ee5..673677191a 100644 --- a/libio/iosetvbuf.c +++ b/libio/iosetvbuf.c @@ -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 library is free software; you can redistribute it and/or @@ -38,7 +38,7 @@ _IO_setvbuf (fp, buf, mode, size) { int result; 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); switch (mode) { @@ -90,7 +90,8 @@ _IO_setvbuf (fp, buf, mode, size) goto unlock_return; } 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. */ result = _IO_WSETBUF (fp, buf, size) == NULL ? EOF : 0; diff --git a/libio/libioP.h b/libio/libioP.h index d23436ab26..59d20cd4be 100644 --- a/libio/libioP.h +++ b/libio/libioP.h @@ -71,6 +71,8 @@ extern "C" { #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_CHECK_WIDE(THIS) (((struct _IO_FILE *) (THIS))->_wide_data != NULL) + #if _IO_JUMPS_OFFSET # define _IO_JUMPS_FUNC(THIS) \ (*(struct _IO_jump_t **) ((void *) &((struct _IO_FILE_plus *) (THIS))->vtable\ |