Browse code

add cvd_unpack()

git-svn: trunk@2018

Tomasz Kojm authored on 2006/06/09 19:46:12
Showing 4 changed files
... ...
@@ -1,3 +1,15 @@
1
+Fri Jun  9 12:29:15 CEST 2006 (tk)
2
+----------------------------------
3
+  * shared/misc.c: add cvd_unpack()
4
+
5
+Thu Jun  8 20:00:52 CEST 2006 (tk)
6
+----------------------------------
7
+  * move rmdirs() from clamscan/treewalk.c to shared/misc.c
8
+
9
+Thu Jun  8 19:00:12 CEST 2006 (tk)
10
+----------------------------------
11
+  * libclamav/cvd.c: cleanup
12
+
1 13
 Wed Jun  7 13:29:22 BST 2006 (njh)
2 14
 ----------------------------------
3 15
   * libclamav/mbox.c:	NEW_WORLD: Fast phish detection.
... ...
@@ -38,6 +38,8 @@
38 38
 #include "memory.h"
39 39
 #include "output.h"
40 40
 
41
+#include "../libclamav/cvd.h"
42
+
41 43
 
42 44
 char *freshdbdir(void)
43 45
 {
... ...
@@ -119,7 +121,7 @@ int filecopy(const char *src, const char *dest)
119 119
 	    return -1;
120 120
 	case 0:
121 121
 	    execl("/usr/bin/ditto", "ditto", "--rsrc", src, dest, NULL);
122
-	    perror("execv(ditto)");
122
+	    perror("execl(ditto)");
123 123
 	    break;
124 124
 	default:
125 125
 	    wait(NULL);
... ...
@@ -218,3 +220,22 @@ int isnumb(const char *str)
218 218
 
219 219
     return 1;
220 220
 }
221
+
222
+int cvd_unpack(const char *cvd, const char *destdir)
223
+{
224
+	int fd;
225
+
226
+
227
+    if((fd = open(cvd, O_RDONLY)) == -1)
228
+	return -1;
229
+
230
+    if(lseek(fd, 512, SEEK_SET) == -1) {
231
+	close(fd);
232
+	return -1;
233
+    }
234
+
235
+    if(cli_untgz(fd, destdir) == -1) /* cli_untgz() will close fd */
236
+	return -1;
237
+
238
+    return 0;
239
+}
... ...
@@ -27,5 +27,6 @@ void print_version(void);
27 27
 int filecopy(const char *src, const char *dest);
28 28
 int isnumb(const char *str);
29 29
 int rmdirs(const char *dirname);
30
+int cvd_unpack(const char *cvd, const char *destdir);
30 31
 
31 32
 #endif
... ...
@@ -588,7 +588,6 @@ char *getdsig(const char *host, const char *user, const char *data)
588 588
 
589 589
 int unpack(struct optstruct *opt)
590 590
 {
591
-	int fd;
592 591
 	char *name, *dbdir;
593 592
 
594 593
     if(opt_check(opt, "unpack-current")) {
... ...
@@ -599,24 +598,14 @@ int unpack(struct optstruct *opt)
599 599
     } else
600 600
 	name = strdup(opt_arg(opt, "unpack"));
601 601
 
602
-    if((fd = open(name, O_RDONLY|O_BINARY)) == -1) {
603
-	logg("!Can't open CVD file %s\n", name);
602
+    if(cvd_unpack(name, ".") == -1) {
603
+	logg("!Can't unpack CVD file %s\n", name);
604 604
 	free(name);
605 605
 	opt_free(opt);
606 606
 	exit(1);
607 607
     }
608 608
 
609 609
     free(name);
610
-    lseek(fd, 512, SEEK_SET);
611
-
612
-    if(cli_untgz(fd, ".")) {
613
-	logg("!Can't unpack file.\n");
614
-	close(fd);
615
-	opt_free(opt);
616
-	exit(1);
617
-    }
618
-
619
-    close(fd);
620 610
     opt_free(opt);
621 611
     exit(0);
622 612
 }