You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pn...@apache.org on 2015/11/17 12:57:29 UTC

[12/38] celix git commit: CELIX-288: Fix in finding highest bundle archive version

CELIX-288: Fix in finding highest bundle archive version


Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/90b92ffd
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/90b92ffd
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/90b92ffd

Branch: refs/heads/develop
Commit: 90b92ffd0d923aca6edb8bf4577261b7fa5b478b
Parents: 1836ed4
Author: Pepijn Noltes <pe...@gmail.com>
Authored: Thu Nov 12 17:38:16 2015 +0100
Committer: Pepijn Noltes <pe...@gmail.com>
Committed: Thu Nov 12 17:40:27 2015 +0100

----------------------------------------------------------------------
 framework/private/src/bundle_archive.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/celix/blob/90b92ffd/framework/private/src/bundle_archive.c
----------------------------------------------------------------------
diff --git a/framework/private/src/bundle_archive.c b/framework/private/src/bundle_archive.c
index f7add7e..6df7270 100644
--- a/framework/private/src/bundle_archive.c
+++ b/framework/private/src/bundle_archive.c
@@ -189,10 +189,11 @@ celix_status_t bundleArchive_recreate(char * archiveRoot, bundle_archive_pt *bun
 		} else {
 
             long idx = 0;
+            long highestId = -1;
             char *location = NULL;
 
 			struct dirent dent;
-			struct dirent *result;
+			struct dirent *result = NULL;
             struct stat st;
 			int rc;
 
@@ -203,15 +204,15 @@ celix_status_t bundleArchive_recreate(char * archiveRoot, bundle_archive_pt *bun
                 stat(subdir, &st);
 				if (S_ISDIR(st.st_mode) && (strncmp(dent.d_name, "version", 7) == 0)) {
 					sscanf(dent.d_name, "version%*d.%ld", &idx);
-				} else {
-                    status = CELIX_FILE_IO_EXCEPTION;
-                    break;
-                }
+                    if (idx > highestId) {
+                        highestId = idx;
+                    }
+				}
 				rc = readdir_r(archive->archiveRootDir, &dent, &result);
 			}
 
             status = CELIX_DO_IF(status, bundleArchive_getRevisionLocation(archive, 0, &location));
-            status = CELIX_DO_IF(status, bundleArchive_reviseInternal(archive, true, idx, location, NULL));
+            status = CELIX_DO_IF(status, bundleArchive_reviseInternal(archive, true, highestId, location, NULL));
             if (location) {
                 free(location);
             }
@@ -668,7 +669,10 @@ static celix_status_t bundleArchive_initialize(bundle_archive_pt archive) {
 	celix_status_t status = CELIX_SUCCESS;
 
 	if (archive->archiveRootDir == NULL) {
-	    if (mkdir(archive->archiveRoot, S_IRWXU) != 0) {
+        int err = mkdir(archive->archiveRoot, S_IRWXU) ;
+	    if (err != 0) {
+            char *errmsg = strerror(errno);
+            fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "Error mkdir: %s\n", errmsg);
 			status = CELIX_FILE_IO_EXCEPTION;
 		} else {
 		    archive->archiveRootDir = opendir(archive->archiveRoot);