From laffer1 at midnightbsd.org  Sat May 25 13:39:55 2019
From: laffer1 at midnightbsd.org (laffer1 at midnightbsd.org)
Date: Sat, 25 May 2019 13:39:55 -0400 (EDT)
Subject: [Midnightbsd-cvs] src [12197] trunk/lib/libmport/mport.h: add
 additional flags for monitoring changes
Message-ID: <201905251739.x4PHdt4I065688@stargazer.midnightbsd.org>

Revision: 12197
          http://svnweb.midnightbsd.org/src/?rev=12197
Author:   laffer1
Date:     2019-05-25 13:39:54 -0400 (Sat, 25 May 2019)
Log Message:
-----------
add additional flags for monitoring  changes

Modified Paths:
--------------
    trunk/lib/libmport/mport.h

Modified: trunk/lib/libmport/mport.h
===================================================================
--- trunk/lib/libmport/mport.h	2019-05-25 17:38:01 UTC (rev 12196)
+++ trunk/lib/libmport/mport.h	2019-05-25 17:39:54 UTC (rev 12197)
@@ -36,6 +36,7 @@
 #include <sqlite3.h>
 #include <sys/queue.h>
 #include <stdio.h>
+#include <stdbool.h>
 
 #include "mport_dispatch.h"
 
@@ -165,6 +166,9 @@
   char *version;
   char *d_pkgname;
   char *d_version;
+  int level;
+  bool already_installed;
+  bool needs_upgrade;
 } mportDependsEntry;
 
 int mport_index_depends_list(mportInstance *, const char *, const char *, mportDependsEntry ***);


From laffer1 at midnightbsd.org  Sat May 25 13:40:21 2019
From: laffer1 at midnightbsd.org (laffer1 at midnightbsd.org)
Date: Sat, 25 May 2019 13:40:21 -0400 (EDT)
Subject: [Midnightbsd-cvs] src [12198]
 trunk/lib/libmport/install_primative.c: cleanup and check for null values
Message-ID: <201905251740.x4PHeLcU065757@stargazer.midnightbsd.org>

Revision: 12198
          http://svnweb.midnightbsd.org/src/?rev=12198
Author:   laffer1
Date:     2019-05-25 13:40:20 -0400 (Sat, 25 May 2019)
Log Message:
-----------
cleanup and check for null values

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

Modified: trunk/lib/libmport/install_primative.c
===================================================================
--- trunk/lib/libmport/install_primative.c	2019-05-25 17:39:54 UTC (rev 12197)
+++ trunk/lib/libmport/install_primative.c	2019-05-25 17:40:20 UTC (rev 12198)
@@ -59,8 +59,10 @@
 		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 */
+			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 |
@@ -67,9 +69,12 @@
 		                                           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); */
+			if (pkg->name != NULL && pkg->version != NULL)
+				mport_call_msg_cb(mport, "Unable to install %s-%s: %s", pkg->name, pkg->version,
+						  mport_err_string());
+			else
+				mport_call_msg_cb(mport, "Unknown error. State is invalid.");
+
 			error = true;
 			break; /* do not keep going if we have a package failure! */
 		}


From laffer1 at midnightbsd.org  Sat May 25 13:41:04 2019
From: laffer1 at midnightbsd.org (laffer1 at midnightbsd.org)
Date: Sat, 25 May 2019 13:41:04 -0400 (EDT)
Subject: [Midnightbsd-cvs] src [12199] trunk/lib/libmport/index.c: add stdint
Message-ID: <201905251741.x4PHf4rg065835@stargazer.midnightbsd.org>

Revision: 12199
          http://svnweb.midnightbsd.org/src/?rev=12199
Author:   laffer1
Date:     2019-05-25 13:41:03 -0400 (Sat, 25 May 2019)
Log Message:
-----------
add stdint

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

Modified: trunk/lib/libmport/index.c
===================================================================
--- trunk/lib/libmport/index.c	2019-05-25 17:40:20 UTC (rev 12198)
+++ trunk/lib/libmport/index.c	2019-05-25 17:41:03 UTC (rev 12199)
@@ -35,6 +35,7 @@
 #include <time.h>
 #include <string.h>
 #include <stdlib.h>
+#include <stdint.h>
 #include <errno.h>
 #include <stddef.h>
 


From laffer1 at midnightbsd.org  Sat May 25 13:42:07 2019
From: laffer1 at midnightbsd.org (laffer1 at midnightbsd.org)
Date: Sat, 25 May 2019 13:42:07 -0400 (EDT)
Subject: [Midnightbsd-cvs] src [12200] trunk/lib/libmport: rework install
 logic to try to use a recursive query in sqlite instead
Message-ID: <201905251742.x4PHg7wx065924@stargazer.midnightbsd.org>

Revision: 12200
          http://svnweb.midnightbsd.org/src/?rev=12200
Author:   laffer1
Date:     2019-05-25 13:42:06 -0400 (Sat, 25 May 2019)
Log Message:
-----------
rework install logic to try to use a recursive query in sqlite instead

Modified Paths:
--------------
    trunk/lib/libmport/index_depends.c
    trunk/lib/libmport/install.c

Modified: trunk/lib/libmport/index_depends.c
===================================================================
--- trunk/lib/libmport/index_depends.c	2019-05-25 17:41:03 UTC (rev 12199)
+++ trunk/lib/libmport/index_depends.c	2019-05-25 17:42:06 UTC (rev 12200)
@@ -56,25 +56,25 @@
 	MPORT_CHECK_FOR_INDEX(mport, "mport_index_depends_list()")
 
 	if (mport_db_prepare(mport->db, &stmt,
-	    "SELECT COUNT(*) FROM idx.depends WHERE pkg = %Q and version = %Q",
+	    "with RECURSIVE under_dep (parent, parent_ver, pkg, version, level) as ( values('?', '?',  %Q, %Q, 0) union all select depends.pkg as parent, depends.version as parent_ver, depends.d_pkg as pkg, depends.d_version as version, under_dep.level + 1 from depends JOIN under_dep on depends.pkg = under_dep.pkg) select count(*) FROM under_dep where level > 0;",
 	    pkgname, version) != MPORT_OK) {
 		sqlite3_finalize(stmt);
 		RETURN_CURRENT_ERROR;
 	}
- 
+
 	switch (sqlite3_step(stmt)) {
-	case SQLITE_ROW:
-		count = sqlite3_column_int(stmt, 0);
-		break;
-	case SQLITE_DONE:
-		ret = SET_ERROR(MPORT_ERR_FATAL,
-		    "No rows returned from a 'SELECT COUNT(*)' query.");
-		goto DONE;
-		break;
-	default:
-		ret = SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
-		goto DONE;
-		break;
+		case SQLITE_ROW:
+			count = sqlite3_column_int(stmt, 0);
+			break;
+		case SQLITE_DONE:
+			ret = SET_ERROR(MPORT_ERR_FATAL,
+					"No rows returned from a 'SELECT COUNT(*)' query.");
+			goto DONE;
+			break;
+		default:
+			ret = SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
+			goto DONE;
+			break;
 	}
   
 	sqlite3_finalize(stmt);
@@ -86,7 +86,8 @@
 		return MPORT_OK;
   
 	if (mport_db_prepare(mport->db, &stmt,
-	    "SELECT pkg, version, d_pkg, d_version FROM idx.depends WHERE pkg= %Q and version=%Q", pkgname, version) != MPORT_OK) {
+		 "with RECURSIVE under_dep (parent, parent_ver, pkg, version, level) as ( values('?', '?',  %Q, %Q, 0) union all select depends.pkg as parent, depends.version as parent_ver, depends.d_pkg as pkg, depends.d_version as version, under_dep.level + 1 from depends JOIN under_dep on depends.pkg = under_dep.pkg) select parent, parent_ver, pkg, version, level FROM under_dep where level > 0;"
+		, pkgname, version) != MPORT_OK) {
 		ret = mport_err_code();
 		goto DONE;
 	}
@@ -99,11 +100,16 @@
 				ret = MPORT_ERR_FATAL;
 				goto DONE;
 			}
-      
+
+			/* parent, parent_ver, pkg, version, level */
 			e[i]->pkgname    = strdup(sqlite3_column_text(stmt, 0));
 			e[i]->version    = strdup(sqlite3_column_text(stmt, 1));
 			e[i]->d_pkgname  = strdup(sqlite3_column_text(stmt, 2));
 			e[i]->d_version  = strdup(sqlite3_column_text(stmt, 3));
+			e[i]->level = sqlite3_column_int(stmt, 4);
+			/* default these to false */
+			e[i]->already_installed = false;
+			e[i]->needs_upgrade = false;
       
 			if (e[i]->pkgname == NULL ||
 			    e[i]->version == NULL ||

Modified: trunk/lib/libmport/install.c
===================================================================
--- trunk/lib/libmport/install.c	2019-05-25 17:41:03 UTC (rev 12199)
+++ trunk/lib/libmport/install.c	2019-05-25 17:42:06 UTC (rev 12200)
@@ -36,82 +36,82 @@
 MPORT_PUBLIC_API int
 mport_install(mportInstance *mport, const char *pkgname, const char *version, const char *prefix)
 {
-  mportIndexEntry **e;
-  char *filename;
-  int ret = MPORT_OK;
-  int e_loc = 0;
+	mportIndexEntry **e;
+	char *filename;
+	int ret = MPORT_OK;
+	int e_loc = 0;
 
-  MPORT_CHECK_FOR_INDEX(mport, "mport_install()");
-  
-  if (mport_index_lookup_pkgname(mport, pkgname, &e) != MPORT_OK)
-    RETURN_CURRENT_ERROR;
+	MPORT_CHECK_FOR_INDEX(mport, "mport_install()");
 
-  /* we don't support installing more than one top-level package at a time.
-   * Consider a situation like this:
-   *
-   * mport_install(mport, "p5-Class-DBI*");
-   *
-   * Say this matches p5-Class-DBI and p5-Class-DBI-AbstractSearch
-   * and say the order from the index puts p5-Class-DBI-AbstractSearch 
-   * first.
-   * 
-   * p5-Class-DBI-AbstractSearch is installed, and its depends installed.  
-   * However, p5-Class-DBI is a depend of p5-Class-DBI-AbstractSearch, so 
-   * when it comes time to install p5-Class-DBI, we can't - because it is
-   * already installed.
-   *
-   * If a user facing application wants this functionality, it would be
-   * easy to piece together with mport_index_lookup_pkgname(), a
-   * check for already installed packages, and mport_install().
-   */
+	if (mport_index_lookup_pkgname(mport, pkgname, &e) != MPORT_OK)
+		RETURN_CURRENT_ERROR;
 
-  if (e[1] != NULL) {
-    if (version != NULL) {
-        while (e[e_loc] != NULL) {
-          if (strcmp(e[e_loc]->version, version) == 0) {
-            break;
-          }
-          e_loc++;
-        }
-        if (e[e_loc] == NULL) {
-          mport_index_entry_free_vec(e);
-          RETURN_ERRORX(MPORT_ERR_FATAL, "Cound not resolve '%s-%s'.",
-            pkgname, version);
-        }
-    } else {
-      mport_index_entry_free_vec(e);
-      RETURN_ERRORX(MPORT_ERR_FATAL, "Could not resolve '%s' to a single package.", pkgname);
-    }
-  }
- 
-  asprintf(&filename, "%s/%s", MPORT_FETCH_STAGING_DIR, e[e_loc]->bundlefile);
-  if (filename == NULL) {
-    mport_index_entry_free_vec(e);
-    RETURN_ERROR(MPORT_ERR_FATAL, "Out of memory.");
-  }
+	/* we don't support installing more than one top-level package at a time.
+	 * Consider a situation like this:
+	 *
+	 * mport_install(mport, "p5-Class-DBI*");
+	 *
+	 * Say this matches p5-Class-DBI and p5-Class-DBI-AbstractSearch
+	 * and say the order from the index puts p5-Class-DBI-AbstractSearch
+	 * first.
+	 *
+	 * p5-Class-DBI-AbstractSearch is installed, and its depends installed.
+	 * However, p5-Class-DBI is a depend of p5-Class-DBI-AbstractSearch, so
+	 * when it comes time to install p5-Class-DBI, we can't - because it is
+	 * already installed.
+	 *
+	 * If a user facing application wants this functionality, it would be
+	 * easy to piece together with mport_index_lookup_pkgname(), a
+	 * check for already installed packages, and mport_install().
+	 */
 
-  if (!mport_file_exists(filename)) {
-    if (mport_fetch_bundle(mport, e[e_loc]->bundlefile) != MPORT_OK) {
-      free(filename);
-      mport_index_entry_free_vec(e);
-      RETURN_CURRENT_ERROR;
-    }
-  }
+	if (e[1] != NULL) {
+		if (version != NULL) {
+			while (e[e_loc] != NULL) {
+				if (strcmp(e[e_loc]->version, version) == 0) {
+					break;
+				}
+				e_loc++;
+			}
+			if (e[e_loc] == NULL) {
+				mport_index_entry_free_vec(e);
+				RETURN_ERRORX(MPORT_ERR_FATAL, "Could not resolve '%s-%s'.",
+					      pkgname, version);
+			}
+		} else {
+			mport_index_entry_free_vec(e);
+			RETURN_ERRORX(MPORT_ERR_FATAL, "Could not resolve '%s' to a single package.", pkgname);
+		}
+	}
 
-  if (mport_verify_hash(filename, e[e_loc]->hash) == 0) {
-    free(filename);
-    mport_index_entry_free_vec(e);
+	asprintf(&filename, "%s/%s", MPORT_FETCH_STAGING_DIR, e[e_loc]->bundlefile);
+	if (filename == NULL) {
+		mport_index_entry_free_vec(e);
+		RETURN_ERROR(MPORT_ERR_FATAL, "Out of memory.");
+	}
 
-    if (unlink(filename) == 0)
-      RETURN_ERROR(MPORT_ERR_FATAL, "Package failed hash verification and was removed.\n");
-    else
-      RETURN_ERROR(MPORT_ERR_FATAL, "Package failed hash verification, but could not be removed.\n");
-  }
- 
-  ret = mport_install_primative(mport, filename, prefix);
+	if (!mport_file_exists(filename)) {
+		if (mport_fetch_bundle(mport, e[e_loc]->bundlefile) != MPORT_OK) {
+			free(filename);
+			mport_index_entry_free_vec(e);
+			RETURN_CURRENT_ERROR;
+		}
+	}
 
-  free(filename);
-  mport_index_entry_free_vec(e);
-  
-  return ret;
+	if (mport_verify_hash(filename, e[e_loc]->hash) == 0) {
+		free(filename);
+		mport_index_entry_free_vec(e);
+
+		if (unlink(filename) == 0)
+			RETURN_ERROR(MPORT_ERR_FATAL, "Package failed hash verification and was removed.\n");
+		else
+			RETURN_ERROR(MPORT_ERR_FATAL, "Package failed hash verification, but could not be removed.\n");
+	}
+
+	ret = mport_install_primative(mport, filename, prefix);
+
+	free(filename);
+	mport_index_entry_free_vec(e);
+
+	return ret;
 }


From laffer1 at midnightbsd.org  Sun May 26 11:21:45 2019
From: laffer1 at midnightbsd.org (laffer1 at midnightbsd.org)
Date: Sun, 26 May 2019 11:21:45 -0400 (EDT)
Subject: [Midnightbsd-cvs] src [12201] trunk/usr.sbin/mport/mport.c: add pkg
 leaf
Message-ID: <201905261521.x4QFLjqc027923@stargazer.midnightbsd.org>

Revision: 12201
          http://svnweb.midnightbsd.org/src/?rev=12201
Author:   laffer1
Date:     2019-05-26 11:21:44 -0400 (Sun, 26 May 2019)
Log Message:
-----------
add pkg leaf

Modified Paths:
--------------
    trunk/usr.sbin/mport/mport.c

Modified: trunk/usr.sbin/mport/mport.c
===================================================================
--- trunk/usr.sbin/mport/mport.c	2019-05-25 17:42:06 UTC (rev 12200)
+++ trunk/usr.sbin/mport/mport.c	2019-05-26 15:21:44 UTC (rev 12201)
@@ -36,6 +36,7 @@
 #include <err.h>
 #include <dispatch/dispatch.h>
 #include <mport.h>
+#include "../libmport/mport.h"
 
 #define MPORT_TOOLS_PATH "/usr/libexec/"
 #define MPORT_LOCAL_PKG_PATH "/var/db/mport/downloads"
@@ -43,7 +44,7 @@
 static void usage(void);
 static void loadIndex(mportInstance *);
 static mportIndexEntry ** lookupIndex(mportInstance *, const char *);
-static int install_depends(mportInstance *, const char *, const char *);
+static int install_depends(mportInstance *, const char *, const char *, bool first);
 static int install(mportInstance *, const char *);
 static int cpeList(mportInstance *);
 static int configGet(mportInstance *, const char *);
@@ -244,26 +245,28 @@
 		__block int local_argc = argc;
 		__block char *const * local_argv = argv;
 		local_argv++;
-                if (local_argc > 2) {
-			int ch, qflag, oflag;
-			qflag = oflag = 0;
-		        while ((ch = getopt(local_argc, local_argv, "qo")) != -1) {
-				switch (ch) {
-			 		case 'q':
-					qflag = 1;
-					break;
-					case 'o':
-	                                oflag = 1;
-        	                        break;
+			if (local_argc > 2) {
+				int ch, qflag, oflag;
+				qflag = oflag = 0;
+				while ((ch = getopt(local_argc, local_argv, "qo")) != -1) {
+					switch (ch) {
+						case 'q':
+							qflag = 1;
+							break;
+						case 'o':
+							oflag = 1;
+							break;
+						default:
+							break;
+					}
 				}
+				local_argc -= optind;
+				local_argv += optind;
+
+				which(mport, *local_argv, qflag, oflag);
+			} else {
+				usage();
 			}
-			local_argc -= optind;
-			local_argv += optind;
-
-			which(mport, *local_argv, qflag, oflag);
-                } else {
-                        usage();
-                }
                 });
 	} else {
 		mport_instance_free(mport);
@@ -478,7 +481,7 @@
 
 /* recursive function */ 
 int
-install_depends(mportInstance *mport, const char *packageName, const char *version) {
+install_depends(mportInstance *mport, const char *packageName, const char *version, bool first) {
 	mportPackageMeta **packs;
 	mportDependsEntry **depends;
 
@@ -501,13 +504,15 @@
 	} else if (packs == NULL) {
 		/* Package is not installed */
 		while (*depends != NULL) {
-			install_depends(mport, (*depends)->d_pkgname, (*depends)->d_version);
+			install_depends(mport, (*depends)->d_pkgname, (*depends)->d_version, false);
 			depends++;
-        	}
+		}
+
 		if (mport_install(mport, packageName, version, NULL) != MPORT_OK) {
 			warnx("%s", mport_err_string());
 			return mport_err_code();
 		}
+
 		mport_index_depends_free_vec(depends);
 	} else {
 		/* already installed */
@@ -552,7 +557,7 @@
 		}
 	}
 
-	resultCode = install_depends(mport, (*indexEntry)->pkgname, (*indexEntry)->version);
+	resultCode = install_depends(mport, (*indexEntry)->pkgname, (*indexEntry)->version, true);
 
 	mport_index_entry_free_vec(indexEntry);
 


From laffer1 at midnightbsd.org  Sun May 26 11:29:12 2019
From: laffer1 at midnightbsd.org (laffer1 at midnightbsd.org)
Date: Sun, 26 May 2019 11:29:12 -0400 (EDT)
Subject: [Midnightbsd-cvs] src [12202] trunk/usr.sbin/mport/mport.c: pass
 first down
Message-ID: <201905261529.x4QFTCXX028269@stargazer.midnightbsd.org>

Revision: 12202
          http://svnweb.midnightbsd.org/src/?rev=12202
Author:   laffer1
Date:     2019-05-26 11:29:11 -0400 (Sun, 26 May 2019)
Log Message:
-----------
pass first down

Modified Paths:
--------------
    trunk/usr.sbin/mport/mport.c

Modified: trunk/usr.sbin/mport/mport.c
===================================================================
--- trunk/usr.sbin/mport/mport.c	2019-05-26 15:21:44 UTC (rev 12201)
+++ trunk/usr.sbin/mport/mport.c	2019-05-26 15:29:11 UTC (rev 12202)
@@ -504,7 +504,7 @@
 	} else if (packs == NULL) {
 		/* Package is not installed */
 		while (*depends != NULL) {
-			install_depends(mport, (*depends)->d_pkgname, (*depends)->d_version, false);
+			install_depends(mport, (*depends)->d_pkgname, (*depends)->d_version, first);
 			depends++;
 		}
 


From laffer1 at midnightbsd.org  Sun May 26 13:08:16 2019
From: laffer1 at midnightbsd.org (laffer1 at midnightbsd.org)
Date: Sun, 26 May 2019 13:08:16 -0400 (EDT)
Subject: [Midnightbsd-cvs] src [12203]
 trunk/lib/libmport/bundle_read_install_pkg.c: do not treat it as a pattern
Message-ID: <201905261708.x4QH8GAs033184@stargazer.midnightbsd.org>

Revision: 12203
          http://svnweb.midnightbsd.org/src/?rev=12203
Author:   laffer1
Date:     2019-05-26 13:08:16 -0400 (Sun, 26 May 2019)
Log Message:
-----------
do not treat it as a pattern

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

Modified: trunk/lib/libmport/bundle_read_install_pkg.c
===================================================================
--- trunk/lib/libmport/bundle_read_install_pkg.c	2019-05-26 15:29:11 UTC (rev 12202)
+++ trunk/lib/libmport/bundle_read_install_pkg.c	2019-05-26 17:08:16 UTC (rev 12203)
@@ -956,7 +956,7 @@
 	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) {
+	if (fread(buf, sizeof(char), (size_t) st.st_size, file) != (size_t) st.st_size) {
 		free(buf);
 		RETURN_ERRORX(MPORT_ERR_FATAL, "Read error: %s", strerror(errno));
 	}
@@ -964,7 +964,7 @@
 	buf[st.st_size] = '\0';
 
 	if (buf[0] != '\0')
-		mport_call_msg_cb(mport, buf);
+		mport_call_msg_cb(mport, "%s", buf);
 
 	free(buf);
 


From laffer1 at midnightbsd.org  Sun May 26 13:22:01 2019
From: laffer1 at midnightbsd.org (laffer1 at midnightbsd.org)
Date: Sun, 26 May 2019 13:22:01 -0400 (EDT)
Subject: [Midnightbsd-cvs] src [12204]
 stable/1.1/lib/libmport/bundle_read_install_pkg.c: fix some bugs with pkg
 message printing
Message-ID: <201905261722.x4QHM1k4034206@stargazer.midnightbsd.org>

Revision: 12204
          http://svnweb.midnightbsd.org/src/?rev=12204
Author:   laffer1
Date:     2019-05-26 13:22:01 -0400 (Sun, 26 May 2019)
Log Message:
-----------
fix some bugs with pkg message printing

Modified Paths:
--------------
    stable/1.1/lib/libmport/bundle_read_install_pkg.c

Modified: stable/1.1/lib/libmport/bundle_read_install_pkg.c
===================================================================
--- stable/1.1/lib/libmport/bundle_read_install_pkg.c	2019-05-26 17:08:16 UTC (rev 12203)
+++ stable/1.1/lib/libmport/bundle_read_install_pkg.c	2019-05-26 17:22:01 UTC (rev 12204)
@@ -952,14 +952,15 @@
 	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) {
+	if (fread(buf, sizeof(char), (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);
+	if (buf[0] != '\0')
+		mport_call_msg_cb(mport, "%s", buf);
 
 	free(buf);