[Midnightbsd-cvs] src [7063] trunk/lib/libmport/delete_primative.c: add support for stopping a service if it exists automatically!

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Sun Jun 21 14:48:45 EDT 2015


Revision: 7063
          http://svnweb.midnightbsd.org/src/?rev=7063
Author:   laffer1
Date:     2015-06-21 14:48:44 -0400 (Sun, 21 Jun 2015)
Log Message:
-----------
add support for stopping a service if it exists automatically!

Modified Paths:
--------------
    trunk/lib/libmport/delete_primative.c

Modified: trunk/lib/libmport/delete_primative.c
===================================================================
--- trunk/lib/libmport/delete_primative.c	2015-06-20 23:40:02 UTC (rev 7062)
+++ trunk/lib/libmport/delete_primative.c	2015-06-21 18:48:44 UTC (rev 7063)
@@ -1,4 +1,5 @@
 /*-
+ * Copyright (c) 2015 Lucas Holt
  * Copyright (c) 2007-2009 Chris Reinhardt
  * All rights reserved.
  *
@@ -34,6 +35,7 @@
 #include <sqlite3.h>
 #include <md5.h>
 #include <stdlib.h>
+#include <libgen.h>
 #include "mport.h"
 #include "mport_private.h"
 
@@ -49,7 +51,7 @@
   sqlite3_stmt *stmt;
   int ret, current, total;
   mportAssetListEntryType type;
-  const char *data, *checksum, *cwd;
+  const char *data, *checksum, *cwd, *service, *rc_script;
   struct stat st;
   char md5[33];
   
@@ -58,6 +60,28 @@
       RETURN_CURRENT_ERROR;
   }
 
+  mport_call_progress_init_cb(mport, "Deleteing %s-%s", pack->name, pack->version);
+
+  /* stop any services that might exist; this replaces @stopdaemon */
+  if (mport_db_prepare(mport->db, &stmt, "select * from assets where data like '/usr/local/etc/rc.d/%%' and type=%i and pkg=%Q", ASSET_FILE, pack->name) != MPORT_OK)
+    RETURN_CURRENT_ERROR;
+
+while (1) {
+    ret = sqlite3_step(stmt);
+    if (ret != SQLITE_ROW) {
+        break;
+    }
+
+    rc_script = sqlite3_column_text(stmt, 0);
+    if (rc_script == NULL)
+        continue;
+    service = basename(rc_script);
+    if (mport_xsystem(mport, "/usr/sbin/service %s onestop", 
+        service) != 0) {
+        mport_call_msg_cb(mport, "Unable to stop service %s\n", service);
+    }
+  }
+
   /* get the file count for the progress meter */
   if (mport_db_prepare(mport->db, &stmt, "SELECT COUNT(*) FROM assets WHERE (type=%i or type=%i) AND pkg=%Q", ASSET_FILE, ASSET_SAMPLE, pack->name) != MPORT_OK)
     RETURN_CURRENT_ERROR;
@@ -64,6 +88,7 @@
 
   switch (sqlite3_step(stmt)) {
     case SQLITE_ROW:
+		
       total   = sqlite3_column_int(stmt, 0) + 1;
       current = 0;
       sqlite3_finalize(stmt);
@@ -79,8 +104,6 @@
     RETURN_CURRENT_ERROR;
   }
   
-  mport_call_progress_init_cb(mport, "Deleteing %s-%s", pack->name, pack->version);
-
   if (mport_db_do(mport->db, "UPDATE packages SET status='dirty' WHERE pkg=%Q", pack->name) != MPORT_OK)
     RETURN_CURRENT_ERROR;
 



More information about the Midnightbsd-cvs mailing list