X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=lib%2Fforeach_path.c;h=ec6e07ed77866dd9984d5dc0180e806b1b19810b;hb=43308b3c6fba1bcb7f4b10e67736cd981ed23540;hp=271ee8c260fed17c96c0f213b962af069353b03b;hpb=7513a528f61259a92473284fd96313adb7a41f49;p=zpackage diff --git a/lib/foreach_path.c b/lib/foreach_path.c index 271ee8c..ec6e07e 100644 --- a/lib/foreach_path.c +++ b/lib/foreach_path.c @@ -9,25 +9,71 @@ #include "sqlite3.h" #include "zpm.h" -int zpm_foreach_path(struct zpm *zpm, char *pkgid, +int zpm_foreach_path(struct zpm *zpm, char *pkgid, char *where, int (*callback)(void *f, int ncols, char **vals, char **cols), void *data, char **errmsg) { + char *sql; + sqlite3_str *s; - char *files = "select * from packagefiles where" - " printf('%%s-%%s-%%s', package, version, release) = %Q" - " order by path" - ; + if (!zpm || zpm->error || !callback) return 0; - char *sql; + s = sqlite3_str_new(zpm->db); + sqlite3_str_appendall(s, "select * from packagefiles_status where "); + + if (where) { + sqlite3_str_appendf(s, "%s", where); + } else { + sqlite3_str_appendall(s, "true"); + } - sql = sqlite3_mprintf(files, pkgid); + if (pkgid) { + sqlite3_str_appendf(s, " and printf('%%s-%%s-%%s', package, version, release) = %Q", pkgid); + } + + sql = sqlite3_str_value(s); if (!sql) { + sqlite3_str_finish(s); + zpm->error = 1; return 0; + } + + zpm_exec(zpm, sql, callback, data, errmsg); + sqlite3_str_finish(s); + if (*errmsg) { + fprintf(stderr, "errmsg: %s\n", *errmsg); + zpm->error = 2; + return 0; + } + + return 1; +} + +int zpm_foreach_package(struct zpm *zpm, char *where, +int (*callback)(void *cbdata, int ncols, char **vals, char **cols), +void *data, char **errmsg) { + char *sql; + sqlite3_str *s; + + if (!zpm || zpm->error || !callback) return 0; + + s = sqlite3_str_new(zpm->db); + sqlite3_str_appendall(s, "select * from packages_pkgid"); + + if (where) { + sqlite3_str_appendf(s, " where %s", where); + } + + sql = sqlite3_str_value(s); + if (!sql) { + sqlite3_str_finish(s); zpm->error = 1; + return 0; } zpm_exec(zpm, sql, callback, data, errmsg); - if (errmsg) { + sqlite3_str_finish(s); + if (*errmsg) { + fprintf(stderr, "errmsg: %s\n", *errmsg); zpm->error = 2; return 0; }