? Makefile
? patch-cksfv-1.3.1-broken_sfv_list.diff
? tmpfile
? tmpfile.c
? src/Makefile
? src/cksfv
? src/config.h
? test/emptyfile
? test/tmp.sfv
? test/tmpfile
Index: src/cksfv.c
===================================================================
RCS file: /pub/cvs/uade-cvsroot/cksfv/src/cksfv.c,v
retrieving revision 1.6
diff -u -r1.6 cksfv.c
--- src/cksfv.c	20 Mar 2005 14:17:42 -0000	1.6
+++ src/cksfv.c	11 May 2005 12:30:58 -0000
@@ -41,6 +41,7 @@
   int   rsfvflag = 0;
   char  dir[PATH_MAX + 1] = ".", sfvfile[PATH_MAX + 1];
   int follow = 0;
+  int i;
 
   while ((ch = getopt(argc, argv, "iC:f:qvbrL")) != -1)
     switch (ch) {
@@ -92,5 +93,10 @@
     rval = newsfv(argv);
   }
 
+  if (!TOTALLY_QUIET && recurse && sfv_broken) {
+    fprintf(stderr, "\nList of sfv files with broken files (or broken sfv files):\n");
+    for (i = 0; i < sfv_broken; i++)
+      fprintf(stderr, "%s\n", sfv_broken_list[i]);
+  }
   exit(rval);
 }
Index: src/cksfv.h
===================================================================
RCS file: /pub/cvs/uade-cvsroot/cksfv/src/cksfv.h,v
retrieving revision 1.3
diff -u -r1.3 cksfv.h
--- src/cksfv.h	20 Mar 2005 14:17:42 -0000	1.3
+++ src/cksfv.h	11 May 2005 12:30:58 -0000
@@ -7,6 +7,8 @@
 extern int be_quiet;
 extern int be_caseinsensitive;
 extern int recursive;
+extern char **sfv_broken_list;
+extern int sfv_broken;
 
 int readsfv(char *filename, char *dir, int argc, char **argv);
 int recursivereadsfv(char *dir, int follow, int argc, char **argv);
Index: src/readsfv.c
===================================================================
RCS file: /pub/cvs/uade-cvsroot/cksfv/src/readsfv.c,v
retrieving revision 1.23
diff -u -r1.23 readsfv.c
--- src/readsfv.c	25 Mar 2005 22:54:31 -0000	1.23
+++ src/readsfv.c	11 May 2005 12:30:58 -0000
@@ -43,6 +43,29 @@
 static int find_file(char *filename, char *dir);
 
 
+char **sfv_broken_list = NULL;
+int sfv_broken = 0;
+
+
+/* add broken sfv to the list */
+static void add_broken_entry(char *fn, char *dir)
+{
+  char sfvname[PATH_MAX + 1];
+  char **new_broken;
+
+  sfv_broken++;
+  new_broken = realloc(sfv_broken_list, sfv_broken * sizeof(char **));
+  if (new_broken) {
+    sfv_broken_list = new_broken;
+    snprintf(sfvname, sizeof(sfvname), "%s/%s", dir, fn);
+    sfv_broken_list[sfv_broken - 1] = strdup(sfvname);
+  } else {
+    fprintf(stderr, "cksfv: very annoying... no space for broken list...\n");
+    sfv_broken--;
+  }
+}
+
+
 int readsfv(char *fn, char *dir, int argc, char **argv)
 {
   FILE *fd;
@@ -223,10 +246,15 @@
       fprintf(stderr, "--------------------------------------------------------------------------------\nErrors Occurred\a\n");
     }
   }
+
+  if (rval)
+    add_broken_entry(fn, dir);
+
   return rval;
 
  error:
   fclose(fd);
+  add_broken_entry(fn, dir);
   return 1;
 }
 

