=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/screen-write.c,v retrieving revision 1.75 retrieving revision 1.76 diff -c -r1.75 -r1.76 *** src/usr.bin/tmux/screen-write.c 2015/11/12 11:09:11 1.75 --- src/usr.bin/tmux/screen-write.c 2015/11/12 22:04:37 1.76 *************** *** 1,4 **** ! /* $OpenBSD: screen-write.c,v 1.75 2015/11/12 11:09:11 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: screen-write.c,v 1.76 2015/11/12 22:04:37 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 112,118 **** { va_list ap; char *msg; ! struct utf8_data utf8data; u_char *ptr; size_t left, size = 0; --- 112,118 ---- { va_list ap; char *msg; ! struct utf8_data ud; u_char *ptr; size_t left, size = 0; *************** *** 122,138 **** ptr = msg; while (*ptr != '\0') { ! if (*ptr > 0x7f && utf8_open(&utf8data, *ptr)) { ptr++; left = strlen(ptr); ! if (left < utf8data.size - 1) break; ! while (utf8_append(&utf8data, *ptr)) ptr++; ptr++; ! size += utf8data.width; } else { if (*ptr > 0x1f && *ptr < 0x7f) size++; --- 122,138 ---- ptr = msg; while (*ptr != '\0') { ! if (*ptr > 0x7f && utf8_open(&ud, *ptr)) { ptr++; left = strlen(ptr); ! if (left < ud.size - 1) break; ! while (utf8_append(&ud, *ptr)) ptr++; ptr++; ! size += ud.width; } else { if (*ptr > 0x1f && *ptr < 0x7f) size++; *************** *** 173,179 **** struct grid_cell *gc, const char *fmt, va_list ap) { char *msg; ! struct utf8_data utf8data; u_char *ptr; size_t left, size = 0; --- 173,179 ---- struct grid_cell *gc, const char *fmt, va_list ap) { char *msg; ! struct utf8_data ud; u_char *ptr; size_t left, size = 0; *************** *** 181,207 **** ptr = msg; while (*ptr != '\0') { ! if (*ptr > 0x7f && utf8_open(&utf8data, *ptr)) { ptr++; left = strlen(ptr); ! if (left < utf8data.size - 1) break; ! while (utf8_append(&utf8data, *ptr)) ptr++; ptr++; if (maxlen > 0 && ! size + utf8data.width > (size_t) maxlen) { while (size < (size_t) maxlen) { screen_write_putc(ctx, gc, ' '); size++; } break; } ! size += utf8data.width; ! grid_cell_set(gc, &utf8data); screen_write_cell(ctx, gc); } else { if (maxlen > 0 && size + 1 > (size_t) maxlen) --- 181,207 ---- ptr = msg; while (*ptr != '\0') { ! if (*ptr > 0x7f && utf8_open(&ud, *ptr)) { ptr++; left = strlen(ptr); ! if (left < ud.size - 1) break; ! while (utf8_append(&ud, *ptr)) ptr++; ptr++; if (maxlen > 0 && ! size + ud.width > (size_t) maxlen) { while (size < (size_t) maxlen) { screen_write_putc(ctx, gc, ' '); size++; } break; } ! size += ud.width; ! grid_cell_set(gc, &ud); screen_write_cell(ctx, gc); } else { if (maxlen > 0 && size + 1 > (size_t) maxlen) *************** *** 226,232 **** struct grid_cell *gc, const char *fmt, ...) { struct grid_cell lgc; ! struct utf8_data utf8data; va_list ap; char *msg; u_char *ptr, *last; --- 226,232 ---- struct grid_cell *gc, const char *fmt, ...) { struct grid_cell lgc; ! struct utf8_data ud; va_list ap; char *msg; u_char *ptr, *last; *************** *** 254,280 **** continue; } ! if (*ptr > 0x7f && utf8_open(&utf8data, *ptr)) { ptr++; left = strlen(ptr); ! if (left < utf8data.size - 1) break; ! while (utf8_append(&utf8data, *ptr)) ptr++; ptr++; if (maxlen > 0 && ! size + utf8data.width > (size_t) maxlen) { while (size < (size_t) maxlen) { screen_write_putc(ctx, gc, ' '); size++; } break; } ! size += utf8data.width; ! grid_cell_set(&lgc, &utf8data); screen_write_cell(ctx, &lgc); } else { if (maxlen > 0 && size + 1 > (size_t) maxlen) --- 254,280 ---- continue; } ! if (*ptr > 0x7f && utf8_open(&ud, *ptr)) { ptr++; left = strlen(ptr); ! if (left < ud.size - 1) break; ! while (utf8_append(&ud, *ptr)) ptr++; ptr++; if (maxlen > 0 && ! size + ud.width > (size_t) maxlen) { while (size < (size_t) maxlen) { screen_write_putc(ctx, gc, ' '); size++; } break; } ! size += ud.width; ! grid_cell_set(&lgc, &ud); screen_write_cell(ctx, &lgc); } else { if (maxlen > 0 && size + 1 > (size_t) maxlen)