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