packio

view src/archive.c @ 1:a5728bc6a02f

moving along
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 09 Jan 2015 02:31:29 +0200
parents
children
line source
1 #include <stdio.h>
2 #include <string.h>
3 #include <errno.h>
4 #include "archive.h"
5 #include "logger.h"
7 static struct archive_module *modlist;
9 int pkio_reg_archive_module(struct archive_module *m)
10 {
11 m->next = modlist;
12 modlist = m;
13 return 0;
14 }
16 struct archive *pkio_load_archive(const char *fname)
17 {
18 FILE *fp;
19 struct archive *ar;
21 if(!modlist) {
22 pkio_logmsg("failed to load archive, no archive modules found\n");
23 return 0;
24 }
26 if(!(fp = fopen(fname, "rb"))) {
27 pkio_logmsg("failed to load archive: %s: %s\n", fname, strerror(errno));
28 return 0;
29 }
31 if(!(ar = pkio_load_archive_file(fp))) {
32 pkio_logmsg("failed to load archive: %s\n", fname);
33 fclose(fp);
34 return 0;
35 }
36 return ar;
37 }
39 struct archive *pkio_load_archive_file(FILE *fp)
40 {
41 struct archive *ar;
42 struct archive_module *mod;
44 if(!modlist) {
45 pkio_logmsg("failed to load archive, no archive modules found\n");
46 return 0;
47 }
49 /* try all the archive modules in turn */
50 mod = modlist;
51 while(mod) {
52 if((ar = mod->load_archive(fp, mod->data))) {
53 ar->module = mod;
54 return ar;
55 }
56 mod = mod->next;
57 }
59 return 0;
60 }