[Midnightbsd-cvs] src [6617] trunk/lib/libmport: implement os version check function as part of the private api
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Mon Mar 17 23:05:56 EDT 2014
Revision: 6617
http://svnweb.midnightbsd.org/src/?rev=6617
Author: laffer1
Date: 2014-03-17 23:05:55 -0400 (Mon, 17 Mar 2014)
Log Message:
-----------
implement os version check function as part of the private api
Modified Paths:
--------------
trunk/lib/libmport/check_preconditions.c
trunk/lib/libmport/mport_private.h
Modified: trunk/lib/libmport/check_preconditions.c
===================================================================
--- trunk/lib/libmport/check_preconditions.c 2014-03-16 21:28:10 UTC (rev 6616)
+++ trunk/lib/libmport/check_preconditions.c 2014-03-18 03:05:55 UTC (rev 6617)
@@ -38,8 +38,8 @@
static int check_conflicts(sqlite3 *, mportPackageMeta *);
static int check_depends(mportInstance *mport, mportPackageMeta *);
static int check_if_older_installed(mportInstance *, mportPackageMeta *);
+static int check_if_older_os(mportInstance *, mportPackageMeta *);
-
/* Run the checks requested by the flags given.
*
* Flags:
@@ -47,6 +47,7 @@
* MPORT_PRECHECK_UPGRADABLE -- Fail if an older version is not installed
* MPORT_PRECHECK_CONFLICTS -- Fail if the package has a conflict
* MPORT_PRECHECK_DEPENDS -- Fail if the the depends are no resolved
+ * MPORT_PRECHECK_OS -- Fail if the os version of the installed is older
*
* The checks are run in the order listed above. The first failure
* encountered is the one reported.
@@ -55,7 +56,7 @@
* connected.
*/
-int mport_check_preconditions(mportInstance *mport, mportPackageMeta *pack, int flags)
+int mport_check_preconditions(mportInstance *mport, mportPackageMeta *pack, long flags)
{
if (flags & MPORT_PRECHECK_INSTALLED && check_if_installed(mport->db, pack) != MPORT_OK)
RETURN_CURRENT_ERROR;
@@ -65,6 +66,8 @@
RETURN_CURRENT_ERROR;
if (flags & MPORT_PRECHECK_DEPENDS && check_depends(mport, pack) != MPORT_OK)
RETURN_CURRENT_ERROR;
+ if (flags & MPORT_PRECHECK_OS && check_if_older_os(mport, pack) != MPORT_OK)
+ RETURN_CURRENT_ERROR;
return MPORT_OK;
}
@@ -288,3 +291,32 @@
sqlite3_finalize(stmt);
return ret;
}
+
+static int
+check_if_older_os(mportInstance *mport, mportPackageMeta *pkg)
+{
+ sqlite3_stmt *stmt;
+ int ret;
+ const char *os_release;
+
+ os_release = mport_get_osrelease();
+ if (mport_db_prepare(mport->db, &stmt, "SELECT os_release FROM packages WHERE pkg=%Q and mport_version_cmp(os_release, %Q) < 0", pkg->name, os_release) != MPORT_OK) {
+ sqlite3_finalize(stmt);
+ RETURN_CURRENT_ERROR;
+ }
+
+ switch (sqlite3_step(stmt)) {
+ case SQLITE_ROW:
+ ret = MPORT_OK;
+ break;
+ case SQLITE_DONE:
+ ret = SET_ERRORX(MPORT_ERR_FATAL, "No older os release version of %s installed", pkg->name);
+ break;
+ default:
+ ret = SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
+ break;
+ }
+
+ sqlite3_finalize(stmt);
+ return ret;
+}
Modified: trunk/lib/libmport/mport_private.h
===================================================================
--- trunk/lib/libmport/mport_private.h 2014-03-16 21:28:10 UTC (rev 6616)
+++ trunk/lib/libmport/mport_private.h 2014-03-18 03:05:55 UTC (rev 6617)
@@ -55,7 +55,8 @@
#define MPORT_PRECHECK_DEPENDS 2
#define MPORT_PRECHECK_CONFLICTS 4
#define MPORT_PRECHECK_UPGRADEABLE 8
-int mport_check_preconditions(mportInstance *, mportPackageMeta *, int);
+#define MPORT_PRECHECK_OS 16
+int mport_check_preconditions(mportInstance *, mportPackageMeta *, long);
/* schema */
int mport_generate_master_schema(sqlite3 *);
More information about the Midnightbsd-cvs
mailing list