[Midnightbsd-cvs] src: lib/libmport: Sync with devel version.

ctriv at midnightbsd.org ctriv at midnightbsd.org
Wed Dec 5 12:02:15 EST 2007


Log Message:
-----------
Sync with devel version.
Add ERRORX macros.
Fix a number of memory leaks.
Various refactorings.

Modified Files:
--------------
    src/lib/libmport:
        db.c (r1.1 -> r1.2)
        inst_init.c (r1.2 -> r1.3)
        install_pkg.c (r1.4 -> r1.5)
        mport.h (r1.7 -> r1.8)

-------------- next part --------------
Index: install_pkg.c
===================================================================
RCS file: /home/cvs/src/lib/libmport/install_pkg.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -L lib/libmport/install_pkg.c -L lib/libmport/install_pkg.c -u -r1.4 -r1.5
--- lib/libmport/install_pkg.c
+++ lib/libmport/install_pkg.c
@@ -126,6 +126,8 @@
       RETURN_CURRENT_ERROR;
   } 
   
+  // XXX mport_free_packagemeta_vec()
+  
   if (clean_up(tmpdir) != MPORT_OK)
     RETURN_CURRENT_ERROR;
   
@@ -169,7 +171,7 @@
   if (mport_db_do(db, "BEGIN TRANSACTION") != MPORT_OK) 
     goto ERROR;
 
-  /* Insert the package meta row into the packages table  - XXX Does not honor pack->prefix! */  
+  /* Insert the package meta row into the packages table */  
   if ((ret = mport_db_do(db, "INSERT INTO packages (pkg, version, origin, prefix, lang, options) VALUES (%Q,%Q,%Q,%Q,%Q,%Q)", pack->name, pack->version, pack->origin, pack->prefix, pack->lang, pack->options)) != MPORT_OK)
     goto ERROR;
   /* Insert the assets into the master table */
@@ -219,7 +221,7 @@
         /* we only look for fatal, because EOF is only an error if we come
         back around. */
         if (archive_read_next_header(a, &entry) == ARCHIVE_FATAL) {
-          mport_set_err(MPORT_ERR_ARCHIVE, archive_error_string(a));
+          ret = SET_ERROR(MPORT_ERR_ARCHIVE, archive_error_string(a));
           goto ERROR;
         }
         break;
@@ -406,7 +408,7 @@
   
   if (mport_file_exists(file)) {
     if ((ret = mport_xsystem("%s -U -f %s -d -e -p %s >/dev/null", MPORT_MTREE_BIN, file, pack->prefix)) != 0) 
-      return mport_set_errx(MPORT_ERR_SYSCALL_FAILED, "%s returned non-zero: %i", MPORT_MTREE_BIN, ret);
+      RETURN_ERRORX(MPORT_ERR_SYSCALL_FAILED, "%s returned non-zero: %i", MPORT_MTREE_BIN, ret);
   }
   
   return MPORT_OK;
@@ -418,10 +420,10 @@
   char file[FILENAME_MAX];
   int ret;
   
-  snprintf(file, FILENAME_MAX, "%s/%s/%s-%s/%s", tmpdir, MPORT_STUB_INFRA_DIR, pack->name, pack->version, MPORT_INSTALL_FILE);    
+  (void)snprintf(file, FILENAME_MAX, "%s/%s/%s-%s/%s", tmpdir, MPORT_STUB_INFRA_DIR, pack->name, pack->version, MPORT_INSTALL_FILE);    
   if (mport_file_exists(file)) {
     if ((ret = mport_xsystem("PKG_PREFIX=%s %s %s %s", pack->prefix, MPORT_SH_BIN, file, mode)) != 0)
-      return mport_set_errx(MPORT_ERR_SYSCALL_FAILED, "%s %s returned non-zero: %i" MPORT_INSTALL_FILE, mode, ret);
+      RETURN_ERRORX(MPORT_ERR_SYSCALL_FAILED, "%s %s returned non-zero: %i" MPORT_INSTALL_FILE, mode, ret);
   }
   
   return MPORT_OK;
Index: inst_init.c
===================================================================
RCS file: /home/cvs/src/lib/libmport/inst_init.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -L lib/libmport/inst_init.c -L lib/libmport/inst_init.c -u -r1.2 -r1.3
--- lib/libmport/inst_init.c
+++ lib/libmport/inst_init.c
@@ -55,11 +55,9 @@
   
 static int create_master_db(sqlite3 **db) 
 {
-  if (sqlite3_open(MPORT_MASTER_DB_FILE, db) != 0) {
-    sqlite3_close(*db);
-    RETURN_ERROR(MPORT_ERR_SQLITE, sqlite3_errmsg(*db));
-  }
-  
+  if (mport_db_open_master(db) != MPORT_OK)
+    RETURN_CURRENT_ERROR;  
+
   /* create tables */
   return mport_generate_master_schema(*db);
 }
Index: mport.h
===================================================================
RCS file: /home/cvs/src/lib/libmport/mport.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -L lib/libmport/mport.h -L lib/libmport/mport.h -u -r1.7 -r1.8
--- lib/libmport/mport.h
+++ lib/libmport/mport.h
@@ -107,6 +107,7 @@
 int mport_generate_stub_schema(sqlite3 *);
 
 /* Various database convience functions */
+int mport_db_open_master(sqlite3 **);
 int mport_attach_stub_db(sqlite3 *, const char *);
 int mport_get_meta_from_stub(sqlite3 *, mportPackageMeta ***);
 int mport_get_meta_from_master(sqlite3 *, mportPackageMeta**, const char *);
@@ -141,11 +142,13 @@
 #define MPORT_ERR_CONFLICTS		10
 #define MPORT_ERR_MISSING_DEPEND	11
 #define MPORT_ERR_MALFORMED_VERSION	12
-
+#define MPORT_ERR_NO_SUCH_PKG		13
 
 #define RETURN_CURRENT_ERROR return mport_err_code()
 #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))
+#define SET_ERROR(code, msg) mport_set_errx((code), "Error at %s:(%d): %s", __FILE__, __LINE__, (msg))
+#define RETURN_ERRORX(code, fmt, ...) return mport_set_errx((code), "Error at %s:(%d): " fmt, __FILE__, __LINE__, __VA_ARGS__)
+#define SET_ERRORX(code, fmt, ...) mport_set_errx((code), "Error at %s:(%d): " fmt, __FILE__, __LINE__, __VA_ARGS__)
 
 
 /* Utils */
Index: db.c
===================================================================
RCS file: /home/cvs/src/lib/libmport/db.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -L lib/libmport/db.c -L lib/libmport/db.c -u -r1.1 -r1.2
--- lib/libmport/db.c
+++ lib/libmport/db.c
@@ -41,6 +41,25 @@
 static int populate_meta_from_stmt(mportPackageMeta *, sqlite3 *, sqlite3_stmt *);
 
 
+/* mport_db_open_master(sqlite3 **)
+ * 
+ * Open the master database file, or create the file if it doesn't exist.
+ * Note that this function will not create the schema for you, if you need
+ * to create the schema use mport_inst_init() instead.
+ */
+int mport_db_open_master(sqlite3 **db)
+{
+  if (sqlite3_open(MPORT_MASTER_DB_FILE, db) != 0) {
+    sqlite3_close(*db);
+    RETURN_ERROR(MPORT_ERR_SQLITE, sqlite3_errmsg(*db));
+  }
+  
+  return MPORT_OK;
+}
+
+
+
+
 /* mport_db_do(sqlite3 *db, const char *sql, ...)
  * 
  * A wrapper for doing executing a single sql query.  Takes a sqlite3 struct
@@ -185,7 +204,8 @@
 int mport_get_meta_from_master(sqlite3 *db, mportPackageMeta **pack, const char *name)
 {
   sqlite3_stmt *stmt;
-
+  int ret;
+  
   if (mport_db_prepare(db, &stmt, "SELECT pkg, version, lang, prefix FROM packages WHERE pkg=%Q", name) != MPORT_OK)
     RETURN_CURRENT_ERROR;
   
@@ -194,7 +214,10 @@
       *pack = mport_new_packagemeta();
       if (*pack == NULL)
         return MPORT_ERR_NO_MEM;
-      return populate_meta_from_stmt(*pack, db, stmt);
+      
+      ret = populate_meta_from_stmt(*pack, db, stmt);
+      sqlite3_finalize(stmt);
+      return ret;
       break;
     case SQLITE_DONE:
       *pack = NULL;


More information about the Midnightbsd-cvs mailing list