Home | History | Annotate | Line # | Download | only in libhack
multibyte.c revision 1.6
      1 /*      $NetBSD: multibyte.c,v 1.6 2014/11/15 17:49:19 christos Exp $      */
      2 
      3 /*
      4  * Ignore all multibyte sequences, removes all the citrus code.
      5  * Probably only used by vfprintf() when parsing the format string.
      6  * And possibly from libcurses if compiled with HAVE_WCHAR.
      7  */
      8 
      9 #include <stdlib.h>
     10 #include <wchar.h>
     11 
     12 size_t
     13 mbrtowc(wchar_t *wc, const char *str, size_t max_sz, mbstate_t *ps)
     14 {
     15 	wchar_t c;
     16 
     17 	if (str == NULL)
     18 		return 0;
     19 
     20 	if (wc != NULL)
     21 		*wc = (unsigned char)*str;
     22 
     23 	return *str == '\0' ? 0 : 1;
     24 }
     25 
     26 size_t
     27 mbrtowc_l(wchar_t *wc, const char *str, size_t max_sz, mbstate_t *ps, locale_t loc)
     28 {
     29 	return mbrtowc(wc, str, max_sz, ps);
     30 }
     31 
     32 size_t
     33 wcrtomb(char *str, wchar_t wc, mbstate_t *ps)
     34 {
     35     *str = wc & 0xFF;
     36     return 1;
     37 }
     38 
     39 
     40 size_t
     41 wcrtomb_l(char *str, wchar_t wc, mbstate_t *ps, locale_t loc)
     42 {
     43 	return wcrtomb(str, wc, ps);
     44 }
     45 
     46 int
     47 wctob(wint_t x)
     48 {
     49 	return x;
     50 }
     51 
     52 int
     53 wctob_l(wint_t x, locale_t loc)
     54 {
     55 	return x;
     56 }
     57 
     58 wint_t
     59 btowc(int x)
     60 {
     61 	return x;
     62 }
     63 
     64 wint_t
     65 btowc_l(int x, locale_t loc)
     66 {
     67 	return x;
     68 }
     69 
     70 size_t
     71 mbrlen(const char * __restrict p, size_t l, mbstate_t * __restrict v)
     72 {
     73 	size_t i;
     74 	for (i = 0; i < l; i++)
     75 		if (p[i] == '\0')
     76 			return i;
     77 	return l;
     78 }
     79 
     80 
     81 size_t
     82 mbrlen_l(const char * __restrict p, size_t l, mbstate_t * __restrict v,
     83     locale_t loc)
     84 {
     85 	return mbrlen(p, l, v);
     86 }
     87 
     88 int
     89 mbsinit(const mbstate_t *s)
     90 {
     91 	return 0;
     92 }
     93 
     94 size_t
     95 mbsrtowcs(wchar_t * __restrict pwcs, const char ** __restrict s, size_t n,
     96     mbstate_t * __restrict ps)
     97 {
     98 	const char *p;
     99 	wchar_t *d;
    100 	size_t count;
    101 
    102 	for (p = *s, d = pwcs, count = 0;
    103 		count <= n;
    104 		count++, d++, p++)
    105 	{
    106 		if (mbrtowc(d, p, 1, ps) == 0)
    107 			break;
    108 	}
    109 	return count;
    110 }
    111 
    112 
    113 size_t
    114 mbsrtowcs_l(wchar_t * __restrict pwcs, const char ** __restrict s, size_t n,
    115     mbstate_t * __restrict ps, locale_t loc)
    116 {
    117 	return mbsrtowcs(pwcs, s, n, ps);
    118 }
    119 
    120 size_t
    121 wcsrtombs(char * __restrict s, const wchar_t ** __restrict pwcs, size_t n,
    122     mbstate_t * __restrict ps)
    123 {
    124 	char *d;
    125 	const wchar_t *p;
    126 	size_t count;
    127 
    128 	for (p = *pwcs, d = s, count = 0;
    129 		count <= n && *p != 0;
    130 		count++, d++, p++)
    131 	{
    132 		wcrtomb(d, *p, ps);
    133 	}
    134 	*d = 0;
    135 	return count;
    136 }
    137 
    138 size_t
    139 wcsrtombs_l(char * __restrict s, const wchar_t ** __restrict pwcs, size_t n,
    140     mbstate_t * __restrict ps, locale_t loc)
    141 {
    142 	return wcsrtombs(s, pwcs, n, ps);
    143 }
    144 
    145 size_t
    146 _mb_cur_max_l(locale_t loc)
    147 {
    148 	return MB_CUR_MAX;
    149 }
    150