OSDN Git Service

wt-status: extract the code to compute width for labels
authorJonathan Nieder <jrnieder@gmail.com>
Thu, 19 Dec 2013 19:43:19 +0000 (11:43 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 12 Mar 2014 21:08:05 +0000 (14:08 -0700)
Signed-off-by: Junio C Hamano <gitster@pobox.com>
wt-status.c

index 9cf7028..db98c52 100644 (file)
@@ -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);