aboutsummaryrefslogtreecommitdiff
path: root/src/dupname.c
diff options
context:
space:
mode:
authorB. Watson <urchlay@slackware.uk>2025-12-04 16:15:27 -0500
committerB. Watson <urchlay@slackware.uk>2025-12-04 16:15:27 -0500
commitb697d0594268023c24db5855130f8f6af28b250b (patch)
tree16405e14f93b74dd0e5dec07ac346a05bdf8cf06 /src/dupname.c
parentd88ccc4bd4c74c902497541e5be0c685396f5cc8 (diff)
downloadalftools-b697d0594268023c24db5855130f8f6af28b250b.tar.gz
alf and unalf: Detect dup Atari filenames.
Diffstat (limited to 'src/dupname.c')
-rw-r--r--src/dupname.c44
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