Changeset 240b2e4 in mainline for common/stdc/wchar.c


Ignore:
Timestamp:
2025-04-13T19:05:55Z (3 months ago)
Author:
GitHub <noreply@…>
Children:
c7c6afd
Parents:
62e3411 (diff), 28c39f3 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
git-author:
Wayne Thornton <wmthornton-dev@…> (2025-04-13 19:05:55)
git-committer:
GitHub <noreply@…> (2025-04-13 19:05:55)
Message:

Merge branch 'HelenOS:master' into master

File:
1 moved

Legend:

Unmodified
Added
Removed
  • common/stdc/wchar.c

    r62e3411 r240b2e4  
    11/*
    2  * Copyright (c) 2017 CZ.NIC, z.s.p.o.
     2 * Copyright (c) 2025 Jiří Zárevúcky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /*
    30  * Authors:
    31  *      Jiří Zárevúcky (jzr) <zarevucky.jiri@gmail.com>
    32  */
     29#include <uchar.h>
     30#include <wchar.h>
    3331
    34 /** @addtogroup libc
    35  * @{
    36  */
    37 /** @file
    38  */
    39 
    40 #ifndef _LIBC_WCHAR_H_
    41 #define _LIBC_WCHAR_H_
    42 
    43 #include <_bits/size_t.h>
    44 #include <_bits/wchar_t.h>
    45 #include <_bits/wchar_limits.h>
    46 #include <_bits/wint_t.h>
    47 #include <_bits/NULL.h>
    48 #include <_bits/WEOF.h>
    49 
     32#if __STDC_HOSTED__
     33#include <fibril.h>
    5034#endif
    5135
    52 /** @}
    53  */
     36wint_t btowc(int c)
     37{
     38        return (c < 0x80) ? c : WEOF;
     39}
     40
     41int wctob(wint_t c)
     42{
     43        return c;
     44}
     45
     46int mbsinit(const mbstate_t *ps)
     47{
     48        return ps == NULL || ps->continuation == 0;
     49}
     50
     51size_t mbrlen(const char *s, size_t n, mbstate_t *ps)
     52{
     53#if __STDC_HOSTED__
     54        static fibril_local mbstate_t global_state;
     55        if (!ps)
     56                ps = &global_state;
     57#endif
     58
     59        return mbrtowc(NULL, s, n, ps);
     60}
     61
     62_Static_assert(sizeof(wchar_t) == sizeof(char16_t) || sizeof(wchar_t) == sizeof(char32_t));
     63
     64size_t mbrtowc(wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
     65{
     66#if __STDC_HOSTED__
     67        static fibril_local mbstate_t global_state;
     68        if (!ps)
     69                ps = &global_state;
     70#endif
     71
     72        if (sizeof(wchar_t) == sizeof(char16_t))
     73                return mbrtoc16((char16_t *) pwc, s, n, ps);
     74        else
     75                return mbrtoc32((char32_t *) pwc, s, n, ps);
     76}
     77
     78size_t wcrtomb(char *s, wchar_t wc, mbstate_t * ps)
     79{
     80#if __STDC_HOSTED__
     81        static fibril_local mbstate_t global_state;
     82        if (!ps)
     83                ps = &global_state;
     84#endif
     85
     86        if (sizeof(wchar_t) == sizeof(char16_t))
     87                return c16rtomb(s, (char16_t) wc, ps);
     88        else
     89                return c32rtomb(s, (char32_t) wc, ps);
     90}
Note: See TracChangeset for help on using the changeset viewer.