[Midnightbsd-cvs] src: lib/libmport: Improvements to the sub.package schema.
ctriv at midnightbsd.org
ctriv at midnightbsd.org
Thu Sep 27 23:01:31 EDT 2007
Log Message:
-----------
Improvements to the sub.package schema.
Cleanup now always runs.
Fixed error handing in db_create.c
Modified Files:
--------------
src/lib/libmport:
create_pkg.c (r1.5 -> r1.6)
db_schema.c (r1.2 -> r1.3)
error.c (r1.3 -> r1.4)
mport.h (r1.3 -> r1.4)
plist.c (r1.2 -> r1.3)
util.c (r1.5 -> r1.6)
-------------- next part --------------
Index: plist.c
===================================================================
RCS file: /home/cvs/src/lib/libmport/plist.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -Llib/libmport/plist.c -Llib/libmport/plist.c -u -r1.2 -r1.3
--- lib/libmport/plist.c
+++ lib/libmport/plist.c
@@ -143,7 +143,7 @@
return MPORT_OK;
}
-
+
static mportPlistEntryType parse_command(const char *s)
{
Index: util.c
===================================================================
RCS file: /home/cvs/src/lib/libmport/util.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -Llib/libmport/util.c -Llib/libmport/util.c -u -r1.5 -r1.6
--- lib/libmport/util.c
+++ lib/libmport/util.c
@@ -41,7 +41,9 @@
/* Package meta-data creation and destruction */
mportPackageMeta* mport_new_packagemeta()
{
- return (mportPackageMeta *)malloc(sizeof(mportPackageMeta));
+ /* we use calloc so any pointers that aren't set are NULL.
+ (calloc zero's out the memory region. */
+ return (mportPackageMeta *)calloc(1, sizeof(mportPackageMeta));
}
void mport_free_packagemeta(mportPackageMeta *pack)
@@ -60,7 +62,6 @@
free(pack->pkginstall);
free(pack->pkgdeinstall);
free(pack->pkgmessage);
- free(pack->req_script);
free(pack);
}
@@ -70,54 +71,22 @@
*/
int mport_rmtree(const char *filename)
{
- char *cmnd;
- int ret;
-
- asprintf(&cmnd, "/bin/rm -r %s", filename);
+ return mport_xsystem("/bin/rm -r %s", filename);
+}
+
- if ((ret = system(cmnd)) != 0) {
- RETURN_ERROR(MPORT_ERR_SYSCALL_FAILED, strerror(errno));
- }
-
- free(cmnd);
- return MPORT_OK;
-}
/*
- *Copy fromname to toname
+ * Copy fromname to toname
*
- * XXX: This is needs some work. perms?
*/
int mport_copy_file(const char *fromname, const char *toname)
{
- int to;
- int from;
- int len;
- char buf[8192];
-
-
- if ((from = open(fromname, O_RDONLY)) == -1) {
- RETURN_ERROR(MPORT_ERR_SYSCALL_FAILED, strerror(errno));
- }
-
- if ((to = open(toname, O_WRONLY | O_CREAT)) == -1) {
- RETURN_ERROR(MPORT_ERR_SYSCALL_FAILED, strerror(errno));
- }
-
- len = read(from, buf, sizeof(buf));
-
- while (len > 0) {
- write(to, buf, len);
- len = read(from, buf, sizeof(buf));
- }
-
- close(from);
- close(to);
-
- return MPORT_OK;
+ return mport_xsystem("/bin/cp %s %s", fromname, toname);
}
+
/*
* Quick test to see if a file exists.
*/
@@ -129,6 +98,33 @@
}
+/* mport_xsystem(char *fmt, ...)
+ *
+ * Our own version on system that takes a format string and a list
+ * of values. The fmt works exactly like the stdio output formats.
+ */
+int mport_xsystem(const char *fmt, ...)
+{
+ va_list args;
+ char *cmnd;
+ int ret;
+
+ va_start(args, fmt);
+ if (vasprintf(&cmnd, fmt, args) == -1) {
+ /* XXX How will the caller know this is no mem, and not a failed exec? */
+ return MPORT_ERR_NO_MEM;
+ }
+
+ ret = system(cmnd);
+
+ free(cmnd);
+ va_end(args);
+
+ return ret;
+}
+
+
+
/*
* mport_parselist(input, string_array_pointer)
Index: mport.h
===================================================================
RCS file: /home/cvs/src/lib/libmport/mport.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -Llib/libmport/mport.h -Llib/libmport/mport.h -u -r1.3 -r1.4
--- lib/libmport/mport.h
+++ lib/libmport/mport.h
@@ -86,7 +86,6 @@
char *pkginstall;
char *pkgdeinstall;
char *pkgmessage;
- char *req_script;
} mportPackageMeta;
mportPackageMeta * mport_new_packagemeta(void);
@@ -98,8 +97,8 @@
#include <sqlite3.h>
/* schema */
-void mport_generate_plist_schema(sqlite3 *);
-void mport_generate_package_schema(sqlite3 *);
+int mport_generate_plist_schema(sqlite3 *);
+int mport_generate_stub_schema(sqlite3 *);
/* Errors */
@@ -119,12 +118,14 @@
#define MPORT_ERR_ARCHIVE 7
#define RETURN_ERROR(code, msg) return mport_set_errx((code), "Error at %s:(%d): %s", __FILE__, __LINE__, (msg))
+#define SET_ERROR(code,msg) mport_set_errx((code), "Error at %s:(%d): %s", __FILE__, __LINE__, (msg))
/* Utils */
int mport_copy_file(const char *, const char *);
int mport_rmtree(const char *);
int mport_file_exists(const char *);
+int mport_xsystem(const char *, ...);
void mport_parselist(char *, char ***);
#endif
Index: error.c
===================================================================
RCS file: /home/cvs/src/lib/libmport/error.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -Llib/libmport/error.c -Llib/libmport/error.c -u -r1.3 -r1.4
--- lib/libmport/error.c
+++ lib/libmport/error.c
@@ -94,5 +94,7 @@
free(err);
+ va_end(args);
+
return ret;
}
Index: create_pkg.c
===================================================================
RCS file: /home/cvs/src/lib/libmport/create_pkg.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -Llib/libmport/create_pkg.c -Llib/libmport/create_pkg.c -u -r1.5 -r1.6
--- lib/libmport/create_pkg.c
+++ lib/libmport/create_pkg.c
@@ -64,37 +64,41 @@
char dirtmpl[] = "/tmp/mport.XXXXXXXX";
char *tmpdir = mkdtemp(dirtmpl);
- int ret = 0;
+ int ret;
sqlite3 *db;
- if (tmpdir == NULL)
- RETURN_ERROR(MPORT_ERR_FILEIO, strerror(errno));
-
- if (chdir(tmpdir) != 0)
- RETURN_ERROR(MPORT_ERR_FILEIO, strerror(errno));
+ if (tmpdir == NULL) {
+ SET_ERROR(MPORT_ERR_FILEIO, strerror(errno));
+ goto CLEANUP;
+ }
+ if (chdir(tmpdir) != 0) {
+ SET_ERROR(MPORT_ERR_FILEIO, strerror(errno));
+ goto CLEANUP;
+ }
if ((ret = create_package_db(&db)) != MPORT_OK)
- return ret;
+ goto CLEANUP;
if ((ret = create_plist(db, plist, pack)) != MPORT_OK)
- return ret;
+ goto CLEANUP;
if ((ret = create_meta(db, pack)) != MPORT_OK)
- return ret;
+ goto CLEANUP;
- if (sqlite3_close(db) != SQLITE_OK)
- RETURN_ERROR(MPORT_ERR_SQLITE, sqlite3_errmsg(db));
+ if (sqlite3_close(db) != SQLITE_OK) {
+ SET_ERROR(MPORT_ERR_SQLITE, sqlite3_errmsg(db));
+ goto CLEANUP;
+ }
if ((ret = copy_metafiles(pack)) != MPORT_OK)
- return ret;
+ goto CLEANUP;
if ((ret = archive_files(plist, pack)) != MPORT_OK)
- return ret;
-
- if ((ret = clean_up(tmpdir)) != MPORT_OK)
- return ret;
+ goto CLEANUP;
- return MPORT_OK;
+ CLEANUP:
+ clean_up(tmpdir);
+ return ret;
}
@@ -106,9 +110,7 @@
}
/* create tables */
- mport_generate_package_schema(*db);
-
- return MPORT_OK;
+ return mport_generate_stub_schema(*db);
}
static int create_plist(sqlite3 *db, mportPlist *plist, mportPackageMeta *pack)
@@ -121,7 +123,7 @@
char md5[33];
char file[FILENAME_MAX];
char cwd[FILENAME_MAX];
-
+
strlcpy(cwd, pack->sourcedir, FILENAME_MAX);
strlcat(cwd, pack->prefix, FILENAME_MAX);
@@ -132,8 +134,11 @@
STAILQ_FOREACH(e, plist, next) {
if (e->type == PLIST_CWD) {
strlcpy(cwd, pack->sourcedir, FILENAME_MAX);
- if (e->data != NULL)
+ if (e->data == NULL) {
+ strlcat(cwd, pack->prefix, FILENAME_MAX);
+ } else {
strlcat(cwd, e->data, FILENAME_MAX);
+ }
}
if (sqlite3_bind_text(stmnt, 1, pack->name, -1, SQLITE_STATIC) != SQLITE_OK) {
@@ -182,29 +187,31 @@
struct timespec now;
int ret;
- char sql[] = "INSERT INTO package (pkg, version, lang, date) VALUES (?,?,?,?)";
+ char sql[] = "INSERT INTO package (pkg, version, origin, lang, prefix, date) VALUES (?,?,?,?,?,?)";
if (sqlite3_prepare_v2(db, sql, -1, &stmnt, &rest) != SQLITE_OK) {
RETURN_ERROR(MPORT_ERR_SQLITE, sqlite3_errmsg(db));
}
-
if (sqlite3_bind_text(stmnt, 1, pack->name, -1, SQLITE_STATIC) != SQLITE_OK) {
RETURN_ERROR(MPORT_ERR_SQLITE, sqlite3_errmsg(db));
}
-
if (sqlite3_bind_text(stmnt, 2, pack->version, -1, SQLITE_STATIC) != SQLITE_OK) {
RETURN_ERROR(MPORT_ERR_SQLITE, sqlite3_errmsg(db));
}
-
- if (sqlite3_bind_text(stmnt, 3, pack->lang, -1, SQLITE_STATIC) != SQLITE_OK) {
+ if (sqlite3_bind_text(stmnt, 3, pack->origin, -1, SQLITE_STATIC) != SQLITE_OK) {
+ RETURN_ERROR(MPORT_ERR_SQLITE, sqlite3_errmsg(db));
+ }
+ if (sqlite3_bind_text(stmnt, 4, pack->lang, -1, SQLITE_STATIC) != SQLITE_OK) {
+ RETURN_ERROR(MPORT_ERR_SQLITE, sqlite3_errmsg(db));
+ }
+ if (sqlite3_bind_text(stmnt, 5, pack->prefix, -1, SQLITE_STATIC) != SQLITE_OK) {
RETURN_ERROR(MPORT_ERR_SQLITE, sqlite3_errmsg(db));
}
-
if (clock_gettime(CLOCK_REALTIME, &now) != 0) {
RETURN_ERROR(MPORT_ERR_SYSCALL_FAILED, strerror(errno));
}
- if (sqlite3_bind_int(stmnt, 4, now.tv_sec) != SQLITE_OK) {
+ if (sqlite3_bind_int(stmnt, 6, now.tv_sec) != SQLITE_OK) {
RETURN_ERROR(MPORT_ERR_SQLITE, sqlite3_errmsg(db));
}
Index: db_schema.c
===================================================================
RCS file: /home/cvs/src/lib/libmport/db_schema.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -Llib/libmport/db_schema.c -Llib/libmport/db_schema.c -u -r1.2 -r1.3
--- lib/libmport/db_schema.c
+++ lib/libmport/db_schema.c
@@ -34,21 +34,27 @@
__MBSDID("$MidnightBSD$");
-static void run_sql(sqlite3 *db, const char *sql);
+static int run_sql(sqlite3 *db, const char *sql);
-void mport_generate_package_schema(sqlite3 *db)
+int mport_generate_stub_schema(sqlite3 *db)
{
- run_sql(db, "CREATE TABLE assets (pkg text not NULL, type int NOT NULL, data text, checksum text)");
- run_sql(db, "CREATE TABLE package (pkg text NOT NULL, version text NOT NULL, lang text, options text, date int NOT NULL)");
- run_sql(db, "CREATE TABLE conflicts (pkg text NOT NULL, conflict_pkg text NOT NULL, conflict_version text NOT NULL)");
- run_sql(db, "CREATE TABLE depends (pkg text NOT NULL, depend_pkgname text NOT NULL, depend_pkgversion text NOT NULL, depend_port text NOT NULL)");
+ if (run_sql(db, "CREATE TABLE assets (pkg text not NULL, type int NOT NULL, data text, checksum text)") != SQLITE_OK)
+ RETURN_ERROR(MPORT_ERR_SQLITE, sqlite3_errmsg(db));
+ if (run_sql(db, "CREATE TABLE package (pkg text NOT NULL, version text NOT NULL, origin text NOT NULL, lang text, options text, date int NOT NULL, prefix text NOT NULL)") != SQLITE_OK)
+ RETURN_ERROR(MPORT_ERR_SQLITE, sqlite3_errmsg(db));
+ if (run_sql(db, "CREATE TABLE conflicts (pkg text NOT NULL, conflict_pkg text NOT NULL, conflict_version text NOT NULL)") != SQLITE_OK)
+ RETURN_ERROR(MPORT_ERR_SQLITE, sqlite3_errmsg(db));
+ if (run_sql(db, "CREATE TABLE depends (pkg text NOT NULL, depend_pkgname text NOT NULL, depend_pkgversion text NOT NULL, depend_port text NOT NULL)") != SQLITE_OK)
+ RETURN_ERROR(MPORT_ERR_SQLITE, sqlite3_errmsg(db));
+
+ return MPORT_OK;
}
-static void run_sql(sqlite3 *db, const char *sql)
+static int run_sql(sqlite3 *db, const char *sql)
{
char *error = 0;
- sqlite3_exec(
+ return sqlite3_exec(
db,
sql,
NULL,
More information about the Midnightbsd-cvs
mailing list