treat any file with NUL as binary
[gitweb.git] / builtin-for-each-ref.c
index da8c7948e63609aeeae20cde87b519933a5a4207..f36a43c26459bd386618e551e2e93743cd8030aa 100644 (file)
@@ -13,8 +13,8 @@
 #define QUOTE_NONE 0
 #define QUOTE_SHELL 1
 #define QUOTE_PERL 2
-#define QUOTE_PYTHON 3
-#define QUOTE_TCL 4
+#define QUOTE_PYTHON 4
+#define QUOTE_TCL 8
 
 typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME } cmp_type;
 
@@ -304,7 +304,7 @@ static const char *find_wholine(const char *who, int wholen, const char *buf, un
                if (!eol)
                        return "";
                eol++;
-               if (eol[1] == '\n')
+               if (*eol == '\n')
                        return ""; /* end of header */
                buf = eol;
        }
@@ -833,21 +833,24 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
        int i, num_refs;
        const char *format = "%(objectname) %(objecttype)\t%(refname)";
        struct ref_sort *sort = NULL, **sort_tail = &sort;
-       int maxcount = 0, quote_style;
-       int quote_shell = 0, quote_perl = 0, quote_python = 0, quote_tcl = 0;
+       int maxcount = 0, quote_style = 0;
        struct refinfo **refs;
        struct grab_ref_cbdata cbdata;
 
        struct option opts[] = {
-               OPT_BOOLEAN('s', "shell", &quote_shell, "quote placeholders suitably for shells"),
-               OPT_BOOLEAN('p', "perl",  &quote_perl, "quote placeholders suitably for perl"),
-               OPT_BOOLEAN( 0 , "python", &quote_python, "quote placeholders suitably for python"),
-               OPT_BOOLEAN( 0 , "tcl",  &quote_tcl, "quote placeholders suitably for tcl"),
+               OPT_BIT('s', "shell", &quote_style,
+                       "quote placeholders suitably for shells", QUOTE_SHELL),
+               OPT_BIT('p', "perl",  &quote_style,
+                       "quote placeholders suitably for perl", QUOTE_PERL),
+               OPT_BIT(0 , "python", &quote_style,
+                       "quote placeholders suitably for python", QUOTE_PYTHON),
+               OPT_BIT(0 , "tcl",  &quote_style,
+                       "quote placeholders suitably for tcl", QUOTE_TCL),
 
                OPT_GROUP(""),
                OPT_INTEGER( 0 , "count", &maxcount, "show only <n> matched refs"),
                OPT_STRING(  0 , "format", &format, "format", "format to use for the output"),
-               OPT_CALLBACK(0 , "sort", &sort_tail, "key",
+               OPT_CALLBACK(0 , "sort", sort_tail, "key",
                            "field name to sort on", &opt_parse_sort),
                OPT_END(),
        };
@@ -857,15 +860,13 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
                error("invalid --count argument: `%d'", maxcount);
                usage_with_options(for_each_ref_usage, opts);
        }
-       if (quote_shell + quote_perl + quote_python + quote_tcl > 1) {
-               error("more than one quoting style ?");
+       if (HAS_MULTI_BITS(quote_style)) {
+               error("more than one quoting style?");
                usage_with_options(for_each_ref_usage, opts);
        }
        if (verify_format(format))
                usage_with_options(for_each_ref_usage, opts);
 
-       quote_style = QUOTE_SHELL * quote_shell + QUOTE_PERL * quote_perl +
-               QUOTE_PYTHON * quote_python + QUOTE_TCL * quote_tcl;
        if (!sort)
                sort = default_sort();
        sort_atom_limit = used_atom_cnt;