From: Jonathan Nieder Date: Thu, 19 Dec 2013 19:43:19 +0000 (-0800) Subject: wt-status: extract the code to compute width for labels X-Git-Tag: v1.9.2~19^2~2 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/335e8250124aea055cbe4fb8a2268fa9e2f34439?ds=inline;hp=--cc wt-status: extract the code to compute width for labels Signed-off-by: Junio C Hamano --- 335e8250124aea055cbe4fb8a2268fa9e2f34439 diff --git a/wt-status.c b/wt-status.c index 9cf70287d9..db98c52d45 100644 --- a/wt-status.c +++ b/wt-status.c @@ -292,6 +292,19 @@ static const char *wt_status_diff_status_string(int status) } } +static int maxwidth(const char *(*label)(int), int minval, int maxval) +{ + int result = 0, i; + + for (i = minval; i <= maxval; i++) { + const char *s = label(i); + int len = s ? utf8_strwidth(s) : 0; + if (len > result) + result = len; + } + return result; +} + static void wt_status_print_change_data(struct wt_status *s, int change_type, struct string_list_item *it) @@ -310,13 +323,8 @@ static void wt_status_print_change_data(struct wt_status *s, int len; if (!padding) { - /* If DIFF_STATUS_* uses outside this range, we're in trouble */ - for (status = 'A'; status <= 'Z'; status++) { - what = wt_status_diff_status_string(status); - len = what ? strlen(what) : 0; - if (len > label_width) - label_width = len; - } + /* If DIFF_STATUS_* uses outside the range [A..Z], we're in trouble */ + label_width = maxwidth(wt_status_diff_status_string, 'A', 'Z'); label_width += strlen(" "); padding = xmallocz(label_width); memset(padding, ' ', label_width);