From c0bc883bcfca5791ea64d488caf359a2c8de4360 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Fri, 12 Dec 2025 17:15:22 -0500 Subject: Do not print unprintable characters in filenames. --- src/alf.c | 10 ++++++---- src/extract.c | 11 ++++++++--- src/listalf.c | 11 ++++++++--- src/sanity.c | 11 +++++++++-- src/sanity.h | 1 + 5 files changed, 32 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/alf.c b/src/alf.c index 8eadccd..f0911b7 100644 --- a/src/alf.c +++ b/src/alf.c @@ -223,13 +223,15 @@ void crunch_file(const char *filename_arg) { create_header(); if(!opt_quiet) { + fputs("Crunching ", stdout); if(opt_verbose) { - printf("Crunching %s as %s", in_filename, hdr_filename); - } else { - printf("Crunching %s", hdr_filename); + safe_print_filename(in_filename, stdout); + fputs(" as ", stdout); } - fflush(stdout); + safe_print_filename(hdr_filename, stdout); + if(!opt_verbose) putchar('\n'); + fflush(stdout); } /* crunches the entire input to memory! */ diff --git a/src/extract.c b/src/extract.c index 9b864c3..a604805 100644 --- a/src/extract.c +++ b/src/extract.c @@ -112,8 +112,11 @@ void write_split_file(void) { strncpy(splitname, out_filename, 13); strncat(splitname, ".ALF", 6); - if(!opts.quiet) - printf("Writing %s\n", splitname); + if(!opts.quiet) { + fputs("Writing ", stdout); + safe_print_filename(splitname, stdout); + putchar('\n'); + } len = getquad(alf_hdr_compsize0); @@ -167,7 +170,9 @@ void extract_alf(void) { } if(!opts.quiet) { - printf("%s %s\n", opts.testonly ? "Testing" : "Uncrunching", out_filename); + printf("%s ", opts.testonly ? "Testing" : "Uncrunching"); + safe_print_filename(out_filename, stdout); + putchar('\n'); } if(opts.extract_to_stdout) { diff --git a/src/listalf.c b/src/listalf.c index 054fe36..3458bf9 100644 --- a/src/listalf.c +++ b/src/listalf.c @@ -76,6 +76,7 @@ void list_alf(void) { unsigned int c = 0, orig_size, comp_size, total_osize = 0, total_csize = 0; char buf[100]; extern char *out_filename; + int fnlen; while(read_alf_header()) { c++; @@ -98,7 +99,9 @@ void list_alf(void) { total_csize += comp_size; if(opts.verbose_list) { - printf("%-12s ", out_filename); + fnlen = safe_print_filename(out_filename, stdout); + while(fnlen++ < 14) + putchar(' '); printf("%8d ", orig_size); printf("%8d ", comp_size); printf("%3d%% ", comp_percent(orig_size, comp_size)); @@ -109,8 +112,10 @@ void list_alf(void) { printf(" %04x", getword(alf_hdr_cksum_l)); putchar('\n'); } else { - if(file_wanted(out_filename)) - printf("%s\n", out_filename); + if(file_wanted(out_filename)) { + safe_print_filename(out_filename, stdout); + putchar('\n'); + } } if(fseek(in_file, comp_size, SEEK_CUR) != 0) { diff --git a/src/sanity.c b/src/sanity.c index c542aec..dbcf57a 100644 --- a/src/sanity.c +++ b/src/sanity.c @@ -5,7 +5,7 @@ extern const char *self; -void bad_atari_filename(const char *fname, const char *msg) { +int safe_print_filename(const char *fname, FILE *fh) { char fn[50] = ""; char xbuf[5]; int i; @@ -21,7 +21,14 @@ void bad_atari_filename(const char *fname, const char *msg) { } } - fprintf(stderr, "%s: warning: bad Atari filename \"%s\": %s\n", self, fn, msg); + fputs(fn, fh); + return strlen(fn); +} + +void bad_atari_filename(const char *fname, const char *msg) { + fprintf(stderr, "%s: warning: bad Atari filename \"", self); + safe_print_filename(fname, stderr); + fprintf(stderr, "\": %s\n", msg); } /* note to self: it's tempting to use isalpha(), isprint(), etc diff --git a/src/sanity.h b/src/sanity.h index b1f3821..30a1ed9 100644 --- a/src/sanity.h +++ b/src/sanity.h @@ -1,2 +1,3 @@ void bad_atari_filename(const char *msg); void sanity_check_filename(const char *fname); +int safe_print_filename(const char *fname, FILE *fh); -- cgit v1.2.3