commit c709b7ea3ba34551fc68a0fb15e23aec6af8dbde from: Marcel Rodrigues via: GitHub date: Mon Sep 24 23:33:53 2018 UTC Merge pull request #35 from ikji/master Correctly handle CJK/double width characters. commit - 76462671d2b581f08bd34b0bd2540bd5a0c93213 commit + c709b7ea3ba34551fc68a0fb15e23aec6af8dbde blob - 7b92438f24fee47936331cffeabc689ef06844c6 blob + eca6aebc7cbb18cacda010b7d6ee4799b3212035 --- rover.c +++ rover.c @@ -497,16 +497,17 @@ update_view() } else { char *suffix, *suffixes = "BKMGTPEZY"; off_t human_size = ESIZE(j) * 10; - int length = mbstowcs(NULL, ENAME(j), 0); + int length = mbstowcs(WBUF, ENAME(j), PATH_MAX); + int namecols = wcswidth(WBUF, length); for (suffix = suffixes; human_size >= 10240; suffix++) human_size = (human_size + 512) / 1024; if (*suffix == 'B') - swprintf(WBUF, PATH_MAX, L"%s%*d %c", ENAME(j), - (int) (COLS - length - 6), + swprintf(WBUF + length, PATH_MAX - length, L"%*d %c", + (int) (COLS - namecols - 6), (int) human_size / 10, *suffix); else - swprintf(WBUF, PATH_MAX, L"%s%*d.%d %c", ENAME(j), - (int) (COLS - length - 8), + swprintf(WBUF + length, PATH_MAX - length, L"%*d.%d %c", + (int) (COLS - namecols - 8), (int) human_size / 10, (int) human_size % 10, *suffix); } mvwhline(rover.window, i + 1, 1, ' ', COLS - 2);