diff options
| author | B. Watson <urchlay@slackware.uk> | 2025-12-04 16:15:27 -0500 |
|---|---|---|
| committer | B. Watson <urchlay@slackware.uk> | 2025-12-04 16:15:27 -0500 |
| commit | b697d0594268023c24db5855130f8f6af28b250b (patch) | |
| tree | 16405e14f93b74dd0e5dec07ac346a05bdf8cf06 /src/dupname.c | |
| parent | d88ccc4bd4c74c902497541e5be0c685396f5cc8 (diff) | |
| download | alftools-b697d0594268023c24db5855130f8f6af28b250b.tar.gz | |
alf and unalf: Detect dup Atari filenames.
Diffstat (limited to 'src/dupname.c')
| -rw-r--r-- | src/dupname.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/dupname.c b/src/dupname.c new file mode 100644 index 0000000..532e14c --- /dev/null +++ b/src/dupname.c @@ -0,0 +1,44 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> + +/* only check this many filenames */ +#define MAX_FNAMES 1024 + +/* FILENAME.EXT\0 = 13 */ +#define FNAME_LEN 13 + +// #define DUPNAME_DEBUG + +static char filenames[MAX_FNAMES][FNAME_LEN]; +static int fncount; + +/* linear search, slow, but only happens once at startup */ +int is_dup_filename(const char *newname) { + int i; + + for(i = 0; i < fncount; i++) + if(strncmp(newname, filenames[i], FNAME_LEN - 1) == 0) + return 1; + + strncpy(filenames[fncount++], newname, FNAME_LEN - 1); + + return 0; +} + +#ifdef DUPNAME_DEBUG +int main(int argc, char **argv) { + int i; + + while(++argv, --argc) + printf("%s: %d\n", *argv, is_dup_filename(*argv)); + + printf("filenames[]\n"); + + for(i = 0; i < fncount; i++) + printf(" %s\n", filenames[i]); + + return 0; +} +#endif |
