| // Copyright Microsoft and CHERIoT Contributors. |
| // SPDX-License-Identifier: MIT |
| |
| #pragma once |
| /** |
| * Minimal wchar.h This exists because libc++ doesn't support platforms that |
| * don't have it. We don't expect anything to actually use the template |
| * instantiations that would require anything in this file but the identifiers |
| * must exist. |
| */ |
| #include <string.h> |
| |
| /** |
| * libc++ headers require wchar.h to exist with a definition of an mbstate_t |
| * structure. We don't use this with anything, so this is just a stub. |
| */ |
| struct mbstate_t |
| { |
| }; |
| |
| /** |
| * `string_view` requires `wmemcpy` to exist. Forward to `memcpy`. |
| */ |
| static inline wchar_t *wmemcpy(wchar_t *s1, const wchar_t *s2, size_t n) |
| { |
| return (wchar_t *)memcpy(s1, s2, n / sizeof(wchar_t)); |
| } |
| |
| /** |
| * `string_view` requires `wmemmove` to exist. Forward to `memmove`. |
| */ |
| static inline wchar_t *wmemmove(wchar_t *s1, const wchar_t *s2, size_t n) |
| { |
| return (wchar_t *)memmove(s1, s2, n / sizeof(wchar_t)); |
| } |
| |
| /** |
| * `string_view` requires `wmemset` to exist. Provide a trivial |
| * implementation. |
| */ |
| static inline wchar_t *wmemset(wchar_t *dest, wchar_t ch, size_t count) |
| { |
| for (size_t i = 0; i < count; i++) |
| { |
| dest[i] = ch; |
| } |
| return dest; |
| } |