summaryrefslogtreecommitdiff
path: root/misc/cksfv/patches/patch-ac
blob: 3b2c2b27e8ab0519b743d1a19fc1ecf3a8b984e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
$NetBSD: patch-ac,v 1.2 2001/02/28 15:44:16 wiz Exp $

--- src/readsfv.c.orig	Fri Dec 29 01:34:33 2000
+++ src/readsfv.c	Wed Feb 28 15:25:54 2001
@@ -34,11 +34,12 @@
 int find_file(char*, char*);
 
 extern int  quiet;
-int readsfv(char *fn, char *dir, int nocase)
+int readsfv(char *fn, char *dir, int nocase, int argc, char **argv)
 {
   FILE          *fd;
   char          buf[512], *end, filename[512], crc[9], path[256];
   int           file, rval = 0;
+  int		i, check;
   unsigned long len, val, sfvcrc;
   
   if (quiet == 0) {
@@ -63,7 +64,7 @@
     if (buf[0] != ';' && buf[0] != '\n' && buf[0] != '\r') { 
       /* build filename and crc from the sfv file */
       end = strrchr(buf, ' ');
-      if (end == NULL) {
+      if (end == NULL || end-buf > 512-10) {
         fprintf(stderr, "cksfv: %s: incorrect sfv file format\n", fn);
         exit(1);
       }
@@ -71,7 +72,24 @@
       *(end+9) = '\0';
       strncpy(crc, ++end, 9);
       strncpy(filename, buf, 512);
-      sfvcrc = strtoul(crc, '\0', 16);
+      sfvcrc = strtoul(crc, NULL, 16);
+
+      if (argc) {
+        check = 0;
+        for (i=0; i<argc; i++) {
+          if (argv[i] == NULL)
+            continue;
+          if ((nocase == 1 && strcasecmp(argv[i], filename) == 0)
+              || (nocase == 0 && strcmp(argv[i], filename) == 0)) {
+            check = 1;
+            break;
+          }
+        }
+        if (check == 0)
+          continue;
+        else
+          argv[i] = NULL;
+      }
 
       if (quiet == 0)
         fprintf(stderr, "%-49s ", filename);
@@ -120,6 +138,18 @@
   }
   fclose(fd);
 
+  if (argc) {
+    for (i=0; i<argc; i++) {
+      if (argv[i]) {
+        if (quiet == 0)
+          fprintf(stderr, "%-49s not found in sfv\n", argv[i]);
+	else
+	  fprintf(stderr, "cksfv: %s: not found in sfv\n", argv[i]);
+	rval = 1;
+      }
+    }
+  }
+
   if (quiet == 0) {
     if (rval == 0) {
       printf("--------------------------------------------------------------------------------\nEverything OK\a\n");
@@ -166,7 +196,7 @@
       strcpy(filename, dirinfo->d_name);
       
   }
-  rewinddir(dirp);
+  closedir(dirp);
 
   
   return 1;