char *end;
        int width = options->stat_width;
        int name_width = options->stat_name_width;
+       int argcount = 1;
 
        arg += strlen("--stat");
        end = (char *)arg;
 
        switch (*arg) {
        case '-':
-               if (!prefixcmp(arg, "-width="))
-                       width = strtoul(arg + 7, &end, 10);
-               else if (!prefixcmp(arg, "-name-width="))
-                       name_width = strtoul(arg + 12, &end, 10);
+               if (!prefixcmp(arg, "-width")) {
+                       arg += strlen("-width");
+                       if (*arg == '=')
+                               width = strtoul(arg + 1, &end, 10);
+                       else if (!*arg && !av[1])
+                               die("Option '--stat-width' requires a value");
+                       else if (!*arg) {
+                               width = strtoul(av[1], &end, 10);
+                               argcount = 2;
+                       }
+               } else if (!prefixcmp(arg, "-name-width")) {
+                       arg += strlen("-name-width");
+                       if (*arg == '=')
+                               name_width = strtoul(arg + 1, &end, 10);
+                       else if (!*arg && !av[1])
+                               die("Option '--stat-name-width' requires a value");
+                       else if (!*arg) {
+                               name_width = strtoul(av[1], &end, 10);
+                               argcount = 2;
+                       }
+               }
                break;
        case '=':
                width = strtoul(arg+1, &end, 10);
        options->output_format |= DIFF_FORMAT_DIFFSTAT;
        options->stat_name_width = name_width;
        options->stat_width = width;
-       return 1;
+       return argcount;
 }
 
 int diff_opt_parse(struct diff_options *options, const char **av, int ac)