You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by ab...@apache.org on 2013/11/19 08:40:02 UTC

svn commit: r1543333 [1/2] - in /incubator/celix/trunk: framework/ framework/private/mock/ framework/private/src/ framework/public/include/ launcher/private/src/

Author: abroekhuis
Date: Tue Nov 19 07:40:01 2013
New Revision: 1543333

URL: http://svn.apache.org/r1543333
Log:
CELIX-87: Updated framework to improve logging

Modified:
    incubator/celix/trunk/framework/CMakeLists.txt
    incubator/celix/trunk/framework/private/mock/framework_mock.c
    incubator/celix/trunk/framework/private/src/attribute.c
    incubator/celix/trunk/framework/private/src/bundle_archive.c
    incubator/celix/trunk/framework/private/src/celix_log.c
    incubator/celix/trunk/framework/private/src/framework.c
    incubator/celix/trunk/framework/public/include/celix_log.h
    incubator/celix/trunk/launcher/private/src/launcher.c

Modified: incubator/celix/trunk/framework/CMakeLists.txt
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/CMakeLists.txt?rev=1543333&r1=1543332&r2=1543333&view=diff
==============================================================================
--- incubator/celix/trunk/framework/CMakeLists.txt (original)
+++ incubator/celix/trunk/framework/CMakeLists.txt Tue Nov 19 07:40:01 2013
@@ -196,6 +196,8 @@ if (FRAMEWORK) 
 			private/mock/bundle_cache_mock.c
 			private/mock/manifest_mock.c
 			private/src/utils.c
+			private/src/celix_errorcodes.c
+			private/src/celix_log.c
 			private/src/framework.c)
 		target_link_libraries(framework_test ${APR_LIBRARY} ${APRUTIL_LIBRARY} ${CPPUTEST_LIBRARY} ${CPPUTEST_EXT_LIBRARY} celix_utils)
 		
@@ -246,12 +248,16 @@ if (FRAMEWORK) 
 		add_executable(bundle_archive_test 
 			private/test/bundle_archive_test.cpp
 			private/mock/bundle_revision_mock.c
-			private/src/bundle_archive.c)
+			private/src/bundle_archive.c
+			private/src/celix_errorcodes.c
+            private/src/celix_log.c)
 		target_link_libraries(bundle_archive_test ${APR_LIBRARY} ${CPPUTEST_LIBRARY} ${CPPUTEST_EXT_LIBRARY} celix_utils)
 		
 		add_executable(attribute_test 
 			private/test/attribute_test.cpp
-			private/src/attribute.c)
+			private/src/attribute.c
+			private/src/celix_errorcodes.c
+            private/src/celix_log.c)
 		target_link_libraries(attribute_test ${APR_LIBRARY} ${CPPUTEST_LIBRARY} ${CPPUTEST_EXT_LIBRARY} celix_utils)
 	    
 	    ADD_TARGET_FOR_TEST(version_test)

Modified: incubator/celix/trunk/framework/private/mock/framework_mock.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/mock/framework_mock.c?rev=1543333&r1=1543332&r2=1543333&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/mock/framework_mock.c (original)
+++ incubator/celix/trunk/framework/private/mock/framework_mock.c Tue Nov 19 07:40:01 2013
@@ -209,6 +209,21 @@ celix_status_t fw_removeBundleListener(f
 		return mock_c()->returnValue().value.intValue;
 }
 
+celix_status_t fw_addFrameworkListener(framework_pt framework, bundle_pt bundle, framework_listener_pt listener) {
+    mock_c()->actualCall("fw_addframeworkListener")
+            ->withPointerParameters("framework", framework)
+            ->withPointerParameters("bundle", bundle)
+            ->withPointerParameters("listener", listener);
+    return mock_c()->returnValue().value.intValue;
+}
+
+celix_status_t fw_removeFrameworkListener(framework_pt framework, bundle_pt bundle, framework_listener_pt listener) {
+    mock_c()->actualCall("fw_removeframeworkListener")
+            ->withPointerParameters("framework", framework)
+            ->withPointerParameters("bundle", bundle)
+            ->withPointerParameters("listener", listener);
+        return mock_c()->returnValue().value.intValue;
+}
 
 void fw_serviceChanged(framework_pt framework, service_event_type_e eventType, service_registration_pt registration, properties_pt oldprops) {
 	mock_c()->actualCall("fw_serviceChanged");

Modified: incubator/celix/trunk/framework/private/src/attribute.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/attribute.c?rev=1543333&r1=1543332&r2=1543333&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/attribute.c (original)
+++ incubator/celix/trunk/framework/private/src/attribute.c Tue Nov 19 07:40:01 2013
@@ -27,12 +27,15 @@
 #include <stdio.h>
 
 #include "attribute_private.h"
+#include "celix_log.h"
 
 celix_status_t attribute_create(apr_pool_t *memory_pool, char * key, char * value, attribute_pt *attribute) {
 	celix_status_t status = CELIX_SUCCESS;
+	char *error = NULL;
 
 	if (key == NULL || value == NULL || memory_pool == NULL || *attribute != NULL) {
 		status = CELIX_ILLEGAL_ARGUMENT;
+	    error = "Missing required arguments and/or values";
 	} else {
 		attribute_pt attr = apr_palloc(memory_pool, sizeof(*attr));
 		if (!attr) {
@@ -45,6 +48,14 @@ celix_status_t attribute_create(apr_pool
 		}
 	}
 
+	if (status != CELIX_SUCCESS) {
+        if (error != NULL) {
+            fw_logCode(FW_LOG_ERROR, status, "Could not create attribute: [key=%s;value=%s]; cause: %s", key, value, error);
+        } else {
+            fw_logCode(FW_LOG_ERROR, status, "Could not create attribute: [key=%s;value=%s]", key, value);
+        }
+	}
+
 	return status;
 }
 

Modified: incubator/celix/trunk/framework/private/src/bundle_archive.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/bundle_archive.c?rev=1543333&r1=1543332&r2=1543333&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/bundle_archive.c (original)
+++ incubator/celix/trunk/framework/private/src/bundle_archive.c Tue Nov 19 07:40:01 2013
@@ -34,6 +34,7 @@
 #include "bundle_archive.h"
 #include "bundle_revision.h"
 #include "linked_list_iterator.h"
+#include "celix_log.h"
 
 
 struct bundleArchive {
@@ -66,151 +67,166 @@ static celix_status_t bundleArchive_read
 static celix_status_t bundleArchive_writeLastModified(bundle_archive_pt archive);
 
 celix_status_t bundleArchive_createSystemBundleArchive(apr_pool_t *mp, bundle_archive_pt *bundle_archive) {
-    celix_status_t status;
+    celix_status_t status = CELIX_SUCCESS;
+    char *error = NULL;
 	bundle_archive_pt archive;
 	apr_pool_t *revisions_pool;
 
 	if (mp == NULL || *bundle_archive != NULL) {
 	    status = CELIX_ILLEGAL_ARGUMENT;
+	    error = "Missing required arguments and/or incorrect values";
 	} else {
         archive = (bundle_archive_pt) apr_palloc(mp, sizeof(*archive));
         if (archive == NULL) {
             status = CELIX_ENOMEM;
         } else {
         	apr_pool_pre_cleanup_register(mp, archive, bundleArchive_destroy);
-            if (apr_pool_create(&revisions_pool, mp) == APR_SUCCESS) {
-                if (linkedList_create(revisions_pool, &archive->revisions) == CELIX_SUCCESS) {
-                    archive->id = 0l;
-                    archive->location = "System Bundle";
-                    archive->mp = mp;
-                    archive->archiveRoot = NULL;
-                    archive->archiveRootDir = NULL;
-                    archive->refreshCount = -1;
-                    archive->persistentState = BUNDLE_UNKNOWN;
-                    time(&archive->lastModified);
+        	status = CELIX_DO_IF(status, apr_pool_create(&revisions_pool, mp));
+        	status = CELIX_DO_IF(status, linkedList_create(revisions_pool, &archive->revisions));
+        	if (status == CELIX_SUCCESS) {
+                archive->id = 0l;
+                archive->location = "System Bundle";
+                archive->mp = mp;
+                archive->archiveRoot = NULL;
+                archive->archiveRootDir = NULL;
+                archive->refreshCount = -1;
+                archive->persistentState = BUNDLE_UNKNOWN;
+                time(&archive->lastModified);
 
-                    *bundle_archive = archive;
-                    status = CELIX_SUCCESS;
-                } else {
-                    status = CELIX_ENOMEM;
-                    apr_pool_destroy(revisions_pool);
-                }
+                *bundle_archive = archive;
             } else {
-                status = CELIX_ENOMEM;
+                apr_pool_destroy(revisions_pool);
             }
         }
 	}
 
+	if (status != CELIX_SUCCESS) {
+        if (error != NULL) {
+            fw_logCode(FW_LOG_ERROR, status, "Could not create archive; cause: %s", error);
+        } else {
+            fw_logCode(FW_LOG_ERROR, status, "Could not create archive");
+        }
+    }
+
     return status;
 }
 
 celix_status_t bundleArchive_create(char * archiveRoot, long id, char * location, char *inputFile, apr_pool_t *mp, bundle_archive_pt *bundle_archive) {
     celix_status_t status = CELIX_SUCCESS;
+    char *error = NULL;
     apr_pool_t *revisions_pool;
     bundle_archive_pt archive;
 
     if (*bundle_archive != NULL) {
     	status = CELIX_ILLEGAL_ARGUMENT;
+    	error = "bundle_archive_pt must be NULL";
     } else {
 		archive = (bundle_archive_pt) apr_pcalloc(mp, sizeof(*archive));
-		if (archive != NULL) {
+		if (archive == NULL) {
+		    status = CELIX_ENOMEM;
+		} else {
 			apr_pool_pre_cleanup_register(mp, archive, bundleArchive_destroy);
-			if (apr_pool_create(&revisions_pool, mp) == APR_SUCCESS) {
-				if (linkedList_create(revisions_pool, &archive->revisions) == CELIX_SUCCESS) {
-					archive->id = id;
-					archive->location = location;
-					archive->archiveRootDir = NULL;
-					archive->archiveRoot = archiveRoot;
-					archive->refreshCount = -1;
-					time(&archive->lastModified);
+			status = CELIX_DO_IF(status, apr_pool_create(&revisions_pool, mp));
+			status = CELIX_DO_IF(status, linkedList_create(revisions_pool, &archive->revisions));
+			if (status == CELIX_SUCCESS) {
+                archive->id = id;
+                archive->location = location;
+                archive->archiveRootDir = NULL;
+                archive->archiveRoot = archiveRoot;
+                archive->refreshCount = -1;
+                time(&archive->lastModified);
 
-					archive->mp = mp;
+                archive->mp = mp;
 
-					bundleArchive_initialize(archive);
+                bundleArchive_initialize(archive);
 
-					bundleArchive_revise(archive, location, inputFile);
+                bundleArchive_revise(archive, location, inputFile);
 
-					*bundle_archive = archive;
-				} else {
-					apr_pool_destroy(revisions_pool);
-					status = CELIX_ENOMEM;
-				}
+                *bundle_archive = archive;
+            } else {
+                apr_pool_destroy(revisions_pool);
 			}
-		} else {
-			status = CELIX_ENOMEM;
-
 		}
     }
 
+    if (status != CELIX_SUCCESS) {
+        if (error != NULL) {
+            fw_logCode(FW_LOG_ERROR, status, "Could not create archive; cause: %s", error);
+        } else {
+            fw_logCode(FW_LOG_ERROR, status, "Could not create archive");
+        }
+    }
+
 	return status;
 }
 
 static apr_status_t bundleArchive_destroy(void *archiveP) {
+    apr_status_t status = APR_SUCCESS;
 	bundle_archive_pt archive = archiveP;
 	if (archive != NULL) {
 		if (archive->archiveRootDir != NULL) {
-			apr_dir_close(archive->archiveRootDir);
+			status = apr_dir_close(archive->archiveRootDir);
 		}
 	}
 	archive = NULL;
 
-	return APR_SUCCESS;
+	return status;
 }
 
 celix_status_t bundleArchive_recreate(char * archiveRoot, apr_pool_t *mp, bundle_archive_pt *bundle_archive) {
+    celix_status_t status = CELIX_SUCCESS;
+    char *errpr = NULL;
+
     apr_pool_t *revisions_pool;
-    celix_status_t status;
     bundle_archive_pt archive;
 
-    status = CELIX_SUCCESS;
 	archive = (bundle_archive_pt) apr_pcalloc(mp, sizeof(*archive));
-	if (archive != NULL) {
+	if (archive == NULL) {
+	    status = CELIX_ENOMEM;
+ 	} else {
+        apr_dir_t *dir;
 		apr_pool_pre_cleanup_register(mp, archive, bundleArchive_destroy);
-	    if (apr_pool_create(&revisions_pool, mp) == APR_SUCCESS) {
-	        if (linkedList_create(revisions_pool, &archive->revisions) == CELIX_SUCCESS) {
-                apr_dir_t *dir;
-				archive->archiveRoot = archiveRoot;
-                apr_dir_open(&archive->archiveRootDir, archiveRoot, mp);
-                archive->id = -1;
-                archive->persistentState = -1;
-                archive->location = NULL;
-                archive->mp = mp;
-                archive->refreshCount = -1;
-                archive->lastModified = (time_t) NULL;
-
-                
-                if (apr_dir_open(&dir, archiveRoot, mp) == APR_SUCCESS) {
-                    apr_finfo_t dp;
-                    long idx = 0;
-					char *location;
-
-                    while ((apr_dir_read(&dp, APR_FINFO_DIRENT|APR_FINFO_TYPE, dir)) == APR_SUCCESS) {
-                        if (dp.filetype == APR_DIR && (strncmp(dp.name, "version", 7) == 0)) {
-                            sscanf(dp.name, "version%*d.%ld", &idx);
-                        }
-                    }
-                    
-                    status = bundleArchive_getRevisionLocation(archive, 0, &location);
-                    if (status == CELIX_SUCCESS) {
-                        bundleArchive_reviseInternal(archive, true, idx, location, NULL);
+		status = CELIX_DO_IF(status, apr_pool_create(&revisions_pool, mp));
+		status = CELIX_DO_IF(status, linkedList_create(revisions_pool, &archive->revisions));
+		if (status == CELIX_SUCCESS) {
+            archive->archiveRoot = archiveRoot;
+            apr_dir_open(&archive->archiveRootDir, archiveRoot, mp);
+            archive->id = -1;
+            archive->persistentState = -1;
+            archive->location = NULL;
+            archive->mp = mp;
+            archive->refreshCount = -1;
+            archive->lastModified = (time_t) NULL;
+		}
 
-                        *bundle_archive = archive;
-                    }
-                } else {
-                    apr_pool_destroy(revisions_pool);
-                    status = CELIX_FILE_IO_EXCEPTION;
+		status = CELIX_DO_IF(status, apr_dir_open(&dir, archiveRoot, mp));
+		if (status == CELIX_SUCCESS) {
+            apr_finfo_t dp;
+            long idx = 0;
+            char *location;
+
+            while ((apr_dir_read(&dp, APR_FINFO_DIRENT|APR_FINFO_TYPE, dir)) == APR_SUCCESS) {
+                if (dp.filetype == APR_DIR && (strncmp(dp.name, "version", 7) == 0)) {
+                    sscanf(dp.name, "version%*d.%ld", &idx);
                 }
-	        } else {
-	            apr_pool_destroy(revisions_pool);
-	            status = CELIX_ENOMEM;
-	        }
-	    } else {
-	        status = CELIX_ENOMEM;
-	    }
-	} else {
-	    status = CELIX_ENOMEM;
+            }
+
+            status = CELIX_DO_IF(status, bundleArchive_getRevisionLocation(archive, 0, &location));
+            status = CELIX_DO_IF(status, bundleArchive_reviseInternal(archive, true, idx, location, NULL));
+            if (status == CELIX_SUCCESS) {
+                *bundle_archive = archive;
+            }
+		}
+
+		if (status != CELIX_SUCCESS) {
+            apr_pool_destroy(revisions_pool);
+        }
 	}
 
+	if (status != CELIX_SUCCESS) {
+        fw_logCode(FW_LOG_ERROR, status, "Could not recreate archive");
+    }
+
 	return status;
 }
 
@@ -219,31 +235,38 @@ celix_status_t bundleArchive_getId(bundl
 
 	if (archive->id < 0) {
 		apr_file_t *bundleIdFile;
-		apr_status_t rv;
 		char * bundleId = NULL;
+        char id[256];
 		apr_pool_t *subpool = NULL;
-		apr_pool_create(&subpool, archive->mp);
-
-		bundleId = (char *)apr_palloc(subpool, strlen(archive->archiveRoot) + 11);
-
-		strcpy(bundleId, archive->archiveRoot);
-		strcat(bundleId, "/bundle.id");
-		
-		if ((rv = apr_file_open(&bundleIdFile, bundleId, APR_FOPEN_READ, APR_OS_DEFAULT, archive->mp)) != APR_SUCCESS) {
-			status = CELIX_FILE_IO_EXCEPTION;
-		} else {
-			char id[256];
-			apr_file_gets(id, sizeof(id), bundleIdFile);
-			apr_file_close(bundleIdFile);
-			sscanf(id, "%ld", &archive->id);
-		}
+		status = CELIX_DO_IF(status, apr_pool_create(&subpool, archive->mp));
+        if (status == CELIX_SUCCESS) {
+            bundleId = (char *)apr_palloc(subpool, strlen(archive->archiveRoot) + 11);
+            if (bundleId == NULL) {
+                status = CELIX_ENOMEM;
+            }
+        }
+        if (status == CELIX_SUCCESS) {
+            strcpy(bundleId, archive->archiveRoot);
+            strcat(bundleId, "/bundle.id");
+        }
+        status = CELIX_DO_IF(status, apr_file_open(&bundleIdFile, bundleId, APR_FOPEN_READ, APR_OS_DEFAULT, archive->mp));
+        status = CELIX_DO_IF(status, apr_file_gets(id, sizeof(id), bundleIdFile));
+        status = CELIX_DO_IF(status, apr_file_close(bundleIdFile));
+        if (status == CELIX_SUCCESS) {
+            sscanf(id, "%ld", &archive->id);
+        }
 
-		apr_pool_destroy(subpool);
+        apr_pool_destroy(subpool);
 	}
+
 	if (status == CELIX_SUCCESS) {
 		*id = archive->id;
 	}
 
+	if (status != CELIX_SUCCESS) {
+        fw_logCode(FW_LOG_ERROR, status, "Could not get archive id");
+    }
+
 	return status;
 }
 
@@ -254,28 +277,35 @@ celix_status_t bundleArchive_getLocation
 		apr_status_t rv;
 		char * bundleLocation = NULL;
 		apr_pool_t *subpool = NULL;
-		apr_pool_create(&subpool, archive->mp);
-
-		bundleLocation = (char *)apr_palloc(subpool, strlen(archive->archiveRoot) + 17);
-		strcpy(bundleLocation,archive->archiveRoot);
-		strcat(bundleLocation, "/bundle.location");
+		status = CELIX_DO_IF(status, apr_pool_create(&subpool, archive->mp));
+		if (status == CELIX_SUCCESS) {
+            char location[256];
+		    bundleLocation = (char *)apr_palloc(subpool, strlen(archive->archiveRoot) + 17);
+		    if (bundleLocation == NULL) {
+		        status = CELIX_ENOMEM;
+		    }
 		
-		if ((rv = apr_file_open(&bundleLocationFile, bundleLocation, APR_FOPEN_READ, APR_OS_DEFAULT, archive->mp)) != APR_SUCCESS) {
-			status = CELIX_FILE_IO_EXCEPTION;
-		} else {
-			char location[256];
-			apr_file_gets (location , sizeof(location) , bundleLocationFile);
-			apr_file_close(bundleLocationFile);
+            strcpy(bundleLocation,archive->archiveRoot);
+            strcat(bundleLocation, "/bundle.location");
 
-			archive->location = apr_pstrdup(archive->mp, location);
+            status = CELIX_DO_IF(status, apr_file_open(&bundleLocationFile, bundleLocation, APR_FOPEN_READ, APR_OS_DEFAULT, archive->mp));
+            status = CELIX_DO_IF(status, apr_file_gets (location , sizeof(location) , bundleLocationFile));
+            status = CELIX_DO_IF(status, apr_file_close(bundleLocationFile));
+            if (status == CELIX_SUCCESS) {
+                archive->location = apr_pstrdup(archive->mp, location);
+            }
+            apr_pool_destroy(subpool);
 		}
-		apr_pool_destroy(subpool);
 	}
 
 	if (status == CELIX_SUCCESS) {
 		*location = archive->location;
 	}
 
+	if (status != CELIX_SUCCESS) {
+        fw_logCode(FW_LOG_ERROR, status, "Could not get archive location");
+    }
+
 	return status;
 }
 
@@ -289,10 +319,12 @@ celix_status_t bundleArchive_getCurrentR
 	bundle_revision_pt revision;
 	*revisionNumber = -1;
 	
-	status = bundleArchive_getCurrentRevision(archive, &revision);
-	if (status == CELIX_SUCCESS) {
-		status = bundleRevision_getNumber(revision, revisionNumber);
-	}
+	status = CELIX_DO_IF(status, bundleArchive_getCurrentRevision(archive, &revision));
+	status = CELIX_DO_IF(status, bundleRevision_getNumber(revision, revisionNumber));
+
+    if (status != CELIX_SUCCESS) {
+        fw_logCode(FW_LOG_ERROR, status, "Could not get current revision number");
+    }
 
 	return status;
 }
@@ -317,75 +349,91 @@ celix_status_t bundleArchive_getPersiste
 		apr_file_t *persistentStateLocationFile;
 		char * persistentStateLocation = NULL;
 		apr_pool_t *subpool;
-		apr_pool_create(&subpool, archive->mp);
-		
-		persistentStateLocation = apr_palloc(subpool, strlen(archive->archiveRoot) + 14);
-		strcpy(persistentStateLocation, archive->archiveRoot);
-		strcat(persistentStateLocation, "/bundle.state");
-		
-		apr_status = apr_file_open(&persistentStateLocationFile, persistentStateLocation, APR_FOPEN_READ, APR_OS_DEFAULT, archive->mp);
-		if (apr_status != APR_SUCCESS) {
-			status = CELIX_FILE_IO_EXCEPTION;
-		} else {
-			char stateString[256];
-			apr_file_gets(stateString , sizeof(stateString) , persistentStateLocationFile);
-			apr_file_close(persistentStateLocationFile);
-
-			if (stateString != NULL && (strcmp(stateString, "active") == 0)) {
-				archive->persistentState = BUNDLE_ACTIVE;
-			} else if (stateString != NULL && (strcmp(stateString, "starting") == 0)) {
-				archive->persistentState = BUNDLE_STARTING;
-			} else if (stateString != NULL && (strcmp(stateString, "uninstalled") == 0)) {
-				archive->persistentState = BUNDLE_UNINSTALLED;
-			} else {
-				archive->persistentState = BUNDLE_INSTALLED;
-			}
+		status = CELIX_DO_IF(status, apr_pool_create(&subpool, archive->mp));
+		if (status == CELIX_SUCCESS) {
+		    persistentStateLocation = apr_palloc(subpool, strlen(archive->archiveRoot) + 14);
+		    if (persistentStateLocation == NULL) {
+		        status = CELIX_ENOMEM;
+		    } else {
+                char stateString[256];
+                strcpy(persistentStateLocation, archive->archiveRoot);
+                strcat(persistentStateLocation, "/bundle.state");
+
+                status = CELIX_DO_IF(status, apr_file_open(&persistentStateLocationFile, persistentStateLocation, APR_FOPEN_READ, APR_OS_DEFAULT, archive->mp));
+                status = CELIX_DO_IF(status, apr_file_gets(stateString , sizeof(stateString) , persistentStateLocationFile));
+                status = CELIX_DO_IF(status, apr_file_close(persistentStateLocationFile));
+
+                if (status == CELIX_SUCCESS) {
+                    if (stateString != NULL && (strcmp(stateString, "active") == 0)) {
+                        archive->persistentState = BUNDLE_ACTIVE;
+                    } else if (stateString != NULL && (strcmp(stateString, "starting") == 0)) {
+                        archive->persistentState = BUNDLE_STARTING;
+                    } else if (stateString != NULL && (strcmp(stateString, "uninstalled") == 0)) {
+                        archive->persistentState = BUNDLE_UNINSTALLED;
+                    } else {
+                        archive->persistentState = BUNDLE_INSTALLED;
+                    }
 
-			*state = archive->persistentState;
-		}
-		apr_pool_destroy(subpool);
+                    *state = archive->persistentState;
+                }
+		    }
+            apr_pool_destroy(subpool);
+        }
 	}
 
+	if (status != CELIX_SUCCESS) {
+        fw_logCode(FW_LOG_ERROR, status, "Could not get persistent state");
+    }
+
 	return status;
 }
 
 celix_status_t bundleArchive_setPersistentState(bundle_archive_pt archive, bundle_state_e state) {
 	celix_status_t status = CELIX_SUCCESS;
-	apr_status_t apr_status;
 	char * persistentStateLocation = NULL;
 	apr_file_t *persistentStateLocationFile;
 	apr_pool_t *subpool = NULL;
-	apr_pool_create(&subpool, archive->mp);
 	
-	persistentStateLocation = (char *)apr_palloc(subpool, strlen(archive->archiveRoot) + 14);
-	strcpy(persistentStateLocation, archive->archiveRoot);
-	strcat(persistentStateLocation, "/bundle.state");
-	
-	apr_status = apr_file_open(&persistentStateLocationFile, persistentStateLocation, APR_FOPEN_CREATE|APR_FOPEN_WRITE, APR_OS_DEFAULT, archive->mp);
-	if (apr_status != APR_SUCCESS) {
-		status = CELIX_FILE_IO_EXCEPTION;
-	} else {
-		char * s;
-		switch (state) {
-			case BUNDLE_ACTIVE:
-				s = "active";
-				break;
-			case BUNDLE_STARTING:
-				s = "starting";
-				break;
-			case BUNDLE_UNINSTALLED:
-				s = "uninstalled";
-				break;
-			default:
-				s = "installed";
-				break;
-		}
-		apr_file_printf(persistentStateLocationFile, "%s", s);
-		apr_file_close(persistentStateLocationFile);
+	status = CELIX_DO_IF(status, apr_pool_create(&subpool, archive->mp));
+	if (status == CELIX_SUCCESS) {
+	    persistentStateLocation = (char *)apr_palloc(subpool, strlen(archive->archiveRoot) + 14);
+	    if (persistentStateLocation == NULL) {
+	        status = CELIX_ENOMEM;
+	    } else {
+            strcpy(persistentStateLocation, archive->archiveRoot);
+            strcat(persistentStateLocation, "/bundle.state");
+
+            status = CELIX_DO_IF(status, apr_file_open(&persistentStateLocationFile, persistentStateLocation, APR_FOPEN_CREATE|APR_FOPEN_WRITE, APR_OS_DEFAULT, archive->mp));
+            if (status == CELIX_SUCCESS) {
+                char * s;
+                switch (state) {
+                    case BUNDLE_ACTIVE:
+                        s = "active";
+                        break;
+                    case BUNDLE_STARTING:
+                        s = "starting";
+                        break;
+                    case BUNDLE_UNINSTALLED:
+                        s = "uninstalled";
+                        break;
+                    default:
+                        s = "installed";
+                        break;
+                }
+                status = CELIX_DO_IF(status, apr_file_printf(persistentStateLocationFile, "%s", s));
+                status = CELIX_DO_IF(status, apr_file_close(persistentStateLocationFile));
+                if (status == CELIX_SUCCESS) {
+                    archive->persistentState = state;
+                }
+            }
+	    }
+        apr_pool_destroy(subpool);
+    }
+
+	if (status != CELIX_SUCCESS) {
+        fw_logCode(FW_LOG_ERROR, status, "Could not set persistent state");
+    }
 
-		archive->persistentState = state;
-	}
-	apr_pool_destroy(subpool);
 	return status;
 }
 
@@ -398,26 +446,41 @@ celix_status_t bundleArchive_getRefreshC
 		apr_pool_t *subpool = NULL;
 		char *refreshCounter = NULL;
 
-		apr_pool_create(&subpool, archive->mp);
-		refreshCounter = (char *) apr_palloc(subpool, strlen(archive->archiveRoot) + 17);
-		strcpy(refreshCounter,archive->archiveRoot);
-		strcat(refreshCounter, "/refresh.counter");
-		
-		if ((rv = apr_file_open(&refreshCounterFile, refreshCounter, APR_FOPEN_READ, APR_OS_DEFAULT, archive->mp)) != APR_SUCCESS) {
-			archive->refreshCount = 0;
-		} else {
-			char counterStr[256];
-			apr_file_gets(counterStr , sizeof(counterStr) , refreshCounterFile);
-			apr_file_close(refreshCounterFile);
-			sscanf(counterStr, "%ld", &archive->refreshCount);
+		status = CELIX_DO_IF(status, apr_pool_create(&subpool, archive->mp));
+		if (status == CELIX_SUCCESS) {
+            refreshCounter = (char *) apr_palloc(subpool, strlen(archive->archiveRoot) + 17);
+            if (refreshCounter == NULL) {
+                status = CELIX_ENOMEM;
+            } else {
+                strcpy(refreshCounter,archive->archiveRoot);
+                strcat(refreshCounter, "/refresh.counter");
+
+                status = CELIX_DO_IF(status, apr_file_open(&refreshCounterFile, refreshCounter, APR_FOPEN_READ, APR_OS_DEFAULT, archive->mp));
+                if (status != CELIX_SUCCESS) {
+                    archive->refreshCount = 0;
+                    status = CELIX_SUCCESS;
+                } else {
+                    char counterStr[256];
+                    status = CELIX_DO_IF(status, apr_file_gets(counterStr , sizeof(counterStr) , refreshCounterFile));
+                    status = CELIX_DO_IF(status, apr_file_close(refreshCounterFile));
+
+                    if (status != CELIX_SUCCESS) {
+                        sscanf(counterStr, "%ld", &archive->refreshCount);
+                    }
+                }
+            }
+            apr_pool_destroy(subpool);
 		}
-		apr_pool_destroy(subpool);
 	}
 
 	if (status == CELIX_SUCCESS) {
 		*refreshCount = archive->refreshCount;
 	}
 
+	if (status != CELIX_SUCCESS) {
+        fw_logCode(FW_LOG_ERROR, status, "Could not get refresh count");
+    }
+
 	return status;
 }
 
@@ -428,21 +491,26 @@ celix_status_t bundleArchive_setRefreshC
 	apr_pool_t *subpool;
 	char * refreshCounter = NULL;
 
-	apr_pool_create(&subpool, archive->mp);
-	refreshCounter = (char *) apr_palloc(subpool, strlen(archive->archiveRoot) + 17);
-
-	strcpy(refreshCounter, archive->archiveRoot);
-	strcat(refreshCounter, "/refresh.counter");
+	status = CELIX_DO_IF(status, apr_pool_create(&subpool, archive->mp));
+	if (status == CELIX_SUCCESS) {
+	    refreshCounter = (char *) apr_palloc(subpool, strlen(archive->archiveRoot) + 17);
+	    if (refreshCounter == NULL) {
+	        status = CELIX_ENOMEM;
+	    } else {
+	        strcpy(refreshCounter, archive->archiveRoot);
+	        strcat(refreshCounter, "/refresh.counter");
 	
-	apr_status = apr_file_open(&refreshCounterFile, refreshCounter, APR_FOPEN_CREATE|APR_FOPEN_WRITE, APR_OS_DEFAULT, archive->mp);
-	apr_pool_destroy(subpool);
-	if (apr_status != APR_SUCCESS) {
-		status = CELIX_FILE_IO_EXCEPTION;
-	} else {
-		apr_file_printf(refreshCounterFile, "%ld", archive->refreshCount);
-		apr_file_close(refreshCounterFile);
+	        status = CELIX_DO_IF(status, apr_file_open(&refreshCounterFile, refreshCounter, APR_FOPEN_CREATE|APR_FOPEN_WRITE, APR_OS_DEFAULT, archive->mp));
+	        status = CELIX_DO_IF(status, apr_file_printf(refreshCounterFile, "%ld", archive->refreshCount));
+	        status = CELIX_DO_IF(status, apr_file_close(refreshCounterFile));
+	    }
+        apr_pool_destroy(subpool);
 	}
 
+	if (status != CELIX_SUCCESS) {
+        fw_logCode(FW_LOG_ERROR, status, "Could not set refresh count");
+    }
+
 	return status;
 }
 
@@ -450,13 +518,17 @@ celix_status_t bundleArchive_getLastModi
 	celix_status_t status = CELIX_SUCCESS;
 
 	if (archive->lastModified == (time_t) NULL) {
-		status = bundleArchive_readLastModified(archive, &archive->lastModified);
+	    status = CELIX_DO_IF(status, bundleArchive_readLastModified(archive, &archive->lastModified));
 	}
 
 	if (status == CELIX_SUCCESS) {
 		*lastModified = archive->lastModified;
 	}
 
+	if (status != CELIX_SUCCESS) {
+        fw_logCode(FW_LOG_ERROR, status, "Could not get last modified");
+    }
+
 	return status;
 }
 
@@ -464,7 +536,11 @@ celix_status_t bundleArchive_setLastModi
 	celix_status_t status = CELIX_SUCCESS;
 
 	archive->lastModified = lastModifiedTime;
-	status = bundleArchive_writeLastModified(archive);
+	status = CELIX_DO_IF(status, bundleArchive_writeLastModified(archive));
+
+	if (status != CELIX_SUCCESS) {
+        fw_logCode(FW_LOG_ERROR, status, "Could not set last modified");
+    }
 
 	return status;
 }
@@ -472,37 +548,41 @@ celix_status_t bundleArchive_setLastModi
 static celix_status_t bundleArchive_readLastModified(bundle_archive_pt archive, time_t *time) {
 	char timeStr[20];
 	apr_file_t *lastModifiedFile;
-	apr_status_t apr_status;
 	char *lastModified = NULL;
 
 	celix_status_t status = CELIX_SUCCESS;
 
 	apr_pool_t *subpool = NULL;
-	apr_pool_create(&subpool, archive->mp);
+	status = CELIX_DO_IF(status, apr_pool_create(&subpool, archive->mp));
 
 	lastModified = (char *)apr_palloc(subpool, strlen(archive->archiveRoot) + 21);
-	sprintf(lastModified, "%s/bundle.lastmodified", archive->archiveRoot);
-
-	apr_status = apr_file_open(&lastModifiedFile, lastModified, APR_FOPEN_READ, APR_OS_DEFAULT, archive->mp);
-	apr_pool_destroy(subpool);
-	if (apr_status != APR_SUCCESS) {
-		status = CELIX_FILE_IO_EXCEPTION;
+	if (lastModified == NULL) {
+	    status = CELIX_ENOMEM;
 	} else {
-		int year, month, day, hours, minutes, seconds;
-		struct tm tm_time;
+        sprintf(lastModified, "%s/bundle.lastmodified", archive->archiveRoot);
 
-		apr_file_gets(timeStr, sizeof(timeStr), lastModifiedFile);
-		apr_file_close(lastModifiedFile);
-		
-		sscanf(timeStr, "%d %d %d %d:%d:%d", &year, &month, &day, &hours, &minutes, &seconds);
-		tm_time.tm_year = year - 1900;
-		tm_time.tm_mon = month - 1;
-		tm_time.tm_mday = day;
-		tm_time.tm_hour = hours;
-		tm_time.tm_min = minutes;
-		tm_time.tm_sec = seconds;
+        status = CELIX_DO_IF(status, apr_file_open(&lastModifiedFile, lastModified, APR_FOPEN_READ, APR_OS_DEFAULT, archive->mp));
+        if (status == APR_SUCCESS) {
+            int year, month, day, hours, minutes, seconds;
+            struct tm tm_time;
+
+            status = CELIX_DO_IF(status, apr_file_gets(timeStr, sizeof(timeStr), lastModifiedFile));
+            status = CELIX_DO_IF(status, apr_file_close(lastModifiedFile));
+
+            if (status == CELIX_SUCCESS) {
+                sscanf(timeStr, "%d %d %d %d:%d:%d", &year, &month, &day, &hours, &minutes, &seconds);
+                tm_time.tm_year = year - 1900;
+                tm_time.tm_mon = month - 1;
+                tm_time.tm_mday = day;
+                tm_time.tm_hour = hours;
+                tm_time.tm_min = minutes;
+                tm_time.tm_sec = seconds;
+
+                *time = mktime(&tm_time);
+            }
+        }
 
-		*time = mktime(&tm_time);
+        apr_pool_destroy(subpool);
 	}
 
 	return status;

Modified: incubator/celix/trunk/framework/private/src/celix_log.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/celix_log.c?rev=1543333&r1=1543332&r2=1543333&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/celix_log.c (original)
+++ incubator/celix/trunk/framework/private/src/celix_log.c Tue Nov 19 07:40:01 2013
@@ -23,13 +23,26 @@
  *  \author     <a href="mailto:celix-dev@incubator.apache.org">Apache Celix Project Team</a>
  *  \copyright  Apache License, Version 2.0
  */
+#include <stdarg.h>
 
+#include "celix_errno.h"
 #include "celix_log.h"
 
-void framework_log(framework_pt framework, framework_log_level_t level, const char *func, const char *file, int line, char *fmsg, ...) {
+void framework_log(framework_log_level_t level, const char *func, const char *file, int line, char *fmsg, ...) {
 	char msg[512];
 	va_list listPointer;
 	va_start(listPointer, fmsg);
 	vsprintf(msg, fmsg, listPointer);
-	printf("Log write: %s at %s, %s, %d\n", msg, func, file, line);
+	printf("%s\n\tat %s(%s:%d)\n", msg, func, file, line);
+}
+
+void framework_logCode(framework_log_level_t level, const char *func, const char *file, int line, celix_status_t code, char *fmsg, ...) {
+    char message[256];
+    celix_strerror(code, message, 256);
+    char msg[512];
+    va_list listPointer;
+    va_start(listPointer, fmsg);
+    vsprintf(msg, fmsg, listPointer);
+
+    framework_log(level, func, file, line, "%s [%d]: %s", message, code, msg);
 }