+ zpm->error = 0;
+
+ appid = zpm_db_pragma(zpm, 1);
+ dbver = zpm_db_pragma(zpm, 2);
+
+ if (appid != 0x5a504442) {
+ fprintf(stderr, "unknown database type\n");
+ zpm->error = 1;
+ return 0;
+ }
+
+ if (dbver > 1) {
+ fprintf(stderr, "version %d zpm db detected, this program only works with version 1 databases\n", dbver);
+ zpm->error = 1;
+ return 0;
+ }
+
+ sqlite3_exec(zpm->db, "pragma foreign_keys = ON;", NULL, NULL, &errstr);
+
+ if (errstr) {
+ free(zpm->errmsg);
+ zpm->errmsg = strdup(errstr);
+ fprintf(stderr, "sqlite foreign key error: %s\n", errstr);
+ sqlite3_free(errstr);
+ zpm->error = 1;
+ return 0;
+ }
+
+ /* TODO add vercmp */
+
+ return 1;
+}
+
+struct zpm *zpm_clearmem(struct zpm *zpm) {
+ if (!zpm) {
+ zpm = malloc(sizeof *zpm);
+ }
+
+ if (zpm) {
+ *zpm = (struct zpm){0};
+ }
+
+ return zpm;
+}
+
+int zpm_init(struct zpm *pkg, char *path) {
+ int rc;
+ sqlite3 *db = 0;
+ int appid;
+
+ zpm_clearmem(pkg);