aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorB. Watson <urchlay@slackware.uk>2025-12-12 17:15:22 -0500
committerB. Watson <urchlay@slackware.uk>2025-12-12 17:15:22 -0500
commitc0bc883bcfca5791ea64d488caf359a2c8de4360 (patch)
treebc72765712fd1616b68f3e72654df9ee2a289714 /src
parent1fa2b732b7b6c1539995fa40605d9bcf807ac357 (diff)
downloadalftools-c0bc883bcfca5791ea64d488caf359a2c8de4360.tar.gz
Do not print unprintable characters in filenames.
Diffstat (limited to 'src')
-rw-r--r--src/alf.c10
-rw-r--r--src/extract.c11
-rw-r--r--src/listalf.c11
-rw-r--r--src/sanity.c11
-rw-r--r--src/sanity.h1
5 files changed, 32 insertions, 12 deletions
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);