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