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.
_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);
}
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
#include <libio.h>
+#ifdef _GLIBCPP_USE_WCHAR_T
/* Prototypes of libio's codecvt functions. */
static enum __codecvt_result
static int
do_max_length(struct _IO_codecvt *codecvt)
{ return 1; }
+
+#endif /* _GLIBCPP_USE_WCHAR_T */
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.
do_max_length() const throw()
{ return 1; }
#endif
+#endif /* _GLIBCPP_USE_WCHAR_T */
// codecvt<char, char, mbstate_t> required specialization
template<>
#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
{
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.
#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)
# 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,
.__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. */
/* 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;
/* 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. */
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,
return MB_CUR_MAX;
#endif
}
+
+#endif /* defined(_GLIBCPP_USE_WCHAR_T) */
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. */
# define _POSIX_SOURCE
#endif
#include "libioP.h"
+#ifdef _GLIBCPP_USE_WCHAR_T
#include <sys/types.h>
#include <sys/stat.h>
#ifdef __STDC__
fp->_flags |= _IO_LINE_BUF;
return 1;
}
+
+#endif /* _GLIBCPP_USE_WCHAR_T */
#include <assert.h>
#include <libioP.h>
+#ifdef _GLIBCPP_USE_WCHAR_T
#include <wchar.h>
#ifdef HAVE_GCONV_H
# include <gconv.h>
JUMP_INIT(showmanyc, _IO_default_showmanyc),
JUMP_INIT(imbue, _IO_default_imbue)
};
+
+#endif /* _GLIBCPP_USE_WCHAR_T */
/* Generic or default I/O operations. */
#include "libioP.h"
+#ifdef _GLIBCPP_USE_WCHAR_T
#ifdef __STDC__
#include <stdlib.h>
#endif
if (_IO_have_backup (fp))
_IO_free_wbackup_area (fp);
}
+
+#endif /* _GLIBCPP_USE_WCHAR_T */
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;
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 */
}
}