Home | History | Annotate | Line # | Download | only in libhack
multibyte.c revision 1.2
      1 /*      $NetBSD: multibyte.c,v 1.2 2007/05/29 17:46:44 he 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  */
      7 
      8 #include <wchar.h>
      9 
     10 size_t
     11 mbrtowc(wchar_t *wc, const char *str, size_t max_sz, mbstate_t *ps)
     12 {
     13 	return (*wc = *str) == 0 ? 0 : 1;
     14 }
     15 
     16 size_t
     17 wcrtomb(char *str, wchar_t wc, mbstate_t *ps)
     18 {
     19     *str = wc;
     20     return 1;
     21 }
     22 
     23 int
     24 wctob(wint_t x)
     25 {
     26 	return x;
     27 }
     28 
     29 wint_t
     30 btowc(int x) {
     31 	return x;
     32 }
     33 
     34 size_t
     35 mbrlen(const char * __restrict p, size_t l, mbstate_t * __restrict v)
     36 {
     37 	size_t i;
     38 	for (i = 0; i < l; i++)
     39 		if (p[i] == '\0')
     40 			return i;
     41 	return l;
     42 }
     43 
     44 int
     45 mbsinit(const mbstate_t *s)
     46 {
     47 	return 0;
     48 }
     49 
     50 size_t
     51 mbsrtowcs(wchar_t * __restrict pwcs, const char ** __restrict s, size_t n,
     52     mbstate_t * __restrict ps)
     53 {
     54 	const char *p;
     55 	wchar_t *d;
     56 	size_t count;
     57 
     58 	for (p = *s, d = pwcs, count = 0;
     59 		count <= n;
     60 		count++, d++, p++)
     61 	{
     62 		if (mbrtowc(d, p, 1, ps) == 0)
     63 			break;
     64 	}
     65 	return count;
     66 }
     67 
     68 size_t
     69 wcsrtombs(char * __restrict s, const wchar_t ** __restrict pwcs, size_t n,
     70     mbstate_t * __restrict ps)
     71 {
     72 	char *d;
     73 	const wchar_t *p;
     74 	size_t count;
     75 
     76 	for (p = *pwcs, d = s, count = 0;
     77 		count <= n && *p != 0;
     78 		count++, d++, p++)
     79 	{
     80 		wcrtomb(d, *p, ps);
     81 	}
     82 	*d = 0;
     83 	return count;
     84 }
     85