X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=lib%2Fforeach_path.c;h=4afc122e1d4370861a3bde8cbf34bd2c5036640c;hb=fc0e2fbaf7051e42be1a6449a5a004fb3e665d45;hp=b73739b4887f3d9db6fc6b026ecc82ea1b058264;hpb=cc00928022a5739378371d23c4b7f64e71797ade;p=zpackage diff --git a/lib/foreach_path.c b/lib/foreach_path.c index b73739b..4afc122 100644 --- a/lib/foreach_path.c +++ b/lib/foreach_path.c @@ -9,31 +9,42 @@ #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_pkgid where "); + + if (where) { + sqlite3_str_appendf(s, "%s", where); + } else { + sqlite3_str_appendall(s, "true"); + } + + if (pkgid) { + sqlite3_str_appendf(s, " and printf('%%s-%%s-%%s', package, version, release) = %Q", pkgid); + } - if (!zpm || zpm->error || !pkgid || !callback) return 0; - sql = sqlite3_mprintf(files, pkgid); + sql = sqlite3_str_value(s); if (!sql) { - return 0; + 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; } - sqlite3_free(sql); return 1; }