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