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