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