1 - better wide chars usage in the cal command
3 - more(1) doesn't handle UTF-8 correctly. In particular, underlining is broken.
5 --- util-linux-2.13-pre7/include/widechar.h.kzak 2005-08-01 20:18:35.000000000 +0200
6 +++ util-linux-2.13-pre7/include/widechar.h 2006-03-29 19:38:56.000000000 +0200
8 /* This file must be included last because the redefinition of wchar_t may
9 cause conflicts when system include files were included after it. */
11 -#ifdef ENABLE_WIDECHAR
16 --- util-linux-2.13-pre7/misc-utils/cal.c.kzak 2006-03-29 19:40:26.000000000 +0200
17 +++ util-linux-2.13-pre7/misc-utils/cal.c 2006-03-29 19:40:34.000000000 +0200
22 -#ifndef ENABLE_WIDECHAR
23 +#ifndef HAVE_WIDECHAR
24 static char *eos(char *s) {
28 void headers_init(void)
31 -#ifdef ENABLE_WIDECHAR
33 wchar_t day_headings_wc[22],j_day_headings_wc[29];
35 + char *cur_dh = day_headings, *cur_j_dh = j_day_headings;
38 strcpy(day_headings,"");
39 strcpy(j_day_headings,"");
40 -#ifdef ENABLE_WIDECHAR
42 wcscpy(day_headings_wc,L"");
43 wcscpy(j_day_headings_wc,L"");
48 for(i = 0 ; i < 7 ; i++ ) {
50 wd = (i + week1stday) % 7;
51 -#ifdef ENABLE_WIDECHAR
53 - mbstowcs(wd_wc,weekday(wd),10);
54 - if (wcswidth(wd_wc,10) < 3)
55 - wcscat(j_day_headings_wc,L" ");
56 - if (wcswidth(wd_wc,10) < 2) {
57 - wcscat(day_headings_wc, L" ");
58 - wcscat(j_day_headings_wc, L" ");
60 - wcsncat(day_headings_wc,wd_wc,2);
61 - wcsncat(j_day_headings_wc,wd_wc,3);
62 - wcscat(day_headings_wc, L" ");
63 - wcscat(j_day_headings_wc, L" ");
64 + swprintf(day_headings_wc, sizeof(day_headings_wc)/sizeof(day_headings_wc[0]),
65 + L"%1.2s ", weekday(wd));
66 + swprintf(j_day_headings_wc, sizeof(j_day_headings_wc)/sizeof(j_day_headings_wc[0]),
67 + L"%3.3s ", weekday(wd));
68 + space_left = sizeof(day_headings)-(cur_dh-day_headings);
69 + if(space_left <= 0) break;
70 + cur_dh += wcstombs(cur_dh,day_headings_wc, space_left);
71 + space_left = sizeof(j_day_headings)-(cur_j_dh-j_day_headings);
72 + if(space_left <= 0) break;
73 + cur_j_dh += wcstombs(cur_j_dh,j_day_headings_wc, space_left);
75 sprintf(eos(day_headings), "%2.2s ", weekday(wd));
76 sprintf(eos(j_day_headings), "%3.3s ", weekday(wd));
80 -#ifdef ENABLE_WIDECHAR
81 - wcstombs(day_headings,day_headings_wc,sizeof(day_headings));
82 - wcstombs(j_day_headings,j_day_headings_wc,sizeof(j_day_headings));
85 trim_trailing_spaces(day_headings);
86 trim_trailing_spaces(j_day_headings);
90 center_str(const char* src, char* dest, size_t dest_size, int width)
92 -#ifdef ENABLE_WIDECHAR
94 wchar_t str_wc[FMT_ST_CHARS];
96 char str[FMT_ST_CHARS];
101 -#ifdef ENABLE_WIDECHAR
102 +#ifdef HAVE_WIDECHAR
103 if (mbstowcs(str_wc, src, FMT_ST_CHARS) > 0) {
104 wide_char_enabled = 1;
105 len = wcswidth(str_wc, SIZE(str_wc));
109 if (wide_char_enabled) {
110 -#ifdef ENABLE_WIDECHAR
111 +#ifdef HAVE_WIDECHAR
113 wcstombs(str, str_wc, SIZE(str));
115 --- util-linux-2.13-pre7/text-utils/column.c.kzak 2006-03-29 19:41:20.000000000 +0200
116 +++ util-linux-2.13-pre7/text-utils/column.c 2006-03-29 19:41:25.000000000 +0200
119 #include "widechar.h"
121 -#ifdef ENABLE_WIDECHAR
122 +#ifdef HAVE_WIDECHAR
123 #define wcs_width(s) wcswidth(s,wcslen(s))
124 static wchar_t *mbs_to_wcs(const char *);
130 -#ifdef ENABLE_WIDECHAR
131 +#ifdef HAVE_WIDECHAR
132 static wchar_t *mbs_to_wcs(const char *s)
139 -#ifndef ENABLE_WIDECHAR
140 +#ifndef HAVE_WIDECHAR
141 static char *mtsafe_strtok(char *str, const char *delim, char **ptr)
144 --- util-linux-2.13-pre7/text-utils/pg.c.kzak 2006-03-29 19:41:52.000000000 +0200
145 +++ util-linux-2.13-pre7/text-utils/pg.c 2006-03-29 19:41:59.000000000 +0200
150 -#ifdef ENABLE_WIDECHAR
151 +#ifdef HAVE_WIDECHAR
153 * A mbstowcs()-alike function that transparently handles invalid sequences.
159 -#ifdef ENABLE_WIDECHAR
160 +#ifdef HAVE_WIDECHAR
162 * Return the last character that will fit on the line at col columns
163 * in case MB_CUR_MAX > 1.
168 -#ifdef ENABLE_WIDECHAR
169 +#ifdef HAVE_WIDECHAR
171 return endline_for_mb(col, s);
174 cmd.count = getcount(cmd.cmdline);
177 -#ifdef ENABLE_WIDECHAR
178 +#ifdef HAVE_WIDECHAR
180 * Remove backspace formatting, for searches
181 * in case MB_CUR_MAX > 1.
186 -#ifdef ENABLE_WIDECHAR
187 +#ifdef HAVE_WIDECHAR
189 return colb_for_mb(s);
195 -#ifdef ENABLE_WIDECHAR
196 +#ifdef HAVE_WIDECHAR
198 * Convert nonprintable characters to spaces
199 * in case MB_CUR_MAX > 1.
202 makeprint(char *s, size_t l)
204 -#ifdef ENABLE_WIDECHAR
205 +#ifdef HAVE_WIDECHAR
207 return makeprint_for_mb(s, l);
209 --- util-linux-2.13-pre7/text-utils/more.c.kzak 2006-03-29 19:41:01.000000000 +0200
210 +++ util-linux-2.13-pre7/text-utils/more.c 2006-03-29 19:41:08.000000000 +0200
215 -#ifdef ENABLE_WIDECHAR
216 +#ifdef HAVE_WIDECHAR
223 while (p < &Line[LINSIZ - 1]) {
224 -#ifdef ENABLE_WIDECHAR
225 +#ifdef HAVE_WIDECHAR
226 if (fold_opt && use_mbc_buffer_flag && MB_CUR_MAX > 1) {
227 use_mbc_buffer_flag = 0;
233 -#ifdef ENABLE_WIDECHAR
234 +#ifdef HAVE_WIDECHAR
235 if (fold_opt && MB_CUR_MAX > 1) {
236 memset (mbc, '\0', MB_LEN_MAX);
238 @@ -1054,7 +1054,23 @@
239 my_putstring(state ? ULenter : ULexit);
241 if (c != ' ' || pstate == 0 || state != 0 || ulglitch == 0)
242 +#ifdef HAVE_WIDECHAR
247 + memset (&state, '\0', sizeof (mbstate_t));
249 + mblength = mbrtowc (&wc, s, n, &state);
250 + if (mblength == (size_t) -2 || mblength == (size_t) -1)
259 if (state && *chUL) {
262 @@ -1867,7 +1867,7 @@
264 else if (((cc_t) c == otty.c_cc[VERASE]) && !slash) {
266 -#ifdef ENABLE_WIDECHAR
267 +#ifdef HAVE_WIDECHAR
271 --- util-linux-2.13-pre7/text-utils/ul.c.kzak 2006-03-29 19:42:09.000000000 +0200
272 +++ util-linux-2.13-pre7/text-utils/ul.c 2006-03-29 19:42:25.000000000 +0200
275 #include "widechar.h"
277 -#ifdef ENABLE_WIDECHAR
278 +#ifdef HAVE_WIDECHAR
279 static int put1wc(int c) /* Output an ASCII character as a wide character */
281 if (putwchar(c) == WEOF)