]> pd.if.org Git - zpackage/blob - lib/foreach_path.c
cleanup foreach-path
[zpackage] / lib / foreach_path.c
1 #define _POSIX_C_SOURCE 2
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <sys/types.h>
5 #include <sys/wait.h>
6
7 #include <string.h>
8
9 #include "sqlite3.h"
10 #include "zpm.h"
11
12 int zpm_foreach_path(struct zpm *zpm, char *pkgid, char *where,
13 int (*callback)(void *f, int ncols, char **vals, char **cols),
14 void *data, char **errmsg) {
15         char *sql;
16         sqlite3_str *s;
17
18         if (!zpm || zpm->error || !callback) return 0;
19
20         s = sqlite3_str_new(zpm->db);
21         sqlite3_str_appendall(s, "select * from packagefiles_status where ");
22
23         if (where) {
24                 sqlite3_str_appendf(s, "%s", where);
25         } else {
26                 sqlite3_str_appendall(s, "true");
27         }
28
29         if (pkgid) {
30                 sqlite3_str_appendf(s, " and printf('%%s-%%s-%%s', package, version, release) = %Q", pkgid);
31         }
32
33         sql = sqlite3_str_value(s);
34         if (!sql) {
35                 sqlite3_str_finish(s);
36                 zpm->error = 1;
37                 return 0;
38         }
39
40         zpm_exec(zpm, sql, callback, data, errmsg);
41         sqlite3_str_finish(s);
42         if (*errmsg) {
43                 fprintf(stderr, "errmsg: %s\n", *errmsg);
44                 zpm->error = 2;
45                 return 0;
46         }
47
48         return 1;
49 }
50
51 int zpm_foreach_package(struct zpm *zpm, char *where,
52 int (*callback)(void *cbdata, int ncols, char **vals, char **cols),
53 void *data, char **errmsg) {
54         char *sql;
55         sqlite3_str *s;
56
57         if (!zpm || zpm->error || !callback) return 0;
58
59         s = sqlite3_str_new(zpm->db);
60         sqlite3_str_appendall(s, "select * from packages_pkgid");
61
62         if (where) {
63                 sqlite3_str_appendf(s, " where %s", where);
64         }
65
66         sql = sqlite3_str_value(s);
67         if (!sql) {
68                 sqlite3_str_finish(s);
69                 zpm->error = 1;
70                 return 0;
71         }
72
73         zpm_exec(zpm, sql, callback, data, errmsg);
74         sqlite3_str_finish(s);
75         if (*errmsg) {
76                 fprintf(stderr, "errmsg: %s\n", *errmsg);
77                 zpm->error = 2;
78                 return 0;
79         }
80
81         return 1;
82 }