mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-07 15:03:34 +00:00
b0df6c1fce
Cosmopolitan now supports 104 time zones. They're embedded inside any binary that links the localtime() function. Doing so adds about 100kb to the binary size. This change also gets time zones working properly on Windows for the first time. It's not needed to have /etc/localtime exist on Windows, since we can get this information from WIN32. We're also now updated to the latest version of Paul Eggert's TZ library.
199 lines
6.4 KiB
C++
199 lines
6.4 KiB
C++
// -*- C++ -*-
|
|
//===--------------------------- cwchar -----------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef _LIBCPP_CWCHAR
|
|
#define _LIBCPP_CWCHAR
|
|
|
|
#include "third_party/libcxx/__config"
|
|
#include "third_party/libcxx/cwctype"
|
|
#include "third_party/libcxx/wchar.h"
|
|
#include "libc/stdio/stdio.h"
|
|
#include "libc/str/str.h"
|
|
#include "libc/time.h"
|
|
#include "libc/stdio/stdio.h"
|
|
#include "libc/stdio/stdio.h"
|
|
#include "libc/fmt/conv.h"
|
|
#include "third_party/gdtoa/gdtoa.h"
|
|
|
|
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
|
#pragma GCC system_header
|
|
#endif
|
|
|
|
_LIBCPP_BEGIN_NAMESPACE_STD
|
|
|
|
/*
|
|
cwchar synopsis
|
|
|
|
Macros:
|
|
|
|
NULL
|
|
WCHAR_MAX
|
|
WCHAR_MIN
|
|
WEOF
|
|
|
|
namespace std
|
|
{
|
|
|
|
Types:
|
|
|
|
mbstate_t
|
|
size_t
|
|
tm
|
|
wint_t
|
|
|
|
int fwprintf(FILE* restrict stream, const wchar_t* restrict format, ...);
|
|
int fwscanf(FILE* restrict stream, const wchar_t* restrict format, ...);
|
|
int swprintf(wchar_t* restrict s, size_t n, const wchar_t* restrict format, ...);
|
|
int swscanf(const wchar_t* restrict s, const wchar_t* restrict format, ...);
|
|
int vfwprintf(FILE* restrict stream, const wchar_t* restrict format, va_list arg);
|
|
int vfwscanf(FILE* restrict stream, const wchar_t* restrict format, va_list arg); // C99
|
|
int vswprintf(wchar_t* restrict s, size_t n, const wchar_t* restrict format, va_list arg);
|
|
int vswscanf(const wchar_t* restrict s, const wchar_t* restrict format, va_list arg); // C99
|
|
int vwprintf(const wchar_t* restrict format, va_list arg);
|
|
int vwscanf(const wchar_t* restrict format, va_list arg); // C99
|
|
int wprintf(const wchar_t* restrict format, ...);
|
|
int wscanf(const wchar_t* restrict format, ...);
|
|
wint_t fgetwc(FILE* stream);
|
|
wchar_t* fgetws(wchar_t* restrict s, int n, FILE* restrict stream);
|
|
wint_t fputwc(wchar_t c, FILE* stream);
|
|
int fputws(const wchar_t* restrict s, FILE* restrict stream);
|
|
int fwide(FILE* stream, int mode);
|
|
wint_t getwc(FILE* stream);
|
|
wint_t getwchar();
|
|
wint_t putwc(wchar_t c, FILE* stream);
|
|
wint_t putwchar(wchar_t c);
|
|
wint_t ungetwc(wint_t c, FILE* stream);
|
|
double wcstod(const wchar_t* restrict nptr, wchar_t** restrict endptr);
|
|
float wcstof(const wchar_t* restrict nptr, wchar_t** restrict endptr); // C99
|
|
long double wcstold(const wchar_t* restrict nptr, wchar_t** restrict endptr); // C99
|
|
long wcstol(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);
|
|
long long wcstoll(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base); // C99
|
|
unsigned long wcstoul(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);
|
|
unsigned long long wcstoull(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base); // C99
|
|
wchar_t* wcscpy(wchar_t* restrict s1, const wchar_t* restrict s2);
|
|
wchar_t* wcsncpy(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
|
|
wchar_t* wcscat(wchar_t* restrict s1, const wchar_t* restrict s2);
|
|
wchar_t* wcsncat(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
|
|
int wcscmp(const wchar_t* s1, const wchar_t* s2);
|
|
int wcscoll(const wchar_t* s1, const wchar_t* s2);
|
|
int wcsncmp(const wchar_t* s1, const wchar_t* s2, size_t n);
|
|
size_t wcsxfrm(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
|
|
const wchar_t* wcschr(const wchar_t* s, wchar_t c);
|
|
wchar_t* wcschr( wchar_t* s, wchar_t c);
|
|
size_t wcscspn(const wchar_t* s1, const wchar_t* s2);
|
|
size_t wcslen(const wchar_t* s);
|
|
const wchar_t* wcspbrk(const wchar_t* s1, const wchar_t* s2);
|
|
wchar_t* wcspbrk( wchar_t* s1, const wchar_t* s2);
|
|
const wchar_t* wcsrchr(const wchar_t* s, wchar_t c);
|
|
wchar_t* wcsrchr( wchar_t* s, wchar_t c);
|
|
size_t wcsspn(const wchar_t* s1, const wchar_t* s2);
|
|
const wchar_t* wcsstr(const wchar_t* s1, const wchar_t* s2);
|
|
wchar_t* wcsstr( wchar_t* s1, const wchar_t* s2);
|
|
wchar_t* wcstok(wchar_t* restrict s1, const wchar_t* restrict s2, wchar_t** restrict ptr);
|
|
const wchar_t* wmemchr(const wchar_t* s, wchar_t c, size_t n);
|
|
wchar_t* wmemchr( wchar_t* s, wchar_t c, size_t n);
|
|
int wmemcmp(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
|
|
wchar_t* wmemcpy(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
|
|
wchar_t* wmemmove(wchar_t* s1, const wchar_t* s2, size_t n);
|
|
wchar_t* wmemset(wchar_t* s, wchar_t c, size_t n);
|
|
size_t wcsftime(wchar_t* restrict s, size_t maxsize, const wchar_t* restrict format,
|
|
const tm* restrict timeptr);
|
|
wint_t btowc(int c);
|
|
int wctob(wint_t c);
|
|
int mbsinit(const mbstate_t* ps);
|
|
size_t mbrlen(const char* restrict s, size_t n, mbstate_t* restrict ps);
|
|
size_t mbrtowc(wchar_t* restrict pwc, const char* restrict s, size_t n, mbstate_t* restrict ps);
|
|
size_t wcrtomb(char* restrict s, wchar_t wc, mbstate_t* restrict ps);
|
|
size_t mbsrtowcs(wchar_t* restrict dst, const char** restrict src, size_t len,
|
|
mbstate_t* restrict ps);
|
|
size_t wcsrtombs(char* restrict dst, const wchar_t** restrict src, size_t len,
|
|
mbstate_t* restrict ps);
|
|
|
|
} // std
|
|
|
|
*/
|
|
|
|
using ::mbstate_t;
|
|
using ::size_t;
|
|
using ::tm;
|
|
using ::wint_t;
|
|
using ::FILE;
|
|
using ::fwprintf;
|
|
using ::fwscanf;
|
|
using ::swprintf;
|
|
using ::vfwprintf;
|
|
using ::vswprintf;
|
|
using ::swscanf;
|
|
using ::vfwscanf;
|
|
using ::vswscanf;
|
|
using ::fgetwc;
|
|
using ::fgetws;
|
|
using ::fputwc;
|
|
using ::fputws;
|
|
using ::fwide;
|
|
using ::getwc;
|
|
using ::putwc;
|
|
using ::ungetwc;
|
|
using ::wcstod;
|
|
using ::wcstof;
|
|
using ::wcstold;
|
|
using ::wcstol;
|
|
#ifndef _LIBCPP_HAS_NO_LONG_LONG
|
|
using ::wcstoll;
|
|
#endif // _LIBCPP_HAS_NO_LONG_LONG
|
|
using ::wcstoul;
|
|
#ifndef _LIBCPP_HAS_NO_LONG_LONG
|
|
using ::wcstoull;
|
|
#endif // _LIBCPP_HAS_NO_LONG_LONG
|
|
using ::wcscpy;
|
|
using ::wcsncpy;
|
|
using ::wcscat;
|
|
using ::wcsncat;
|
|
using ::wcscmp;
|
|
using ::wcscoll;
|
|
using ::wcsncmp;
|
|
using ::wcsxfrm;
|
|
using ::wcschr;
|
|
using ::wcspbrk;
|
|
using ::wcsrchr;
|
|
using ::wcsstr;
|
|
using ::wmemchr;
|
|
using ::wcscspn;
|
|
using ::wcslen;
|
|
using ::wcsspn;
|
|
using ::wcstok;
|
|
using ::wmemcmp;
|
|
using ::wmemcpy;
|
|
using ::wmemmove;
|
|
using ::wmemset;
|
|
using ::wcsftime;
|
|
using ::btowc;
|
|
using ::wctob;
|
|
using ::mbsinit;
|
|
using ::mbrlen;
|
|
using ::mbrtowc;
|
|
using ::wcrtomb;
|
|
using ::mbsrtowcs;
|
|
using ::wcsrtombs;
|
|
|
|
#ifndef _LIBCPP_HAS_NO_STDIN
|
|
using ::getwchar;
|
|
using ::vwscanf;
|
|
using ::wscanf;
|
|
#endif
|
|
|
|
#ifndef _LIBCPP_HAS_NO_STDOUT
|
|
using ::putwchar;
|
|
using ::vwprintf;
|
|
using ::wprintf;
|
|
#endif
|
|
|
|
_LIBCPP_END_NAMESPACE_STD
|
|
|
|
#endif // _LIBCPP_CWCHAR
|