mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 03:27:39 +00:00
cf93ecbbb2
The whole repository is now buildable with GNU Make Landlock sandboxing. This proves that no Makefile targets exist which touch files other than their declared prerequisites. In order to do this, we had to: 1. Stop code morphing GCC output in package.com and instead run a newly introduced FIXUPOBJ.COM command after GCC invocations. 2. Disable all the crumby Python unit tests that do things like create files in the current directory, or rename() files between folders. This ended up being a lot of tests, but most of them are still ok. 3. Introduce an .UNSANDBOXED variable to GNU Make to disable Landlock. We currently only do this for things like `make tags`. 4. This change deletes some GNU Make code that was preventing the execve() optimization from working. This means it should no longer be necessary in most cases for command invocations to be indirected through the cocmd interpreter. 5. Missing dependencies had to be declared in certain places, in cases where they couldn't be automatically determined by MKDEPS.COM 6. The libcxx header situation has finally been tamed. One of the things that makes this difficult is MKDEPS.COM only wants to consider the first 64kb of a file, in order to go fast. But libcxx likes to have #include lines buried after huge documentation. 7. An .UNVEIL variable has been introduced to GNU Make just in case we ever wish to explicitly specify additional things that need to be whitelisted which aren't strictly prerequisites. This works in a manner similar to the recently introduced .EXTRA_PREREQS feature. There's now a new build/bootstrap/make.com prebuilt binary available. It should no longer be possible to write invalid Makefile code.
205 lines
8.3 KiB
C++
205 lines
8.3 KiB
C++
// -*- C++ -*-
|
|
//===--------------------------- wchar.h ----------------------------------===//
|
|
//
|
|
// 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_WCHAR_H
|
|
#define _LIBCPP_WCHAR_H
|
|
#include "libc/str/str.h"
|
|
#include "libc/time/time.h"
|
|
#include "third_party/libcxx/__config"
|
|
|
|
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
|
#pragma GCC system_header
|
|
#endif
|
|
|
|
/*
|
|
wchar.h synopsis
|
|
|
|
Macros:
|
|
|
|
NULL
|
|
WCHAR_MAX
|
|
WCHAR_MIN
|
|
WEOF
|
|
|
|
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);d
|
|
ouble 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);
|
|
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
#define __CORRECT_ISO_CPP_WCHAR_H_PROTO
|
|
#endif
|
|
|
|
// #include_next <wchar.h>
|
|
|
|
// Determine whether we have const-correct overloads for wcschr and friends.
|
|
#if defined(_WCHAR_H_CPLUSPLUS_98_CONFORMANCE_)
|
|
#define _LIBCPP_WCHAR_H_HAS_CONST_OVERLOADS 1
|
|
#elif defined(__GLIBC_PREREQ)
|
|
#if __GLIBC_PREREQ(2, 10)
|
|
#define _LIBCPP_WCHAR_H_HAS_CONST_OVERLOADS 1
|
|
#endif
|
|
#elif defined(_LIBCPP_MSVCRT)
|
|
#if defined(_CRT_CONST_CORRECT_OVERLOADS)
|
|
#define _LIBCPP_WCHAR_H_HAS_CONST_OVERLOADS 1
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(__cplusplus) && !defined(_LIBCPP_WCHAR_H_HAS_CONST_OVERLOADS) && \
|
|
defined(_LIBCPP_PREFERRED_OVERLOAD)
|
|
extern "C++" {
|
|
inline _LIBCPP_INLINE_VISIBILITY wchar_t* __libcpp_wcschr(const wchar_t* __s,
|
|
wchar_t __c) {
|
|
return (wchar_t*)wcschr(__s, __c);
|
|
}
|
|
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD const wchar_t*
|
|
wcschr(const wchar_t* __s, wchar_t __c) {
|
|
return __libcpp_wcschr(__s, __c);
|
|
}
|
|
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD wchar_t*
|
|
wcschr(wchar_t* __s, wchar_t __c) {
|
|
return __libcpp_wcschr(__s, __c);
|
|
}
|
|
|
|
inline _LIBCPP_INLINE_VISIBILITY wchar_t*
|
|
__libcpp_wcspbrk(const wchar_t* __s1, const wchar_t* __s2) {
|
|
return (wchar_t*)wcspbrk(__s1, __s2);
|
|
}
|
|
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD const wchar_t*
|
|
wcspbrk(const wchar_t* __s1, const wchar_t* __s2) {
|
|
return __libcpp_wcspbrk(__s1, __s2);
|
|
}
|
|
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD wchar_t*
|
|
wcspbrk(wchar_t* __s1, const wchar_t* __s2) {
|
|
return __libcpp_wcspbrk(__s1, __s2);
|
|
}
|
|
|
|
inline _LIBCPP_INLINE_VISIBILITY wchar_t* __libcpp_wcsrchr(const wchar_t* __s,
|
|
wchar_t __c) {
|
|
return (wchar_t*)wcsrchr(__s, __c);
|
|
}
|
|
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD const wchar_t*
|
|
wcsrchr(const wchar_t* __s, wchar_t __c) {
|
|
return __libcpp_wcsrchr(__s, __c);
|
|
}
|
|
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD wchar_t*
|
|
wcsrchr(wchar_t* __s, wchar_t __c) {
|
|
return __libcpp_wcsrchr(__s, __c);
|
|
}
|
|
|
|
inline _LIBCPP_INLINE_VISIBILITY wchar_t* __libcpp_wcsstr(const wchar_t* __s1,
|
|
const wchar_t* __s2) {
|
|
return (wchar_t*)wcsstr(__s1, __s2);
|
|
}
|
|
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD const wchar_t*
|
|
wcsstr(const wchar_t* __s1, const wchar_t* __s2) {
|
|
return __libcpp_wcsstr(__s1, __s2);
|
|
}
|
|
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD wchar_t*
|
|
wcsstr(wchar_t* __s1, const wchar_t* __s2) {
|
|
return __libcpp_wcsstr(__s1, __s2);
|
|
}
|
|
|
|
inline _LIBCPP_INLINE_VISIBILITY wchar_t*
|
|
__libcpp_wmemchr(const wchar_t* __s, wchar_t __c, size_t __n) {
|
|
return (wchar_t*)wmemchr(__s, __c, __n);
|
|
}
|
|
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD const wchar_t*
|
|
wmemchr(const wchar_t* __s, wchar_t __c, size_t __n) {
|
|
return __libcpp_wmemchr(__s, __c, __n);
|
|
}
|
|
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD wchar_t*
|
|
wmemchr(wchar_t* __s, wchar_t __c, size_t __n) {
|
|
return __libcpp_wmemchr(__s, __c, __n);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#if defined(__cplusplus) && defined(_LIBCPP_MSVCRT_LIKE)
|
|
extern "C" {
|
|
size_t mbsnrtowcs(wchar_t* __restrict dst, const char** __restrict src,
|
|
size_t nmc, size_t len, mbstate_t* __restrict ps);
|
|
size_t wcsnrtombs(char* __restrict dst, const wchar_t** __restrict src,
|
|
size_t nwc, size_t len, mbstate_t* __restrict ps);
|
|
} // extern "C++"
|
|
#endif // __cplusplus && _LIBCPP_MSVCRT
|
|
|
|
#endif // _LIBCPP_WCHAR_H
|