From 9dcf3393d1ee93a26ceeccc8a62ffde8e736a51f Mon Sep 17 00:00:00 2001 From: Nathan Wagner Date: Fri, 14 Sep 2018 04:43:31 +0000 Subject: [PATCH] add structs for packages and other objects --- lib/zpm.c | 70 ++++++++++++++++++++++++++++--------------------------- zpm.h | 66 ++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 93 insertions(+), 43 deletions(-) diff --git a/lib/zpm.c b/lib/zpm.c index 5bcf9da..3abbc37 100644 --- a/lib/zpm.c +++ b/lib/zpm.c @@ -293,10 +293,7 @@ int zpm_open(struct zpm *pkg, char *path) { pkg->db = 0; pkg->path = 0; - pkg->version = 0; - pkg->release = 0; - pkg->pkgname = 0; - pkg->installed = 0; + pkg->current_package = 0; rc = sqlite3_open_v2(path, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL); if (rc) { @@ -371,24 +368,29 @@ int zpm_addvercmp(struct zpm *pkg) { } /* set package struct variables, database, environment, then command line */ -int zpm_readopts(struct zpm *pkg, int ac, char **av) { +int zpm_readopts(struct zpm *zpm, int ac, char **av) { char *ev; + struct zpm_package *pkg; - if (!pkg) { + if (!zpm) { return -1; } - ev = getenv("ZPMPACKAGE"); - if (ev) { - pkg->pkgname = dupstr(ev); - } - ev = getenv("ZPMPKGREL"); - if (ev) { - pkg->release = strtol(ev, 0, 0); - } - ev = getenv("ZPMPKGVER"); - if (ev) { - pkg->version = dupstr(ev); + pkg = zpm->current_package; + + if (pkg) { + ev = getenv("ZPMPACKAGE"); + if (ev) { + pkg->name = dupstr(ev); + } + ev = getenv("ZPMPKGREL"); + if (ev) { + pkg->release = strtol(ev, 0, 0); + } + ev = getenv("ZPMPKGVER"); + if (ev) { + pkg->version = dupstr(ev); + } } /* now, parse the options, return optind so the caller can adjust if needed */ @@ -632,7 +634,7 @@ static int set_elf_info(sqlite3 *db, char *hash, char *content, size_t length) { } #if 1 -int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) { +int zpm_import(struct zpm *zpm, char *path, uint32_t flags, char *hash) { int fd; void *content; struct stat sbuf; @@ -647,7 +649,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) { size_t outlen = 0; void *outbuf; - if (!pkg || !pkg->db || !path) { + if (!zpm || !zpm->db || !path) { return 0; } @@ -662,12 +664,12 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) { /* mmap the file */ fd = open(path, O_RDONLY); if (fd == -1) { - pkg->error = errno; + zpm->error = errno; fprintf(stderr, "%s can't open %s: %s\n", __FUNCTION__, path,strerror(errno)); return 0; } if (fstat(fd, &sbuf) == -1) { - pkg->error = errno; + zpm->error = errno; fprintf(stderr, "%s can't fstat %s: %s\n", __FUNCTION__, path,strerror(errno)); return 0; } @@ -685,14 +687,14 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) { } /* TODO this is ok, just stored differently */ fprintf(stderr, "%s can't import %s file: %s\n", __FUNCTION__, ftype, path); - pkg->error = EINVAL; + zpm->error = EINVAL; return 0; } content = mmap(0, sbuf.st_size, PROT_READ,MAP_PRIVATE, fd, 0); close(fd); if (!content) { - pkg->error = errno; + zpm->error = errno; fprintf(stderr, "%s can't mmap %s: %s\n", __FUNCTION__, path,strerror(errno)); return 0; } @@ -708,7 +710,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) { //fprintf(stderr, "file %s: %s\n", path, hash); /* TODO check null */ - sqlite3 *db = pkg->db; + sqlite3 *db = zpm->db; /* prepare and bind */ @@ -729,7 +731,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) { if (rc != SQLITE_ROW) { /* didn't find a row */ SQLERROR(sqlite3_errmsg(db)); - zpm_rollback(pkg); + zpm_rollback(zpm); munmap(content, sbuf.st_size); return 0; } @@ -769,7 +771,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) { /* start a transaction */ // do that outside of here - //zpm_begin(pkg); + //zpm_begin(zpm); /* insert */ if (haverow) { @@ -782,7 +784,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) { if (rc != SQLITE_OK) { SQLERROR(sqlite3_errmsg(db)); fprintf(stderr, "cant prepare data\n"); - zpm_rollback(pkg); + zpm_rollback(zpm); munmap(content, sbuf.st_size); return 0; } @@ -791,7 +793,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) { if (rc != SQLITE_OK) { SQLERROR(sqlite3_errmsg(db)); fprintf(stderr, "cant bind size\n"); - zpm_rollback(pkg); + zpm_rollback(zpm); munmap(content, sbuf.st_size); return 0; } @@ -799,7 +801,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) { if (rc != SQLITE_OK) { SQLERROR(sqlite3_errmsg(db)); fprintf(stderr, "cant bind content\n"); - zpm_rollback(pkg); + zpm_rollback(zpm); munmap(content, sbuf.st_size); return 0; } @@ -807,7 +809,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) { if (rc != SQLITE_OK) { SQLERROR(sqlite3_errmsg(db)); fprintf(stderr, "cant bind hash\n"); - zpm_rollback(pkg); + zpm_rollback(zpm); munmap(content, sbuf.st_size); return 0; } @@ -815,20 +817,20 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) { if (rc != SQLITE_DONE) { SQLERROR(sqlite3_errmsg(db)); sqlite3_finalize(ifile); - zpm_rollback(pkg); + zpm_rollback(zpm); munmap(content, sbuf.st_size); return 0; } sqlite3_finalize(ifile); /* commit */ - //zpm_commit(pkg); + //zpm_commit(zpm); /* don't need the original file now */ } - if (!set_elf_info(pkg->db, hash, content, sbuf.st_size)) { + if (!set_elf_info(zpm->db, hash, content, sbuf.st_size)) { fprintf(stderr, "setting elf info failed\n"); munmap(content, sbuf.st_size); return 0; @@ -837,7 +839,7 @@ int zpm_import(struct zpm *pkg, char *path, uint32_t flags, char *hash) { munmap(content, sbuf.st_size); /* if package and not nopackage flag, add to package */ - if (pkg->pkgname && (!ZPM_NOPACKAGE)) { + if (zpm->current_package->name && (!ZPM_NOPACKAGE)) { /* TODO */ } diff --git a/zpm.h b/zpm.h index 4a213c8..43d394c 100644 --- a/zpm.h +++ b/zpm.h @@ -2,29 +2,77 @@ #define ZPM_H_ 1 #include +#include #include +#include + #include +#define ZPM_HASH_STRLEN 64 + +#ifdef PATH_MAX +#define ZPM_PATH_MAX PATH_MAX +#else +#define ZPM_PATH_MAX 256 +#endif + +#define ZPM_PACKAGE_NAME_MAX 191 +#define ZPM_PACKAGE_VERSION_MAX 58 +#define ZPM_PACKAGE_RELEASE_MAX 4 +#define ZPM_PACKAGE_ID_MAX 255 + +#define ZPM_TAG_MAX 15 + +struct zpm_package; + struct zpm { sqlite3 *db; - char *path; /* path to package file */ + char *path; /* path to db file */ + int error; + struct zpm_package *current_package; +}; + +struct zpm_dependency { + char minpkg[ZPM_PACKAGE_ID_MAX+1]; + char maxpkg[ZPM_PACKAGE_ID_MAX+1]; + struct zpm_dependency *next; +}; + +struct zpm_tag { + char tag[ZPM_TAG_MAX+1]; + struct zpm_tag *next; +}; + +struct zpm_package { + struct zpm *zpm; + char *name; char *version; int release; - char *pkgname; - int error; /* internal error number */ - time_t installed; /* install time, 0 for not installed */ + char *id; + char *tags; + char *description; + char *architecture; + char *url; + char *status; + char *licenses; + char *package; + time_t build_time; + time_t install_time; + char checksum[ZPM_HASH_STRLEN+1]; }; struct zpm_file { - char *path; + char path[ZPM_PATH_MAX]; int mode; - char *tags; - char *owner; - char *group; + char tags[64]; + char owner[32]; + char group[32]; time_t mtime; + char hash[ZPM_HASH_STRLEN+1]; struct zpm_file *next; /* so you can make a linked list */ }; + /* NULL? Create? */ int zpm_open(struct zpm *pkg, char *path); int zpm_pkgname(char *base, char *version, int release); /* construct a package file name */ @@ -92,7 +140,7 @@ int zpm_checkinstall(struct zpm *local); int zpm_merge(struct zpm *z, struct zpm *src, uint32_t flags); -#if 0 +#if 1 void uncompresslzma(void *buf, size_t bufsize, FILE *out); void *compresslzma(void *buf, size_t bufsize, size_t *len); #endif -- 2.40.0