]> pd.if.org Git - zpackage/blob - lib/foreach_path.c
561e24f089b1674e88de4991b2a8e1ddd919f213
[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_pkgid 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
34         sql = sqlite3_str_value(s);
35         if (!sql) {
36                 sqlite3_str_finish(s);
37                 zpm->error = 1;
38                 return 0;
39         }
40
41         zpm_exec(zpm, sql, callback, data, errmsg);
42         sqlite3_str_finish(s);
43         if (*errmsg) {
44                 fprintf(stderr, "errmsg: %s\n", *errmsg);
45                 zpm->error = 2;
46                 return 0;
47         }
48
49         return 1;
50 }
51
52 int zpm_foreach_package(struct zpm *zpm, char *where,
53 int (*callback)(void *cbdata, int ncols, char **vals, char **cols),
54 void *data, char **errmsg) {
55         char *sql;
56         sqlite3_str *s;
57
58         if (!zpm || zpm->error || !callback) return 0;
59
60         s = sqlite3_str_new(zpm->db);
61         sqlite3_str_appendall(s, "select * from packages_pkgid");
62
63         if (where) {
64                 sqlite3_str_appendf(s, " where %s", where);
65         }
66
67         sql = sqlite3_str_value(s);
68         if (!sql) {
69                 sqlite3_str_finish(s);
70                 zpm->error = 1;
71                 return 0;
72         }
73
74         zpm_exec(zpm, sql, callback, data, errmsg);
75         sqlite3_str_finish(s);
76         if (*errmsg) {
77                 fprintf(stderr, "errmsg: %s\n", *errmsg);
78                 zpm->error = 2;
79                 return 0;
80         }
81
82         return 1;
83 }