[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