#define _POSIX_C_SOURCE 2 #include #include #include #include #include #include "sqlite3.h" #include "zpm.h" 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; if (!zpm || zpm->error || !callback) return 0; 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); } 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; }