c_io_libio.cc (basic_file<char>::__basic_file): Don't pass a NULL _IO_wide_data to _IO_no_init when...

* config/c_io_libio.cc (basic_file<char>::__basic_file):
	Don't pass a NULL _IO_wide_data to _IO_no_init when
	_GLIBCPP_USE_WCHAR_T is not defined.
	* config/c_io_libio.h (_IO_codecvt): Don't declare when
	_GLIBCPP_USE_WCHAR_T is not defined.
	* config/c_io_libio_codecvt.c: Don't compile it
	when _GLIBCPP_USE_WCHAR_T is not defined.
	* include/bits/codecvt.h (codecvt<_InternT, _ExternT, __enc_traits):
	Don't define this specialization when _GLIBCPP_USE_WCHAR_T
	is not defined.
	* include/bits/locale_facets.h (<bits/std_cwctype.h>): Don't
	include it when _GLIBCPP_USE_WCHAR_T is not defined.
	* src/codecvt.cc (__enc_traits::_S_max_size): Don't define
	when _GLIBCPP_USE_WCHAR_T is not defined.
	* src/localename.cc (locale::_Impl::_M_construct_collate):
	Don't call wide-character functions when _GLIBCPP_USE_WCHAR_T is
	not defined.
	(locale::_Impl::_M_construct_ctype): Likewise.
	(locale::_Impl::_M_construct_monetary): Likewise.
	(locale::_Impl::_M_construct_numeric): Likewise.
	(locale::_Impl::_M_construct_time): Likewise.
	(locale::_Impl::_M_construct_messages): Likewise.

	* iofopen.c (_IO_new_fopen): Don't define `_IO_wide_data wd'
	if _GLIBCPP_USE_WCHAR_T is not defined.
	* iofwide.c: Don't define codecvt functions when
	_GLIBCPP_USE_WCHAR_T is not defined.
	(_IO_fwide): Don't try to put the stream in wide mode when
	_GLIBCPP_USE_WCHAR_T is not defined.
	* libio.h (_IO_wide_data): Define it as an incomplete struct
	when _GLIBCPP_USE_WCHAR_T is not defined.
	* wfiledoalloc.c: Don't define anything when
	_GLIBCPP_USE_WCHAR_T is not defined.
	* wfileops.c: Likewise.
	* wgenops.c: Likewise.

From-SVN: r37131
This commit is contained in:
Mark Mitchell 2000-10-29 21:52:54 +00:00 committed by Mark Mitchell
parent f80c00cc55
commit 3c97056f54
15 changed files with 105 additions and 4 deletions

View File

@ -1,6 +1,29 @@
2000-10-29 Mark Mitchell <mark@codesourcery.com>
* acinclue.m4 (GLIBCPP_ENABLE_ATOMICITY): Handle IRIX.
* config/c_io_libio.cc (basic_file<char>::__basic_file):
Don't pass a NULL _IO_wide_data to _IO_no_init when
_GLIBCPP_USE_WCHAR_T is not defined.
* config/c_io_libio.h (_IO_codecvt): Don't declare when
_GLIBCPP_USE_WCHAR_T is not defined.
* config/c_io_libio_codecvt.c: Don't compile it
when _GLIBCPP_USE_WCHAR_T is not defined.
* include/bits/codecvt.h (codecvt<_InternT, _ExternT, __enc_traits):
Don't define this specialization when _GLIBCPP_USE_WCHAR_T
is not defined.
* include/bits/locale_facets.h (<bits/std_cwctype.h>): Don't
include it when _GLIBCPP_USE_WCHAR_T is not defined.
* src/codecvt.cc (__enc_traits::_S_max_size): Don't define
when _GLIBCPP_USE_WCHAR_T is not defined.
* src/localename.cc (locale::_Impl::_M_construct_collate):
Don't call wide-character functions when _GLIBCPP_USE_WCHAR_T is
not defined.
(locale::_Impl::_M_construct_ctype): Likewise.
(locale::_Impl::_M_construct_monetary): Likewise.
(locale::_Impl::_M_construct_numeric): Likewise.
(locale::_Impl::_M_construct_time): Likewise.
(locale::_Impl::_M_construct_messages): Likewise.
* acinclude.m4 (GLIBCPP_ENABLE_ATOMICITY): Handle IRIX.
* aclocal.m4: Regenerated.
* configure: Likewise.
* config/os/irix/bits/atomicity.h: New file.

View File

@ -204,7 +204,11 @@ namespace std {
_lock = __lock;
#endif
// Don't set the orientation of the stream when initializing.
#ifdef _GLIBCPP_USE_WCHAR_T
_IO_no_init(this, 0, 0, &_M_wfile, 0);
#else /* !defined(_GLIBCPP_USE_WCHAR_T) */
_IO_no_init(this, 0, 0, NULL, 0);
#endif /* !defined(_GLIBCPP_USE_WCHAR_T) */
_IO_JUMPS((_IO_FILE_plus *) this) = &_IO_file_jumps;
_IO_file_init((_IO_FILE_plus*)this);
}

View File

@ -62,7 +62,9 @@ namespace std {
typedef _IO_FILE __c_file_type;
typedef _IO_wide_data __c_wfile_type;
#ifdef _GLIBCPP_USE_WCHAR_T
extern "C" _IO_codecvt __c_libio_codecvt;
#endif /* defined (_GLIBCPP_USE_WCHAR_T) */
// from ios_base.h
struct __ios_flags

View File

@ -27,6 +27,7 @@
#include <libio.h>
#ifdef _GLIBCPP_USE_WCHAR_T
/* Prototypes of libio's codecvt functions. */
static enum __codecvt_result
@ -148,3 +149,5 @@ do_length(struct _IO_codecvt *codecvt, __c_mbstate_t *statep,
static int
do_max_length(struct _IO_codecvt *codecvt)
{ return 1; }
#endif /* _GLIBCPP_USE_WCHAR_T */

View File

@ -303,6 +303,7 @@ namespace std
template<typename _InternT, typename _ExternT, typename _StateT>
locale::id codecvt<_InternT, _ExternT, _StateT>::id;
#ifdef _GLIBCPP_USE_WCHAR_T
// partial specialization
// This specialization takes advantage of iconv to provide code
// conversions between a large number of character encodings.
@ -567,6 +568,7 @@ namespace std
do_max_length() const throw()
{ return 1; }
#endif
#endif /* _GLIBCPP_USE_WCHAR_T */
// codecvt<char, char, mbstate_t> required specialization
template<>

View File

@ -39,7 +39,9 @@
#include <bits/std_ctime.h> // For struct tm
#include <typeinfo> // For bad_cast, which shouldn't be here.
#include <bits/std_ios.h> // For ios_base
#ifdef _GLIBCPP_USE_WCHAR_T
#include <bits/std_cwctype.h> // For wctype_t
#endif /* _GLIBCPP_USE_WCHAR_T */
namespace std
{

View File

@ -1,5 +1,18 @@
2000-10-29 Mark Mitchell <mark@codesourcery.com>
* iofopen.c (_IO_new_fopen): Don't define `_IO_wide_data wd'
if _GLIBCPP_USE_WCHAR_T is not defined.
* iofwide.c: Don't define codecvt functions when
_GLIBCPP_USE_WCHAR_T is not defined.
(_IO_fwide): Don't try to put the stream in wide mode when
_GLIBCPP_USE_WCHAR_T is not defined.
* libio.h (_IO_wide_data): Define it as an incomplete struct
when _GLIBCPP_USE_WCHAR_T is not defined.
* wfiledoalloc.c: Don't define anything when
_GLIBCPP_USE_WCHAR_T is not defined.
* wfileops.c: Likewise.
* wgenops.c: Likewise.
* _G_config.h (_G_USING_THUNKS): Allow overrides from
OS-configuration files.
* libioP.h: Test _G_USING_THUNKS with #if, rather than #ifdef.

View File

@ -44,7 +44,9 @@ _IO_new_fopen (filename, mode)
#ifdef _IO_MTSAFE_IO
_IO_lock_t lock;
#endif
#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
struct _IO_wide_data wd;
#endif /* !(defined _LIBC || defined _GLIBCPP_USE_WCHAR_T) */
} *new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE));
if (new_f == NULL)

View File

@ -38,7 +38,7 @@
# include <langinfo.h>
#endif
#ifdef _GLIBCPP_USE_WCHAR_T
/* Prototypes of libio's codecvt functions. */
static enum __codecvt_result do_out (struct _IO_codecvt *codecvt,
__c_mbstate_t *statep,
@ -83,7 +83,7 @@ static struct __gconv_trans_data libio_translit =
.__trans_fct = __gconv_transliterate
};
#endif
#endif /* defined(GLIBCPP_USE_WCHAR_T) */
/* Return orientation of stream. If mode is nonzero try to change
the orientation first. */
@ -104,6 +104,7 @@ _IO_fwide (fp, mode)
/* Set the orientation appropriately. */
if (mode > 0)
{
#ifdef _GLIBCPP_USE_WCHAR_T
struct _IO_codecvt *cc = fp->_codecvt;
fp->_wide_data->_IO_read_ptr = fp->_wide_data->_IO_read_end;
@ -174,6 +175,9 @@ _IO_fwide (fp, mode)
/* From now on use the wide character callback functions. */
((struct _IO_FILE_plus *) fp)->vtable = fp->_wide_data->_wide_vtable;
#else /* !defined(_GLIBCPP_USE_WCHAR_T) */
mode = fp->_mode;
#endif /* !defined(_GLIBCPP_USE_WCHAR_T) */
}
/* Set the mode now. */
@ -186,6 +190,7 @@ _IO_fwide (fp, mode)
weak_alias (_IO_fwide, fwide)
#endif
#ifdef _GLIBCPP_USE_WCHAR_T
static enum __codecvt_result
do_out (struct _IO_codecvt *codecvt, __c_mbstate_t *statep,
@ -467,3 +472,5 @@ do_max_length (struct _IO_codecvt *codecvt)
return MB_CUR_MAX;
#endif
}
#endif /* defined(_GLIBCPP_USE_WCHAR_T) */

View File

@ -254,7 +254,13 @@ struct _IO_wide_data
struct _IO_jump_t *_wide_vtable;
#endif
};
#endif
#else /* !(defined _LIBC || defined _GLIBCPP_USE_WCHAR_T) */
/* Because _IO_no_init unconditionally takes a `_IO_wide_data*' as its
last parameter we must still define this type. We intentionally
leave it incomplete to prevent any use of this type when we are not
supporting wide characters. */
struct _IO_wide_data;
#endif /* !(defined _LIBC || defined _GLIBCPP_USE_WCHAR_T) */
struct _IO_FILE {
int _flags; /* High-order word is _IO_MAGIC; rest is flags. */

View File

@ -46,6 +46,7 @@
# define _POSIX_SOURCE
#endif
#include "libioP.h"
#ifdef _GLIBCPP_USE_WCHAR_T
#include <sys/types.h>
#include <sys/stat.h>
#ifdef __STDC__
@ -103,3 +104,5 @@ _IO_wfile_doallocate (fp)
fp->_flags |= _IO_LINE_BUF;
return 1;
}
#endif /* _GLIBCPP_USE_WCHAR_T */

View File

@ -27,6 +27,7 @@
#include <assert.h>
#include <libioP.h>
#ifdef _GLIBCPP_USE_WCHAR_T
#include <wchar.h>
#ifdef HAVE_GCONV_H
# include <gconv.h>
@ -749,3 +750,5 @@ struct _IO_jump_t _IO_wfile_jumps =
JUMP_INIT(showmanyc, _IO_default_showmanyc),
JUMP_INIT(imbue, _IO_default_imbue)
};
#endif /* _GLIBCPP_USE_WCHAR_T */

View File

@ -28,6 +28,7 @@
/* Generic or default I/O operations. */
#include "libioP.h"
#ifdef _GLIBCPP_USE_WCHAR_T
#ifdef __STDC__
#include <stdlib.h>
#endif
@ -751,3 +752,5 @@ _IO_unsave_wmarkers (fp)
if (_IO_have_backup (fp))
_IO_free_wbackup_area (fp);
}
#endif /* _GLIBCPP_USE_WCHAR_T */

View File

@ -31,8 +31,10 @@
namespace std {
#ifdef _GLIBCPP_USE_WCHAR_T
// Definitions for static const data members of __enc_traits.
const int __enc_traits::_S_max_size;
#endif /* _GLIBCPP_USE_WCHAR_T */
// codecvt<char, char, mbstate_t> required specialization
locale::id codecvt<char, char, mbstate_t>::id;

View File

@ -223,58 +223,84 @@ namespace std {
locale::_Impl::_M_construct_collate(const char* __name)
{
_M_facet_init(new collate_byname<char>(__name, 0));
#ifdef _GLIBCPP_USE_WCHAR_T
_M_facet_init(new collate_byname<wchar_t>(__name, 0));
#endif /* _GLIBCPP_USE_WCHAR_T */
}
void
locale::_Impl::_M_construct_ctype(const char* __name)
{
_M_facet_init(new ctype_byname<char>(__name, 0));
#ifdef _GLIBCPP_USE_WCHAR_T
_M_facet_init(new ctype_byname<wchar_t>(__name, 0));
#endif /* _GLIBCPP_USE_WCHAR_T */
_M_facet_init(new codecvt_byname<char, char, mbstate_t>(__name));
#ifdef _GLIBCPP_USE_WCHAR_T
_M_facet_init(new codecvt_byname<wchar_t, char, mbstate_t>(__name));
#endif /* _GLIBCPP_USE_WCHAR_T */
}
void
locale::_Impl::_M_construct_monetary(const char* __name)
{
_M_facet_init(new moneypunct_byname<char, false>(__name, 0));
#ifdef _GLIBCPP_USE_WCHAR_T
_M_facet_init(new moneypunct_byname<wchar_t, false>(__name, 0));
#endif /* _GLIBCPP_USE_WCHAR_T */
_M_facet_init(new moneypunct_byname<char, true >(__name, 0));
#ifdef _GLIBCPP_USE_WCHAR_T
_M_facet_init(new moneypunct_byname<wchar_t, true >(__name, 0));
#endif /* _GLIBCPP_USE_WCHAR_T */
_M_replace_facet(locale::_S_classic, &money_get<char>::id);
#ifdef _GLIBCPP_USE_WCHAR_T
_M_replace_facet(locale::_S_classic, &money_get<wchar_t>::id);
#endif /* _GLIBCPP_USE_WCHAR_T */
_M_replace_facet(locale::_S_classic, &money_put<char>::id);
#ifdef _GLIBCPP_USE_WCHAR_T
_M_replace_facet(locale::_S_classic, &money_put<wchar_t>::id);
#endif /* _GLIBCPP_USE_WCHAR_T */
}
void
locale::_Impl::_M_construct_numeric(const char* __name)
{
_M_facet_init(new numpunct_byname<char>(__name, 0));
#ifdef _GLIBCPP_USE_WCHAR_T
_M_facet_init(new numpunct_byname<wchar_t>(__name, 0));
#endif /* _GLIBCPP_USE_WCHAR_T */
_M_replace_facet(locale::_S_classic, &num_get<char>::id);
#ifdef _GLIBCPP_USE_WCHAR_T
_M_replace_facet(locale::_S_classic, &num_get<wchar_t>::id);
#endif /* _GLIBCPP_USE_WCHAR_T */
_M_replace_facet(locale::_S_classic, &num_put<char>::id);
#ifdef _GLIBCPP_USE_WCHAR_T
_M_replace_facet(locale::_S_classic, &num_put<wchar_t>::id);
#endif /* _GLIBCPP_USE_WCHAR_T */
}
void
locale::_Impl::_M_construct_time(const char* __name)
{
_M_facet_init(new time_get_byname<char>(__name, 0));
#ifdef _GLIBCPP_USE_WCHAR_T
_M_facet_init(new time_get_byname<wchar_t>(__name, 0));
#endif /* _GLIBCPP_USE_WCHAR_T */
_M_facet_init(new time_put_byname<char>(__name, 0));
#ifdef _GLIBCPP_USE_WCHAR_T
_M_facet_init(new time_put_byname<wchar_t>(__name, 0));
#endif /* _GLIBCPP_USE_WCHAR_T */
}
void
locale::_Impl::_M_construct_messages(const char* __name)
{
_M_facet_init(new messages_byname<char>(__name, 0));
#ifdef _GLIBCPP_USE_WCHAR_T
_M_facet_init(new messages_byname<wchar_t>(__name, 0));
#endif /* _GLIBCPP_USE_WCHAR_T */
}
}