[Midnightbsd-cvs] src [7746] stable/0.8/lib/libmport: MFC: fix several database locking issues
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sat Aug 20 18:37:21 EDT 2016
Revision: 7746
http://svnweb.midnightbsd.org/src/?rev=7746
Author: laffer1
Date: 2016-08-20 18:37:21 -0400 (Sat, 20 Aug 2016)
Log Message:
-----------
MFC: fix several database locking issues
Modified Paths:
--------------
stable/0.8/lib/libmport/bundle_read_install_pkg.c
stable/0.8/lib/libmport/clean.c
stable/0.8/lib/libmport/info.c
stable/0.8/lib/libmport/install_primative.c
stable/0.8/lib/libmport/instance.c
stable/0.8/lib/libmport/lock.c
Modified: stable/0.8/lib/libmport/bundle_read_install_pkg.c
===================================================================
--- stable/0.8/lib/libmport/bundle_read_install_pkg.c 2016-08-17 03:06:59 UTC (rev 7745)
+++ stable/0.8/lib/libmport/bundle_read_install_pkg.c 2016-08-20 22:37:21 UTC (rev 7746)
@@ -65,21 +65,21 @@
int
mport_bundle_read_install_pkg(mportInstance *mport, mportBundleRead *bundle, mportPackageMeta *pkg)
{
- if (do_pre_install(mport, bundle, pkg) != MPORT_OK) {
- RETURN_CURRENT_ERROR;
- }
+ if (do_pre_install(mport, bundle, pkg) != MPORT_OK) {
+ RETURN_CURRENT_ERROR;
+ }
- if (do_actual_install(mport, bundle, pkg) != MPORT_OK) {
- RETURN_CURRENT_ERROR;
- }
+ if (do_actual_install(mport, bundle, pkg) != MPORT_OK) {
+ RETURN_CURRENT_ERROR;
+ }
- if (do_post_install(mport, bundle, pkg) != MPORT_OK) {
- RETURN_CURRENT_ERROR;
- }
+ if (do_post_install(mport, bundle, pkg) != MPORT_OK) {
+ RETURN_CURRENT_ERROR;
+ }
- syslog(LOG_NOTICE, "%s-%s installed", pkg->name, pkg->version);
+ syslog(LOG_NOTICE, "%s-%s installed", pkg->name, pkg->version);
- return MPORT_OK;
+ return MPORT_OK;
}
@@ -135,7 +135,7 @@
return MPORT_OK;
ERROR:
- // TODO: asset list free
+ // TODO: asset list free
RETURN_CURRENT_ERROR;
}
@@ -148,23 +148,23 @@
__block char *err;
if (mport_db_prepare(mport->db, &count,
- "SELECT COUNT(*) FROM stub.assets WHERE (type=%i or type=%i or type=%i or type=%i) AND pkg=%Q",
- ASSET_FILE, ASSET_SAMPLE, ASSET_SHELL, ASSET_FILE_OWNER_MODE, pkg_name) != MPORT_OK) {
+ "SELECT COUNT(*) FROM stub.assets WHERE (type=%i or type=%i or type=%i or type=%i) AND pkg=%Q",
+ ASSET_FILE, ASSET_SAMPLE, ASSET_SHELL, ASSET_FILE_OWNER_MODE, pkg_name) != MPORT_OK) {
sqlite3_finalize(count);
RETURN_CURRENT_ERROR;
}
dispatch_sync(mportSQLSerial, ^{
- switch (sqlite3_step(count)) {
- case SQLITE_ROW:
- *file_total = sqlite3_column_int(count, 0);
- sqlite3_finalize(count);
- break;
- default:
- err = (char *) sqlite3_errmsg(mport->db);
- result = MPORT_ERR_FATAL;
- sqlite3_finalize(count);
- }
+ switch (sqlite3_step(count)) {
+ case SQLITE_ROW:
+ *file_total = sqlite3_column_int(count, 0);
+ sqlite3_finalize(count);
+ break;
+ default:
+ err = (char *) sqlite3_errmsg(mport->db);
+ result = MPORT_ERR_FATAL;
+ sqlite3_finalize(count);
+ }
});
if (result == MPORT_ERR_FATAL)
@@ -178,9 +178,9 @@
/* Insert the package meta row into the packages table (We use pack here because things might have been twiddled) */
/* Note that this will be marked as dirty by default */
if (mport_db_do(mport->db,
- "INSERT INTO packages (pkg, version, origin, prefix, lang, options, comment, os_release, cpe, locked) VALUES (%Q,%Q,%Q,%Q,%Q,%Q,%Q,%Q,%Q,0)",
- pkg->name, pkg->version, pkg->origin, pkg->prefix, pkg->lang, pkg->options, pkg->comment,
- pkg->os_release, pkg->cpe) != MPORT_OK)
+ "INSERT INTO packages (pkg, version, origin, prefix, lang, options, comment, os_release, cpe, locked) VALUES (%Q,%Q,%Q,%Q,%Q,%Q,%Q,%Q,%Q,0)",
+ pkg->name, pkg->version, pkg->origin, pkg->prefix, pkg->lang, pkg->options, pkg->comment,
+ pkg->os_release, pkg->cpe) != MPORT_OK)
RETURN_CURRENT_ERROR;
return MPORT_OK;
@@ -191,8 +191,8 @@
{
/* Insert the depends into the master table */
if (mport_db_do(mport->db,
- "INSERT INTO depends (pkg, depend_pkgname, depend_pkgversion, depend_port) SELECT pkg,depend_pkgname,depend_pkgversion,depend_port FROM stub.depends WHERE pkg=%Q",
- pkg->name) != MPORT_OK)
+ "INSERT INTO depends (pkg, depend_pkgname, depend_pkgversion, depend_port) SELECT pkg,depend_pkgname,depend_pkgversion,depend_port FROM stub.depends WHERE pkg=%Q",
+ pkg->name) != MPORT_OK)
RETURN_CURRENT_ERROR;
return MPORT_OK;
@@ -202,8 +202,9 @@
create_categories(mportInstance *mport, mportPackageMeta *pkg)
{
/* Insert the categories into the master table */
- if (mport_db_do(mport->db, "INSERT INTO categories (pkg, category) SELECT pkg, category FROM stub.categories WHERE pkg=%Q",
- pkg->name) != MPORT_OK)
+ if (mport_db_do(mport->db,
+ "INSERT INTO categories (pkg, category) SELECT pkg, category FROM stub.categories WHERE pkg=%Q",
+ pkg->name) != MPORT_OK)
RETURN_CURRENT_ERROR;
return MPORT_OK;
@@ -244,19 +245,23 @@
*alist_p = alist;
if (state == PREINSTALL) {
- if (mport_db_prepare(mport->db, &stmt, "SELECT type,data,checksum,owner,grp,mode FROM stub.assets WHERE pkg=%Q and type in (%d, %d)", pkg->name, ASSET_CWD, ASSET_PREEXEC) != MPORT_OK) {
+ if (mport_db_prepare(mport->db, &stmt,
+ "SELECT type,data,checksum,owner,grp,mode FROM stub.assets WHERE pkg=%Q and type in (%d, %d)",
+ pkg->name, ASSET_CWD, ASSET_PREEXEC) != MPORT_OK) {
sqlite3_finalize(stmt);
RETURN_CURRENT_ERROR;
}
} else if (state == ACTUALINSTALL) {
if (mport_db_prepare(mport->db, &stmt,
- "SELECT type,data,checksum,owner,grp,mode FROM stub.assets WHERE pkg=%Q and type not in (%d, %d)",
- pkg->name, ASSET_PREEXEC, ASSET_POSTEXEC) != MPORT_OK) {
+ "SELECT type,data,checksum,owner,grp,mode FROM stub.assets WHERE pkg=%Q and type not in (%d, %d)",
+ pkg->name, ASSET_PREEXEC, ASSET_POSTEXEC) != MPORT_OK) {
sqlite3_finalize(stmt);
RETURN_CURRENT_ERROR;
}
} else if (state == POSTINSTALL) {
- if (mport_db_prepare(mport->db, &stmt, "SELECT type,data,checksum,owner,grp,mode FROM stub.assets WHERE pkg=%Q and type in (%d, %d)", pkg->name, ASSET_CWD, ASSET_POSTEXEC) != MPORT_OK) {
+ if (mport_db_prepare(mport->db, &stmt,
+ "SELECT type,data,checksum,owner,grp,mode FROM stub.assets WHERE pkg=%Q and type in (%d, %d)",
+ pkg->name, ASSET_CWD, ASSET_POSTEXEC) != MPORT_OK) {
sqlite3_finalize(stmt);
RETURN_CURRENT_ERROR;
}
@@ -267,60 +272,60 @@
}
dispatch_sync(mportSQLSerial, ^{
- while (1) {
- mportAssetListEntry *e;
+ while (1) {
+ mportAssetListEntry *e;
- int ret = sqlite3_step(stmt);
+ int ret = sqlite3_step(stmt);
- if (ret == SQLITE_BUSY || ret == SQLITE_LOCKED) {
- sleep(1);
- ret = sqlite3_step(stmt);
- }
+ if (ret == SQLITE_BUSY || ret == SQLITE_LOCKED) {
+ sleep(1);
+ ret = sqlite3_step(stmt);
+ }
- if (ret == SQLITE_DONE)
- break;
+ if (ret == SQLITE_DONE)
+ break;
- if (ret != SQLITE_ROW) {
- err = (char *) sqlite3_errmsg(mport->db);
- result = MPORT_ERR_FATAL;
- break; // we finalize below
- }
+ if (ret != SQLITE_ROW) {
+ err = (char *) sqlite3_errmsg(mport->db);
+ result = MPORT_ERR_FATAL;
+ break; // we finalize below
+ }
- e = (mportAssetListEntry *) calloc(1, sizeof(mportAssetListEntry));
+ e = (mportAssetListEntry *) calloc(1, sizeof(mportAssetListEntry));
- if (e == NULL) {
- err = "Out of memory";
- result = MPORT_ERR_FATAL;
- break; // we finalize below
- }
+ if (e == NULL) {
+ err = "Out of memory";
+ result = MPORT_ERR_FATAL;
+ break; // we finalize below
+ }
- e->type = (mportAssetListEntryType) sqlite3_column_int(stmt, 0);
- const unsigned char *data = sqlite3_column_text(stmt, 1);
- const unsigned char *checksum = sqlite3_column_text(stmt, 2);
- const unsigned char *owner = sqlite3_column_text(stmt, 3);
- const unsigned char *group = sqlite3_column_text(stmt, 4);
- const unsigned char *mode = sqlite3_column_text(stmt, 5);
+ e->type = (mportAssetListEntryType) sqlite3_column_int(stmt, 0);
+ const unsigned char *data = sqlite3_column_text(stmt, 1);
+ const unsigned char *checksum = sqlite3_column_text(stmt, 2);
+ const unsigned char *owner = sqlite3_column_text(stmt, 3);
+ const unsigned char *group = sqlite3_column_text(stmt, 4);
+ const unsigned char *mode = sqlite3_column_text(stmt, 5);
- e->data = data == NULL ? NULL : strdup((char *) data);
- if (checksum != NULL)
- e->checksum = strdup((char *) checksum);
- if (owner != NULL)
- e->owner = strdup((char *) owner);
- if (group != NULL)
- e->group = strdup((char *) group);
- if (mode != NULL)
- e->mode = strdup((char *) mode);
+ e->data = data == NULL ? NULL : strdup((char *) data);
+ if (checksum != NULL)
+ e->checksum = strdup((char *) checksum);
+ if (owner != NULL)
+ e->owner = strdup((char *) owner);
+ if (group != NULL)
+ e->group = strdup((char *) group);
+ if (mode != NULL)
+ e->mode = strdup((char *) mode);
- if (e->data == NULL) {
- err = "Out of memory";
- result = MPORT_ERR_FATAL;
- break;
- }
+ if (e->data == NULL) {
+ err = "Out of memory";
+ result = MPORT_ERR_FATAL;
+ break;
+ }
- STAILQ_INSERT_TAIL(alist, e, next);
- }
+ STAILQ_INSERT_TAIL(alist, e, next);
+ }
- sqlite3_finalize(stmt);
+ sqlite3_finalize(stmt);
});
if (result == MPORT_ERR_FATAL)
@@ -332,30 +337,30 @@
do_actual_install(mportInstance *mport, mportBundleRead *bundle, mportPackageMeta *pkg)
{
mportAssetList *alist = NULL;
- mportAssetListEntry *e = NULL;
- int file_total;
- int file_count = 0;
- struct archive_entry *entry;
- char *orig_cwd = NULL;
- uid_t owner = 0; /* root */
- gid_t group = 0; /* wheel */
- mode_t *set = NULL;
- mode_t newmode;
- mode_t *dirset = NULL;
- mode_t dirnewmode;
- char *mode = NULL;
- char *mkdirp = NULL;
- struct stat sb;
- char file[FILENAME_MAX], cwd[FILENAME_MAX], dir[FILENAME_MAX];
- sqlite3_stmt *insert = NULL;
+ __block mportAssetListEntry *e = NULL;
+ int file_total;
+ int file_count = 0;
+ struct archive_entry *entry;
+ char *orig_cwd = NULL;
+ uid_t owner = 0; /* root */
+ gid_t group = 0; /* wheel */
+ mode_t *set = NULL;
+ mode_t newmode;
+ mode_t *dirset = NULL;
+ mode_t dirnewmode;
+ char *mode = NULL;
+ char *mkdirp = NULL;
+ struct stat sb;
+ __block char file[FILENAME_MAX], cwd[FILENAME_MAX];
+ __block sqlite3_stmt *insert = NULL;
- /* sadly, we can't just use abs pathnames, because it will break hardlinks */
- orig_cwd = getcwd(NULL, 0);
+ /* sadly, we can't just use abs pathnames, because it will break hardlinks */
+ orig_cwd = getcwd(NULL, 0);
if (get_file_count(mport, pkg->name, &file_total) != MPORT_OK)
goto ERROR;
- mport_call_progress_init_cb(mport, "Installing %s-%s", pkg->name, pkg->version);
+ mport_call_progress_init_cb(mport, "Installing %s-%s", pkg->name, pkg->version);
if (mport_bundle_read_get_assetlist(mport, pkg, &alist, ACTUALINSTALL) != MPORT_OK)
goto ERROR;
@@ -369,43 +374,46 @@
if (create_categories(mport, pkg) != MPORT_OK)
goto ERROR;
- /* Insert the assets into the master table (We do this one by one because we want to insert file
- * assets as absolute paths. */
- if (mport_db_prepare(mport->db, &insert, "INSERT INTO assets (pkg, type, data, checksum, owner, grp, mode) values (%Q,?,?,?,?,?,?)", pkg->name) !=
- MPORT_OK)
- goto ERROR;
+ /* Insert the assets into the master table (We do this one by one because we want to insert file
+ * assets as absolute paths. */
+ if (mport_db_prepare(mport->db, &insert,
+ "INSERT INTO assets (pkg, type, data, checksum, owner, grp, mode) values (%Q,?,?,?,?,?,?)",
+ pkg->name) != MPORT_OK)
+ goto ERROR;
- (void) strlcpy(cwd, pkg->prefix, sizeof(cwd));
+ (void) strlcpy(cwd, pkg->prefix, sizeof(cwd));
- if (mport_chdir(mport, cwd) != MPORT_OK)
- goto ERROR;
+ if (mport_chdir(mport, cwd) != MPORT_OK)
+ goto ERROR;
+ mport_db_do(mport->db, "BEGIN TRANSACTION");
+
STAILQ_FOREACH(e, alist, next) {
- switch (e->type) {
- case ASSET_CWD:
- (void) strlcpy(cwd, e->data == NULL ? pkg->prefix : e->data, sizeof(cwd));
- if (mport_chdir(mport, cwd) != MPORT_OK)
- goto ERROR;
- break;
- case ASSET_CHMOD:
- if (mode != NULL)
- free(mode);
- /* TODO: should we reset the mode rather than NULL here */
- if (e->data == NULL)
- mode = NULL;
- else
- mode = strdup(e->data);
- break;
- case ASSET_CHOWN:
- owner = mport_get_uid(e->data);
- break;
- case ASSET_CHGRP:
- group = mport_get_gid(e->data);
- break;
- case ASSET_DIR:
- case ASSET_DIRRM:
- case ASSET_DIRRMTRY:
- case ASSET_DIR_OWNER_MODE:
+ switch (e->type) {
+ case ASSET_CWD:
+ (void) strlcpy(cwd, e->data == NULL ? pkg->prefix : e->data, sizeof(cwd));
+ if (mport_chdir(mport, cwd) != MPORT_OK)
+ goto ERROR;
+ break;
+ case ASSET_CHMOD:
+ if (mode != NULL)
+ free(mode);
+ /* TODO: should we reset the mode rather than NULL here */
+ if (e->data == NULL)
+ mode = NULL;
+ else
+ mode = strdup(e->data);
+ break;
+ case ASSET_CHOWN:
+ owner = mport_get_uid(e->data);
+ break;
+ case ASSET_CHGRP:
+ group = mport_get_gid(e->data);
+ break;
+ case ASSET_DIR:
+ case ASSET_DIRRM:
+ case ASSET_DIRRMTRY:
+ case ASSET_DIR_OWNER_MODE:
mkdirp = strdup(e->data); /* need a char * here */
if (mkdirp == NULL || mport_mkdirp(mkdirp, S_IRWXU | S_IRWXG | S_IRWXO) == 0) {
free(mkdirp);
@@ -414,45 +422,46 @@
}
free(mkdirp);
- if (e->mode != NULL && e->mode[0] != '\0') {
- if ((dirset = setmode(e->mode)) == NULL)
- goto ERROR;
- dirnewmode = getmode(dirset, sb.st_mode);
- free(dirset);
- if (chmod(e->data, dirnewmode))
- goto ERROR;
+ if (e->mode != NULL && e->mode[0] != '\0') {
+ if ((dirset = setmode(e->mode)) == NULL)
+ goto ERROR;
+ dirnewmode = getmode(dirset, sb.st_mode);
+ free(dirset);
+ if (chmod(e->data, dirnewmode))
+ goto ERROR;
}
- if (e->owner != NULL && e->group != NULL && e->owner[0] != '\0' && e->group[0] != '\0') {
+ if (e->owner != NULL && e->group != NULL && e->owner[0] != '\0' &&
+ e->group[0] != '\0') {
if (chown(e->data, mport_get_uid(e->owner), mport_get_gid(e->group)) == -1) {
SET_ERROR(MPORT_ERR_FATAL, "Unable to change owner");
goto ERROR;
}
- } else if (e->owner != NULL && e->owner[0] != '\0') {
+ } else if (e->owner != NULL && e->owner[0] != '\0') {
if (chown(e->data, mport_get_uid(e->owner), group) == -1) {
SET_ERROR(MPORT_ERR_FATAL, "Unable to change owner");
goto ERROR;
}
- } else if (e->group != NULL && e->group[0] != '\0') {
+ } else if (e->group != NULL && e->group[0] != '\0') {
if (chown(e->data, owner, mport_get_gid(e->group)) == -1) {
SET_ERROR(MPORT_ERR_FATAL, "Unable to change owner");
goto ERROR;
}
- }
-
+ }
+
break;
- case ASSET_EXEC:
- if (mport_run_asset_exec(mport, e->data, cwd, file) != MPORT_OK)
- goto ERROR;
- break;
- case ASSET_FILE_OWNER_MODE:
+ case ASSET_EXEC:
+ if (mport_run_asset_exec(mport, e->data, cwd, file) != MPORT_OK)
+ goto ERROR;
+ break;
+ case ASSET_FILE_OWNER_MODE:
/* FALLS THROUGH */
- case ASSET_FILE:
- /* FALLS THROUGH */
- case ASSET_SHELL:
- /* FALLS THROUGH */
- case ASSET_SAMPLE:
- if (mport_bundle_read_next_entry(bundle, &entry) != MPORT_OK)
- goto ERROR;
+ case ASSET_FILE:
+ /* FALLS THROUGH */
+ case ASSET_SHELL:
+ /* FALLS THROUGH */
+ case ASSET_SAMPLE:
+ if (mport_bundle_read_next_entry(bundle, &entry) != MPORT_OK)
+ goto ERROR;
(void) snprintf(file, FILENAME_MAX, "%s%s/%s", mport->root, cwd, e->data);
if (entry == NULL) {
@@ -460,24 +469,26 @@
goto ERROR;
}
- archive_entry_set_pathname(entry, file);
+ archive_entry_set_pathname(entry, file);
- if (mport_bundle_read_extract_next_file(bundle, entry) != MPORT_OK)
- goto ERROR;
+ if (mport_bundle_read_extract_next_file(bundle, entry) != MPORT_OK)
+ goto ERROR;
- if (lstat(file, &sb)) {
- SET_ERRORX(MPORT_ERR_FATAL, "Unable to stat file %s", file);
- goto ERROR;
+ if (lstat(file, &sb)) {
+ SET_ERRORX(MPORT_ERR_FATAL, "Unable to stat file %s", file);
+ goto ERROR;
}
- if (S_ISREG(sb.st_mode)) {
- if (e->type == ASSET_FILE_OWNER_MODE) {
+ if (S_ISREG(sb.st_mode)) {
+ if (e->type == ASSET_FILE_OWNER_MODE) {
/* Test for owner and group settings, otherwise roll with our default. */
- if (e->owner != NULL && e->group != NULL && e->owner[0] != '\0' && e->group[0] != '\0') {
+ if (e->owner != NULL && e->group != NULL && e->owner[0] != '\0' &&
+ e->group[0] != '\0') {
#ifdef DEBUG
fprintf(stderr, "owner %s and group %s\n", fm_owner, fm_group);
#endif
- if (chown(file, mport_get_uid(e->owner), mport_get_gid(e->group)) == -1) {
+ if (chown(file, mport_get_uid(e->owner),
+ mport_get_gid(e->group)) == -1) {
SET_ERROR(MPORT_ERR_FATAL, "Unable to change owner");
goto ERROR;
}
@@ -504,194 +515,235 @@
goto ERROR;
}
}
- } else {
+ } else {
/* Set the owner and group */
if (chown(file, owner, group) == -1) {
- SET_ERRORX(MPORT_ERR_FATAL, "Unable to set permissions on file %s", file);
+ SET_ERRORX(MPORT_ERR_FATAL,
+ "Unable to set permissions on file %s", file);
goto ERROR;
}
- }
+ }
- /* Set the file permissions, assumes non NFSv4 */
- if (mode != NULL) {
- if (stat(file, &sb)) {
- SET_ERRORX(MPORT_ERR_FATAL, "Unable to stat file %s", file);
- goto ERROR;
+ /* Set the file permissions, assumes non NFSv4 */
+ if (mode != NULL) {
+ if (stat(file, &sb)) {
+ SET_ERRORX(MPORT_ERR_FATAL, "Unable to stat file %s", file);
+ goto ERROR;
}
if (e->type == ASSET_FILE_OWNER_MODE && e->mode != NULL) {
- if ((set = setmode(e->mode)) == NULL) {
+ if ((set = setmode(e->mode)) == NULL) {
SET_ERROR(MPORT_ERR_FATAL, "Unable to set mode");
goto ERROR;
}
} else {
- if ((set = setmode(mode)) == NULL) {
+ if ((set = setmode(mode)) == NULL) {
SET_ERROR(MPORT_ERR_FATAL, "Unable to set mode");
goto ERROR;
}
}
newmode = getmode(set, sb.st_mode);
- free(set);
+ free(set);
if (chmod(file, newmode)) {
- SET_ERROR(MPORT_ERR_FATAL, "Unable to set file permissions");
+ SET_ERROR(MPORT_ERR_FATAL, "Unable to set file permissions");
goto ERROR;
}
- }
+ }
- /* shell registration */
- if (e->type == ASSET_SHELL && mport_shell_register(file) != MPORT_OK) {
+ /* shell registration */
+ if (e->type == ASSET_SHELL && mport_shell_register(file) != MPORT_OK) {
goto ERROR;
- }
+ }
- /* for sample files, if we don't have an existing file, make a new one */
+ /* for sample files, if we don't have an existing file, make a new one */
if (e->type == ASSET_SAMPLE && create_sample_file(file) != MPORT_OK) {
- SET_ERRORX(MPORT_ERR_FATAL, "Unable to create sample file from %s", file);
+ SET_ERRORX(MPORT_ERR_FATAL, "Unable to create sample file from %s",
+ file);
goto ERROR;
}
- }
+ }
- (mport->progress_step_cb)(++file_count, file_total, file);
+ (mport->progress_step_cb)(++file_count, file_total, file);
- break;
- default:
- /* do nothing */
- break;
- }
+ break;
+ default:
+ /* do nothing */
+ break;
+ }
- /* insert this asset into the master database */
- if (sqlite3_bind_int(insert, 1, (int) e->type) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
- if (e->type == ASSET_FILE || e->type == ASSET_SAMPLE || e->type == ASSET_SHELL || e->type == ASSET_FILE_OWNER_MODE) {
- /* don't put the root in the database! */
- if (sqlite3_bind_text(insert, 2, file + strlen(mport->root), -1, SQLITE_STATIC) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
+ /* insert this asset into the master database */
+ __block int code = MPORT_OK;
+ __block const char *err;
+ __block char *filePtr = strdup(file);
+ __block char *cwdPtr = strdup(cwd);
+ dispatch_sync(mportSQLSerial, ^{
+ char dir[FILENAME_MAX];
+ if (sqlite3_bind_int(insert, 1, (int) e->type) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
+ if (e->type == ASSET_FILE || e->type == ASSET_SAMPLE || e->type == ASSET_SHELL ||
+ e->type == ASSET_FILE_OWNER_MODE) {
+ /* don't put the root in the database! */
+ if (sqlite3_bind_text(insert, 2, filePtr + strlen(mport->root), -1, SQLITE_STATIC) !=
+ SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
- if (sqlite3_bind_text(insert, 3, e->checksum, -1, SQLITE_STATIC) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
+ if (sqlite3_bind_text(insert, 3, e->checksum, -1, SQLITE_STATIC) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
- if (e->owner != NULL) {
- if (sqlite3_bind_text(insert, 4, e->owner, -1, SQLITE_STATIC) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
- } else {
- if (sqlite3_bind_null(insert, 4) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
- }
+ if (e->owner != NULL) {
+ if (sqlite3_bind_text(insert, 4, e->owner, -1, SQLITE_STATIC) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
+ } else {
+ if (sqlite3_bind_null(insert, 4) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
+ }
- if (e->group != NULL) {
- if (sqlite3_bind_text(insert, 5, e->group, -1, SQLITE_STATIC) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
- } else {
- if (sqlite3_bind_null(insert, 5) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
- }
+ if (e->group != NULL) {
+ if (sqlite3_bind_text(insert, 5, e->group, -1, SQLITE_STATIC) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
+ } else {
+ if (sqlite3_bind_null(insert, 5) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
+ }
- if (e->mode != NULL) {
- if (sqlite3_bind_text(insert, 6, e->mode, -1, SQLITE_STATIC) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
- } else {
- if (sqlite3_bind_null(insert, 6) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
- }
- } else if (e->type == ASSET_DIR || e->type == ASSET_DIRRM || e->type == ASSET_DIRRMTRY) {
- /* if data starts with /, it's most likely an absolute path. Don't prepend cwd */
- if (e->data != NULL && e->data[0] == '/')
- (void) snprintf(dir, FILENAME_MAX, "%s", e->data);
- else
- (void) snprintf(dir, FILENAME_MAX, "%s/%s", cwd, e->data);
+ if (e->mode != NULL) {
+ if (sqlite3_bind_text(insert, 6, e->mode, -1, SQLITE_STATIC) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
+ } else {
+ if (sqlite3_bind_null(insert, 6) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
+ }
+ } else if (e->type == ASSET_DIR || e->type == ASSET_DIRRM || e->type == ASSET_DIRRMTRY) {
+ /* if data starts with /, it's most likely an absolute path. Don't prepend cwd */
+ if (e->data != NULL && e->data[0] == '/')
+ (void) snprintf(dir, FILENAME_MAX, "%s", e->data);
+ else
+ (void) snprintf(dir, FILENAME_MAX, "%s/%s", cwdPtr, e->data);
- if (sqlite3_bind_text(insert, 2, dir, -1, SQLITE_STATIC) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
+ if (sqlite3_bind_text(insert, 2, dir, -1, SQLITE_STATIC) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
- if (sqlite3_bind_null(insert, 3) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
+ if (sqlite3_bind_null(insert, 3) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
- if (sqlite3_bind_null(insert, 4) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
+ if (sqlite3_bind_null(insert, 4) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
- if (sqlite3_bind_null(insert, 5) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
+ if (sqlite3_bind_null(insert, 5) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
- if (sqlite3_bind_null(insert, 6) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
- } else {
- if (sqlite3_bind_text(insert, 2, e->data, -1, SQLITE_STATIC) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
+ if (sqlite3_bind_null(insert, 6) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
+ } else {
+ if (sqlite3_bind_text(insert, 2, e->data, -1, SQLITE_STATIC) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
- if (sqlite3_bind_null(insert, 3) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
+ if (sqlite3_bind_null(insert, 3) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
- if (sqlite3_bind_null(insert, 4) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
+ if (sqlite3_bind_null(insert, 4) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
- if (sqlite3_bind_null(insert, 5) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
+ if (sqlite3_bind_null(insert, 5) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
- if (sqlite3_bind_null(insert, 6) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
- }
+ if (sqlite3_bind_null(insert, 6) != SQLITE_OK) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
+ }
- if (sqlite3_step(insert) != SQLITE_DONE) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
+ if (sqlite3_step(insert) != SQLITE_DONE) {
+ code = MPORT_ERR_FATAL;
+ err = sqlite3_errmsg(mport->db);
+ return;
+ }
- sqlite3_reset(insert);
- }
+ sqlite3_reset(insert);
+ });
- sqlite3_finalize(insert);
+ free(filePtr);
+ free(cwdPtr);
+ if (code != MPORT_OK) {
+ SET_ERROR(code, err);
+ goto ERROR;
+ }
+ }
+ if (mport_db_do(mport->db, "COMMIT") != MPORT_OK) {
+ SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
+ goto ERROR;
+ }
+ sqlite3_finalize(insert);
+
mport_pkgmeta_logevent(mport, pkg, "Installed");
- (mport->progress_free_cb)();
- (void) mport_chdir(NULL, orig_cwd);
- free(orig_cwd);
+ (mport->progress_free_cb)();
+ (void) mport_chdir(NULL, orig_cwd);
+ free(orig_cwd);
mport_assetlist_free(alist);
- return MPORT_OK;
+ return (MPORT_OK);
- ERROR:
- sqlite3_finalize(insert);
- (mport->progress_free_cb)();
- free(orig_cwd);
- mport_assetlist_free(alist);
- //rollback();
- RETURN_CURRENT_ERROR;
+ ERROR:
+ sqlite3_finalize(insert);
+ (mport->progress_free_cb)();
+ free(orig_cwd);
+ mport_assetlist_free(alist);
+ RETURN_CURRENT_ERROR;
}
@@ -703,7 +755,7 @@
if (mport_copy_file(from, to) != MPORT_OK) \
RETURN_CURRENT_ERROR; \
}
-
+
static int
mark_complete(mportInstance *mport, mportPackageMeta *pkg)
{
@@ -719,20 +771,19 @@
static int
do_post_install(mportInstance *mport, mportBundleRead *bundle, mportPackageMeta *pkg)
{
- char to[FILENAME_MAX], from[FILENAME_MAX];
- COPY_METAFILE(MPORT_MTREE_FILE);
- COPY_METAFILE(MPORT_INSTALL_FILE);
- COPY_METAFILE(MPORT_DEINSTALL_FILE);
- COPY_METAFILE(MPORT_MESSAGE_FILE);
+ COPY_METAFILE(MPORT_MTREE_FILE);
+ COPY_METAFILE(MPORT_INSTALL_FILE);
+ COPY_METAFILE(MPORT_DEINSTALL_FILE);
+ COPY_METAFILE(MPORT_MESSAGE_FILE);
- if (run_postexec(mport, pkg) != MPORT_OK)
- RETURN_CURRENT_ERROR;
+ if (run_postexec(mport, pkg) != MPORT_OK)
+ RETURN_CURRENT_ERROR;
- if (display_pkg_msg(mport, bundle, pkg) != MPORT_OK)
- RETURN_CURRENT_ERROR;
+ if (display_pkg_msg(mport, bundle, pkg) != MPORT_OK)
+ RETURN_CURRENT_ERROR;
- if (run_pkg_install(mport, bundle, pkg, "POST-INSTALL") != MPORT_OK)
+ if (run_pkg_install(mport, bundle, pkg, "POST-INSTALL") != MPORT_OK)
RETURN_CURRENT_ERROR;
return mark_complete(mport, pkg);
@@ -746,49 +797,49 @@
mportAssetListEntry *e = NULL;
char cwd[FILENAME_MAX];
- /* Process @postexec steps */
+ /* Process @postexec steps */
if (mport_bundle_read_get_assetlist(mport, pkg, &alist, POSTINSTALL) != MPORT_OK)
goto ERROR;
- (void) strlcpy(cwd, pkg->prefix, sizeof(cwd));
+ (void) strlcpy(cwd, pkg->prefix, sizeof(cwd));
- if (mport_chdir(mport, cwd) != MPORT_OK)
- goto ERROR;
+ if (mport_chdir(mport, cwd) != MPORT_OK)
+ goto ERROR;
STAILQ_FOREACH(e, alist, next) {
- char file[FILENAME_MAX];
- if (e->data == NULL) {
- snprintf(file, sizeof(file), "%s", mport->root);
- } else if (e->data[0] == '/') {
- snprintf(file, sizeof(file), "%s%s", mport->root, e->data);
- } else {
- snprintf(file, sizeof(file), "%s%s/%s", mport->root, pkg->prefix, e->data);
- }
+ char file[FILENAME_MAX];
+ if (e->data == NULL) {
+ snprintf(file, sizeof(file), "%s", mport->root);
+ } else if (e->data[0] == '/') {
+ snprintf(file, sizeof(file), "%s%s", mport->root, e->data);
+ } else {
+ snprintf(file, sizeof(file), "%s%s/%s", mport->root, pkg->prefix, e->data);
+ }
- switch (e->type) {
- case ASSET_CWD:
- (void) strlcpy(cwd, e->data == NULL ? pkg->prefix : e->data, sizeof(cwd));
- if (mport_chdir(mport, cwd) != MPORT_OK)
- goto ERROR;
- break;
- case ASSET_POSTEXEC:
- if (mport_run_asset_exec(mport, e->data, cwd, file) != MPORT_OK)
- goto ERROR;
- break;
- default:
- /* do nothing */
- break;
- }
- }
+ switch (e->type) {
+ case ASSET_CWD:
+ (void) strlcpy(cwd, e->data == NULL ? pkg->prefix : e->data, sizeof(cwd));
+ if (mport_chdir(mport, cwd) != MPORT_OK)
+ goto ERROR;
+ break;
+ case ASSET_POSTEXEC:
+ if (mport_run_asset_exec(mport, e->data, cwd, file) != MPORT_OK)
+ goto ERROR;
+ break;
+ default:
+ /* do nothing */
+ break;
+ }
+ }
mport_assetlist_free(alist);
- mport_pkgmeta_logevent(mport, pkg, "postexec");
+ mport_pkgmeta_logevent(mport, pkg, "postexec");
- return MPORT_OK;
+ return MPORT_OK;
- ERROR:
+ ERROR:
// TODO: asset list free
- RETURN_CURRENT_ERROR;
+ RETURN_CURRENT_ERROR;
}
@@ -795,18 +846,20 @@
static int
run_mtree(mportInstance *mport, mportBundleRead *bundle, mportPackageMeta *pkg)
{
- char file[FILENAME_MAX];
- int ret;
+ char file[FILENAME_MAX];
+ int ret;
- (void) snprintf(file, FILENAME_MAX, "%s/%s/%s-%s/%s", bundle->tmpdir, MPORT_STUB_INFRA_DIR, pkg->name, pkg->version,
- MPORT_MTREE_FILE);
+ (void) snprintf(file, FILENAME_MAX, "%s/%s/%s-%s/%s", bundle->tmpdir, MPORT_STUB_INFRA_DIR, pkg->name,
+ pkg->version,
+ MPORT_MTREE_FILE);
- if (mport_file_exists(file)) {
- if ((ret = mport_xsystem(mport, "%s -U -f %s -d -e -p %s >/dev/null", MPORT_MTREE_BIN, file, pkg->prefix)) != 0)
- RETURN_ERRORX(MPORT_ERR_FATAL, "%s returned non-zero: %i", MPORT_MTREE_BIN, ret);
- }
+ if (mport_file_exists(file)) {
+ if ((ret = mport_xsystem(mport, "%s -U -f %s -d -e -p %s >/dev/null", MPORT_MTREE_BIN, file,
+ pkg->prefix)) != 0)
+ RETURN_ERRORX(MPORT_ERR_FATAL, "%s returned non-zero: %i", MPORT_MTREE_BIN, ret);
+ }
- return MPORT_OK;
+ return MPORT_OK;
}
@@ -813,56 +866,56 @@
static int
run_pkg_install(mportInstance *mport, mportBundleRead *bundle, mportPackageMeta *pkg, const char *mode)
{
- char file[FILENAME_MAX];
- int ret;
+ char file[FILENAME_MAX];
+ int ret;
- (void) snprintf(file, FILENAME_MAX, "%s/%s/%s-%s/%s", bundle->tmpdir, MPORT_STUB_INFRA_DIR, pkg->name, pkg->version,
- MPORT_INSTALL_FILE);
+ (void) snprintf(file, FILENAME_MAX, "%s/%s/%s-%s/%s", bundle->tmpdir, MPORT_STUB_INFRA_DIR, pkg->name,
+ pkg->version,
+ MPORT_INSTALL_FILE);
- if (mport_file_exists(file)) {
- if (chmod(file, 755) != 0)
- RETURN_ERRORX(MPORT_ERR_FATAL, "chmod(%s, 755): %s", file, strerror(errno));
+ if (mport_file_exists(file)) {
+ if (chmod(file, 755) != 0)
+ RETURN_ERRORX(MPORT_ERR_FATAL, "chmod(%s, 755): %s", file, strerror(errno));
- if ((ret = mport_xsystem(mport, "PKG_PREFIX=%s %s %s %s", pkg->prefix, file, pkg->name, mode)) != 0)
- RETURN_ERRORX(MPORT_ERR_FATAL, "%s %s returned non-zero: %i", MPORT_INSTALL_FILE, mode, ret);
- }
+ if ((ret = mport_xsystem(mport, "PKG_PREFIX=%s %s %s %s", pkg->prefix, file, pkg->name, mode)) != 0)
+ RETURN_ERRORX(MPORT_ERR_FATAL, "%s %s returned non-zero: %i", MPORT_INSTALL_FILE, mode, ret);
+ }
- return MPORT_OK;
+ return MPORT_OK;
}
-
static int
display_pkg_msg(mportInstance *mport, mportBundleRead *bundle, mportPackageMeta *pkg)
{
- char filename[FILENAME_MAX];
- char *buf;
- struct stat st;
- FILE *file;
+ char filename[FILENAME_MAX];
+ char *buf;
+ struct stat st;
+ FILE *file;
- (void) snprintf(filename, FILENAME_MAX, "%s/%s/%s-%s/%s", bundle->tmpdir, MPORT_STUB_INFRA_DIR, pkg->name,
- pkg->version, MPORT_MESSAGE_FILE);
+ (void) snprintf(filename, FILENAME_MAX, "%s/%s/%s-%s/%s", bundle->tmpdir, MPORT_STUB_INFRA_DIR, pkg->name,
+ pkg->version, MPORT_MESSAGE_FILE);
- if (stat(filename, &st) == -1)
- /* if we couldn't stat the file, we assume there isn't a pkg-msg */
- return MPORT_OK;
+ if (stat(filename, &st) == -1)
+ /* if we couldn't stat the file, we assume there isn't a pkg-msg */
+ return MPORT_OK;
- if ((file = fopen(filename, "r")) == NULL)
- RETURN_ERRORX(MPORT_ERR_FATAL, "Couldn't open %s: %s", filename, strerror(errno));
+ if ((file = fopen(filename, "r")) == NULL)
+ RETURN_ERRORX(MPORT_ERR_FATAL, "Couldn't open %s: %s", filename, strerror(errno));
- if ((buf = (char *) calloc((size_t)(st.st_size + 1), sizeof(char))) == NULL)
- RETURN_ERROR(MPORT_ERR_FATAL, "Out of memory.");
+ if ((buf = (char *) calloc((size_t) (st.st_size + 1), sizeof(char))) == NULL)
+ RETURN_ERROR(MPORT_ERR_FATAL, "Out of memory.");
- if (fread(buf, 1, (size_t)st.st_size, file) != (size_t) st.st_size) {
- free(buf);
- RETURN_ERRORX(MPORT_ERR_FATAL, "Read error: %s", strerror(errno));
- }
+ if (fread(buf, 1, (size_t) st.st_size, file) != (size_t) st.st_size) {
+ free(buf);
+ RETURN_ERRORX(MPORT_ERR_FATAL, "Read error: %s", strerror(errno));
+ }
- buf[st.st_size] = 0;
+ buf[st.st_size] = 0;
- mport_call_msg_cb(mport, buf);
+ mport_call_msg_cb(mport, buf);
- free(buf);
+ free(buf);
- return MPORT_OK;
+ return MPORT_OK;
}
Modified: stable/0.8/lib/libmport/clean.c
===================================================================
--- stable/0.8/lib/libmport/clean.c 2016-08-17 03:06:59 UTC (rev 7745)
+++ stable/0.8/lib/libmport/clean.c 2016-08-20 22:37:21 UTC (rev 7746)
@@ -37,66 +37,70 @@
#include <errno.h>
#include <dirent.h>
-MPORT_PUBLIC_API int
-mport_clean_database(mportInstance *mport) {
- __block int error_code = MPORT_OK;
+MPORT_PUBLIC_API int
+mport_clean_database(mportInstance *mport)
+{
+ __block int error_code = MPORT_OK;
- dispatch_sync(mportTaskSerial, ^{
- if (mport_db_do(mport->db, "vacuum") != MPORT_OK) {
- error_code = mport_err_code();
- mport_call_msg_cb(mport, "Database maintenance failed: %s\n", mport_err_string());
- } else {
- mport_call_msg_cb(mport, "Database maintenance complete.\n");
- }
- });
+ dispatch_sync(mportTaskSerial, ^{
+ if (mport_db_do(mport->db, "vacuum") != MPORT_OK) {
+ error_code = mport_err_code();
+ mport_call_msg_cb(mport, "Database maintenance failed: %s\n", mport_err_string());
+ } else {
+ mport_call_msg_cb(mport, "Database maintenance complete.\n");
+ }
+ });
- return error_code;
+ return error_code;
}
MPORT_PUBLIC_API int
-mport_clean_oldpackages(mportInstance *mport) {
- __block int error_code = MPORT_OK;
+mport_clean_oldpackages(mportInstance *mport)
+{
+ __block int error_code = MPORT_OK;
- dispatch_sync(mportTaskSerial, ^{
- int deleted = 0;
- struct dirent *de;
- DIR *d = opendir(MPORT_FETCH_STAGING_DIR);
+ dispatch_sync(mportTaskSerial, ^{
+ int deleted = 0;
+ struct dirent *de;
+ DIR *d = opendir(MPORT_FETCH_STAGING_DIR);
- if (d == NULL) {
- error_code = SET_ERRORX(MPORT_ERR_FATAL, "Couldn't open directory %s: %s", MPORT_FETCH_STAGING_DIR, strerror(errno));
- return;
- }
+ if (d == NULL) {
+ error_code = SET_ERRORX(MPORT_ERR_FATAL, "Couldn't open directory %s: %s", MPORT_FETCH_STAGING_DIR,
+ strerror(errno));
+ return;
+ }
- while ((de = readdir(d)) != NULL) {
- mportIndexEntry **indexEntry;
- char *path;
- if (strcmp(".", de->d_name) == 0 || strcmp("..", de->d_name) == 0)
- continue;
+ while ((de = readdir(d)) != NULL) {
+ mportIndexEntry **indexEntry;
+ char *path;
+ if (strcmp(".", de->d_name) == 0 || strcmp("..", de->d_name) == 0)
+ continue;
- if (mport_index_search(mport, &indexEntry, "bundlefile=%Q", de->d_name) != MPORT_OK) {
- continue;
- }
+ if (mport_index_search(mport, &indexEntry, "bundlefile=%Q", de->d_name) != MPORT_OK) {
+ continue;
+ }
- if (indexEntry == NULL || *indexEntry == NULL) {
- asprintf(&path, "%s/%s", MPORT_FETCH_STAGING_DIR, de->d_name);
- if (path != NULL) {
- if (unlink(path) < 0) {
- error_code = SET_ERRORX(MPORT_ERR_FATAL, "Could not delete file %s: %s", path, strerror(errno));
- mport_call_msg_cb(mport, "%s\n", mport_err_string());
- } else {
- deleted++;
- }
- free(path);
+ if (indexEntry == NULL || *indexEntry == NULL) {
+ asprintf(&path, "%s/%s", MPORT_FETCH_STAGING_DIR, de->d_name);
+ if (path != NULL) {
+ if (unlink(path) < 0) {
+ error_code = SET_ERRORX(MPORT_ERR_FATAL, "Could not delete file %s: %s",
+ path, strerror(errno));
+ mport_call_msg_cb(mport, "%s\n", mport_err_string());
+ } else {
+ deleted++;
+ }
+ free(path);
+ }
+ } else {
+ mport_index_entry_free_vec(indexEntry);
}
- } else {
- mport_index_entry_free_vec(indexEntry);
- }
- }
+ }
- closedir(d);
+ closedir(d);
- mport_call_msg_cb(mport, "Cleaned up %d packages.\n", deleted);
- });
+ mport_call_msg_cb(mport, "Cleaned up %d packages.\n", deleted);
+ });
return error_code;
}
Modified: stable/0.8/lib/libmport/info.c
===================================================================
--- stable/0.8/lib/libmport/info.c 2016-08-17 03:06:59 UTC (rev 7745)
+++ stable/0.8/lib/libmport/info.c 2016-08-20 22:37:21 UTC (rev 7746)
@@ -36,66 +36,68 @@
MPORT_PUBLIC_API char *
-mport_info(mportInstance *mport, const char *packageName) {
- mportIndexEntry **indexEntry;
- mportPackageMeta **packs;
- char *status, *origin;
- char *os_release;
- char *cpe;
- int locked = 0;
- char *info_text = NULL;
+mport_info(mportInstance *mport, const char *packageName)
+{
+ mportIndexEntry **indexEntry;
+ mportPackageMeta **packs;
+ char *status, *origin;
+ char *os_release;
+ char *cpe;
+ int locked = 0;
+ char *info_text = NULL;
- if (packageName == NULL) {
- SET_ERROR(MPORT_ERR_FATAL, "Package name not found.");
- return (NULL);
- }
+ if (packageName == NULL) {
+ SET_ERROR(MPORT_ERR_FATAL, "Package name not found.");
+ return (NULL);
+ }
- if (mport_index_lookup_pkgname(mport, packageName, &indexEntry) != MPORT_OK) {
- return (NULL);
- }
+ if (mport_index_lookup_pkgname(mport, packageName, &indexEntry) != MPORT_OK) {
+ return (NULL);
+ }
- if (indexEntry == NULL || *indexEntry == NULL) {
- SET_ERROR(MPORT_ERR_FATAL, "Could not resolve package.");
- return (NULL);
- }
+ if (indexEntry == NULL || *indexEntry == NULL) {
+ SET_ERROR(MPORT_ERR_FATAL, "Could not resolve package.");
+ return (NULL);
+ }
- if (mport_pkgmeta_search_master(mport, &packs, "pkg=%Q", packageName) != MPORT_OK) {
- return (NULL);
- }
+ if (mport_pkgmeta_search_master(mport, &packs, "pkg=%Q", packageName) != MPORT_OK) {
+ return (NULL);
+ }
- if (packs == NULL) {
- status = strdup("N/A");
- origin = strdup("");
- os_release = strdup("");
- cpe = strdup("");
- } else {
- status = (*packs)->version;
- origin = (*packs)->origin;
- os_release = (*packs)->os_release;
- cpe = (*packs)->cpe;
- locked = (*packs)->locked;
- }
+ if (packs == NULL) {
+ status = strdup("N/A");
+ origin = strdup("");
+ os_release = strdup("");
+ cpe = strdup("");
+ } else {
+ status = (*packs)->version;
+ origin = (*packs)->origin;
+ os_release = (*packs)->os_release;
+ cpe = (*packs)->cpe;
+ locked = (*packs)->locked;
+ }
- asprintf(&info_text, "%s\nlatest: %s\ninstalled: %s\nlicense: %s\norigin: %s\nos: %s\n\n%s\ncpe: %s\nlocked: %s\n",
- (*indexEntry)->pkgname,
- (*indexEntry)->version,
- status,
- (*indexEntry)->license,
- origin,
- os_release,
- (*indexEntry)->comment,
- cpe,
- locked ? "yes" : "no");
+ asprintf(&info_text,
+ "%s\nlatest: %s\ninstalled: %s\nlicense: %s\norigin: %s\nos: %s\n\n%s\ncpe: %s\nlocked: %s\n",
+ (*indexEntry)->pkgname,
+ (*indexEntry)->version,
+ status,
+ (*indexEntry)->license,
+ origin,
+ os_release,
+ (*indexEntry)->comment,
+ cpe,
+ locked ? "yes" : "no");
- if (packs == NULL) {
- free(status);
- free(origin);
- free(os_release);
- free(cpe);
- } else
- mport_pkgmeta_vec_free(packs);
+ if (packs == NULL) {
+ free(status);
+ free(origin);
+ free(os_release);
+ free(cpe);
+ } else
+ mport_pkgmeta_vec_free(packs);
- mport_index_entry_free_vec(indexEntry);
- return info_text;
+ mport_index_entry_free_vec(indexEntry);
+ return info_text;
}
\ No newline at end of file
Modified: stable/0.8/lib/libmport/install_primative.c
===================================================================
--- stable/0.8/lib/libmport/install_primative.c 2016-08-17 03:06:59 UTC (rev 7745)
+++ stable/0.8/lib/libmport/install_primative.c 2016-08-20 22:37:21 UTC (rev 7746)
@@ -34,51 +34,52 @@
#include <string.h>
MPORT_PUBLIC_API int
-mport_install_primative(mportInstance *mport, const char *filename, const char *prefix)
+mport_install_primative(mportInstance *mport, const char *filename, const char *prefix)
{
- mportBundleRead *bundle;
- mportPackageMeta **pkgs, *pkg;
- int i;
- bool error = false;
-
- if ((bundle = mport_bundle_read_new()) == NULL)
- RETURN_ERROR(MPORT_ERR_FATAL, "Out of memory.");
-
- if (mport_bundle_read_init(bundle, filename) != MPORT_OK)
- RETURN_CURRENT_ERROR;
+ mportBundleRead *bundle;
+ mportPackageMeta **pkgs, *pkg;
+ int i;
+ bool error = false;
- if (mport_bundle_read_prep_for_install(mport, bundle) != MPORT_OK)
- RETURN_CURRENT_ERROR;
-
- if (mport_pkgmeta_read_stub(mport, &pkgs) != MPORT_OK)
- RETURN_CURRENT_ERROR;
-
- for (i=0; *(pkgs + i) != NULL; i++) {
- pkg = pkgs[i];
-
- if (prefix != NULL) {
- /* override the default prefix with the given prefix */
- free(pkg->prefix);
- if ((pkg->prefix = strdup(prefix)) == NULL) /* all hope is lost! bail */
- RETURN_ERROR(MPORT_ERR_FATAL, "Out of memory.");
- }
+ if ((bundle = mport_bundle_read_new()) == NULL)
+ RETURN_ERROR(MPORT_ERR_FATAL, "Out of memory.");
- if ((mport_check_preconditions(mport, pkg, MPORT_PRECHECK_INSTALLED|MPORT_PRECHECK_DEPENDS|MPORT_PRECHECK_CONFLICTS) != MPORT_OK)
- ||
- (mport_bundle_read_install_pkg(mport, bundle, pkg) != MPORT_OK))
- {
- mport_call_msg_cb(mport, "Unable to install %s-%s: %s", pkg->name, pkg->version, mport_err_string());
- /* TODO: WHY WAS THIS HERE mport_set_err(MPORT_OK, NULL); */
- error = true;
- break; /* do not keep going if we have a package failure! */
- }
- }
+ if (mport_bundle_read_init(bundle, filename) != MPORT_OK)
+ RETURN_CURRENT_ERROR;
- if (mport_bundle_read_finish(mport, bundle) != MPORT_OK)
- RETURN_CURRENT_ERROR;
+ if (mport_bundle_read_prep_for_install(mport, bundle) != MPORT_OK)
+ RETURN_CURRENT_ERROR;
- if (error)
- return MPORT_ERR_FATAL;
-
- return MPORT_OK;
+ if (mport_pkgmeta_read_stub(mport, &pkgs) != MPORT_OK)
+ RETURN_CURRENT_ERROR;
+
+ for (i = 0; *(pkgs + i) != NULL; i++) {
+ pkg = pkgs[i];
+
+ if (prefix != NULL) {
+ /* override the default prefix with the given prefix */
+ free(pkg->prefix);
+ if ((pkg->prefix = strdup(prefix)) == NULL) /* all hope is lost! bail */
+ RETURN_ERROR(MPORT_ERR_FATAL, "Out of memory.");
+ }
+
+ if ((mport_check_preconditions(mport, pkg, MPORT_PRECHECK_INSTALLED | MPORT_PRECHECK_DEPENDS |
+ MPORT_PRECHECK_CONFLICTS) != MPORT_OK)
+ ||
+ (mport_bundle_read_install_pkg(mport, bundle, pkg) != MPORT_OK)) {
+ mport_call_msg_cb(mport, "Unable to install %s-%s: %s", pkg->name, pkg->version,
+ mport_err_string());
+ /* TODO: WHY WAS THIS HERE mport_set_err(MPORT_OK, NULL); */
+ error = true;
+ break; /* do not keep going if we have a package failure! */
+ }
+ }
+
+ if (mport_bundle_read_finish(mport, bundle) != MPORT_OK)
+ RETURN_CURRENT_ERROR;
+
+ if (error)
+ return MPORT_ERR_FATAL;
+
+ return MPORT_OK;
}
Modified: stable/0.8/lib/libmport/instance.c
===================================================================
--- stable/0.8/lib/libmport/instance.c 2016-08-17 03:06:59 UTC (rev 7745)
+++ stable/0.8/lib/libmport/instance.c 2016-08-20 22:37:21 UTC (rev 7746)
@@ -55,51 +55,50 @@
mport_instance_init(mportInstance *mport, const char *root) {
char dir[FILENAME_MAX];
- mport->flags = 0;
+ mport->flags = 0;
- if (root != NULL) {
- mport->root = strdup(root);
- } else {
- mport->root = strdup("");
- }
+ if (root != NULL) {
+ mport->root = strdup(root);
+ } else {
+ mport->root = strdup("");
+ }
- mport_init_queues();
+ mport_init_queues();
- (void) snprintf(dir, FILENAME_MAX, "%s/%s", mport->root, MPORT_INST_DIR);
+ (void) snprintf(dir, FILENAME_MAX, "%s/%s", mport->root, MPORT_INST_DIR);
- if (mport_mkdir(dir) != MPORT_OK) {
+ if (mport_mkdir(dir) != MPORT_OK) {
RETURN_CURRENT_ERROR;
}
- (void) snprintf(dir, FILENAME_MAX, "%s/%s", mport->root, MPORT_INST_INFRA_DIR);
+ (void) snprintf(dir, FILENAME_MAX, "%s/%s", mport->root, MPORT_INST_INFRA_DIR);
- if (mport_mkdir(dir) != MPORT_OK) {
+ if (mport_mkdir(dir) != MPORT_OK) {
RETURN_CURRENT_ERROR;
}
+ /* dir is a file here, just trying to save memory */
+ (void) snprintf(dir, FILENAME_MAX, "%s/%s", mport->root, MPORT_MASTER_DB_FILE);
+ if (sqlite3_open(dir, &(mport->db)) != 0) {
+ sqlite3_close(mport->db);
+ RETURN_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
+ }
- /* dir is a file here, just trying to save memory */
- (void) snprintf(dir, FILENAME_MAX, "%s/%s", mport->root, MPORT_MASTER_DB_FILE);
- if (sqlite3_open(dir, &(mport->db)) != 0) {
- sqlite3_close(mport->db);
- RETURN_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- }
+ if (sqlite3_create_function(mport->db, "mport_version_cmp", 2, SQLITE_ANY, NULL, &mport_version_cmp_sqlite,
+ NULL,
+ NULL) != SQLITE_OK) {
+ sqlite3_close(mport->db);
+ RETURN_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
+ }
- if (sqlite3_create_function(mport->db, "mport_version_cmp", 2, SQLITE_ANY, NULL, &mport_version_cmp_sqlite,
- NULL,
- NULL) != SQLITE_OK) {
- sqlite3_close(mport->db);
- RETURN_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- }
+ /* set the default UI callbacks */
+ mport->msg_cb = &mport_default_msg_cb;
+ mport->progress_init_cb = &mport_default_progress_init_cb;
+ mport->progress_step_cb = &mport_default_progress_step_cb;
+ mport->progress_free_cb = &mport_default_progress_free_cb;
+ mport->confirm_cb = &mport_default_confirm_cb;
- /* set the default UI callbacks */
- mport->msg_cb = &mport_default_msg_cb;
- mport->progress_init_cb = &mport_default_progress_init_cb;
- mport->progress_step_cb = &mport_default_progress_step_cb;
- mport->progress_free_cb = &mport_default_progress_free_cb;
- mport->confirm_cb = &mport_default_confirm_cb;
-
int db_version = mport_get_database_version(mport->db);
if (db_version < 1) {
/* new, create tables */
Modified: stable/0.8/lib/libmport/lock.c
===================================================================
--- stable/0.8/lib/libmport/lock.c 2016-08-17 03:06:59 UTC (rev 7745)
+++ stable/0.8/lib/libmport/lock.c 2016-08-20 22:37:21 UTC (rev 7746)
@@ -36,7 +36,8 @@
#include "mport_private.h"
MPORT_PUBLIC_API int
-mport_lock_lock(mportInstance *mport, mportPackageMeta *pkg) {
+mport_lock_lock(mportInstance *mport, mportPackageMeta *pkg)
+{
/* we are already locked, just return */
if (mport_lock_islocked(pkg) == MPORT_LOCKED) {
@@ -47,14 +48,15 @@
RETURN_CURRENT_ERROR;
}
- return (MPORT_OK);
+ return (MPORT_OK);
}
MPORT_PUBLIC_API int
-mport_lock_unlock(mportInstance *mport, mportPackageMeta *pkg) {
+mport_lock_unlock(mportInstance *mport, mportPackageMeta *pkg)
+{
if (mport_lock_islocked(pkg) == MPORT_LOCKED) {
if (mport_db_do(mport->db, "update packages set locked=0 where pkg=%Q", pkg->name) != MPORT_OK) {
- RETURN_CURRENT_ERROR;
+ RETURN_CURRENT_ERROR;
}
}
@@ -66,7 +68,8 @@
* MPORT_LOCKED is returned for an unknown package or a locked package as we can't do anything.
*/
MPORT_PUBLIC_API int
-mport_lock_islocked(mportPackageMeta *pkg) {
+mport_lock_islocked(mportPackageMeta *pkg)
+{
if (pkg == NULL)
return MPORT_LOCKED;
More information about the Midnightbsd-cvs
mailing list