scripts: add -N option to mkhash for printing without newline

Added "-N" option, it allow printing hash(es) without newline.

Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
This commit is contained in:
INAGAKI Hiroshi 2020-12-17 23:44:28 +09:00 committed by Petr Štetiar
parent 4771fac99f
commit fdcdbdfdef
1 changed files with 13 additions and 7 deletions

View File

@ -747,6 +747,7 @@ static int usage(const char *progname)
fprintf(stderr, "Usage: %s <hash type> [options] [<file>...]\n" fprintf(stderr, "Usage: %s <hash type> [options] [<file>...]\n"
"Options:\n" "Options:\n"
" -n Print filename(s)\n" " -n Print filename(s)\n"
" -N Suppress trailing newline\n"
"\n" "\n"
"Supported hash types:", progname); "Supported hash types:", progname);
@ -771,7 +772,8 @@ static struct hash_type *get_hash_type(const char *name)
} }
static int hash_file(struct hash_type *t, const char *filename, bool add_filename) static int hash_file(struct hash_type *t, const char *filename, bool add_filename,
bool no_newline)
{ {
const char *str; const char *str;
@ -801,9 +803,10 @@ static int hash_file(struct hash_type *t, const char *filename, bool add_filenam
} }
if (add_filename) if (add_filename)
printf("%s %s\n", str, filename ? filename : "-"); printf("%s %s%s", str, filename ? filename : "-",
no_newline ? "" : "\n");
else else
printf("%s\n", str); printf("%s%s", str, no_newline ? "" : "\n");
return 0; return 0;
} }
@ -813,13 +816,16 @@ int main(int argc, char **argv)
struct hash_type *t; struct hash_type *t;
const char *progname = argv[0]; const char *progname = argv[0];
int i, ch; int i, ch;
bool add_filename = false; bool add_filename = false, no_newline = false;
while ((ch = getopt(argc, argv, "n")) != -1) { while ((ch = getopt(argc, argv, "nN")) != -1) {
switch (ch) { switch (ch) {
case 'n': case 'n':
add_filename = true; add_filename = true;
break; break;
case 'N':
no_newline = true;
break;
default: default:
return usage(progname); return usage(progname);
} }
@ -836,10 +842,10 @@ int main(int argc, char **argv)
return usage(progname); return usage(progname);
if (argc < 2) if (argc < 2)
return hash_file(t, NULL, add_filename); return hash_file(t, NULL, add_filename, no_newline);
for (i = 0; i < argc - 1; i++) { for (i = 0; i < argc - 1; i++) {
int ret = hash_file(t, argv[1 + i], add_filename); int ret = hash_file(t, argv[1 + i], add_filename, no_newline);
if (ret) if (ret)
return ret; return ret;
} }