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/07/31 22:57:37 UTC

[08/10] celix git commit: CELIX-237: Split launcher in a main.c and launcher.c/.h. Trying to reuse the launcher for cpputests

CELIX-237: Split launcher in a main.c and launcher.c/.h. Trying to reuse the launcher for cpputests


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

Branch: refs/heads/feature/CELIX-237_rsa-ffi
Commit: 2f56576ae7f4bb006b8c22a776812dd0907abe6f
Parents: 3d7f764
Author: Pepijn Noltes <pe...@gmail.com>
Authored: Fri Jul 31 16:57:09 2015 +0200
Committer: Pepijn Noltes <pe...@gmail.com>
Committed: Fri Jul 31 16:57:09 2015 +0200

----------------------------------------------------------------------
 framework/private/src/properties.c    |  13 +-
 framework/public/include/properties.h |   3 +
 launcher/CMakeLists.txt               |   6 +-
 launcher/private/src/launcher.c       | 225 ++++++++++++++---------------
 launcher/private/src/main.c           |  62 ++++++++
 launcher/public/include/launcher.h    |  35 +++++
 6 files changed, 220 insertions(+), 124 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/celix/blob/2f56576a/framework/private/src/properties.c
----------------------------------------------------------------------
diff --git a/framework/private/src/properties.c b/framework/private/src/properties.c
index 38ed214..14455c4 100644
--- a/framework/private/src/properties.c
+++ b/framework/private/src/properties.c
@@ -47,9 +47,14 @@ void properties_destroy(properties_pt properties) {
 }
 
 properties_pt properties_load(char *filename) {
-	properties_pt props = NULL;
-	FILE *file = fopen ( filename, "r" );
+	FILE *file = fopen(filename, "r");
+	properties_pt props = properties_loadWithStream(file);
+	fclose(file);
+	return props;
+}
 
+FRAMEWORK_EXPORT properties_pt properties_loadWithStream(FILE *file) {
+	properties_pt props = NULL;
 	char line[1024];
 	char key[1024];
 	char value[1024];
@@ -110,7 +115,7 @@ properties_pt properties_load(char *filename) {
 					}
 				} else if (line[linePos] == '\\') {
 					if (precedingCharIsBackslash) { //double backslash -> backslash
-							output[outputPos++] = '\\';
+						output[outputPos++] = '\\';
 					}
 					precedingCharIsBackslash = true;
 				} else { //normal character
@@ -128,8 +133,6 @@ properties_pt properties_load(char *filename) {
 				hashMap_put(props, strdup(utils_stringTrim(key)), strdup(utils_stringTrim(value)));
 			}
 		}
-
-		fclose(file);
 	}
 
 	return props;

http://git-wip-us.apache.org/repos/asf/celix/blob/2f56576a/framework/public/include/properties.h
----------------------------------------------------------------------
diff --git a/framework/public/include/properties.h b/framework/public/include/properties.h
index 36297a5..c4803cb 100644
--- a/framework/public/include/properties.h
+++ b/framework/public/include/properties.h
@@ -27,6 +27,8 @@
 #ifndef PROPERTIES_H_
 #define PROPERTIES_H_
 
+#include <stdio.h>
+
 #include "hash_map.h"
 #include "framework_exports.h"
 
@@ -35,6 +37,7 @@ typedef hash_map_pt properties_pt;
 FRAMEWORK_EXPORT properties_pt properties_create(void);
 FRAMEWORK_EXPORT void properties_destroy(properties_pt properties);
 FRAMEWORK_EXPORT properties_pt properties_load(char * filename);
+FRAMEWORK_EXPORT properties_pt properties_loadWithStream(FILE *stream);
 FRAMEWORK_EXPORT void properties_store(properties_pt properties, char * file, char * header);
 
 FRAMEWORK_EXPORT char * properties_get(properties_pt properties, char * key);

http://git-wip-us.apache.org/repos/asf/celix/blob/2f56576a/launcher/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt
index 27d1682..6001eaf 100644
--- a/launcher/CMakeLists.txt
+++ b/launcher/CMakeLists.txt
@@ -17,8 +17,12 @@
 celix_subproject(LAUNCHER "Option to build the launcher" "ON" DEPS UTILS FRAMEWORK)
 if (LAUNCHER) 
     find_package(CURL REQUIRED)
+
+    include_directories(public/include)
     
-    add_executable(celix private/src/launcher)
+    add_executable(celix
+        private/src/main
+        private/src/launcher)
     
     target_link_libraries(celix celix_framework ${CURL_LIBRARIES})
     include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")

http://git-wip-us.apache.org/repos/asf/celix/blob/2f56576a/launcher/private/src/launcher.c
----------------------------------------------------------------------
diff --git a/launcher/private/src/launcher.c b/launcher/private/src/launcher.c
index f334057..6d09fc4 100644
--- a/launcher/private/src/launcher.c
+++ b/launcher/private/src/launcher.c
@@ -23,6 +23,9 @@
  *  \author    	<a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
  *  \copyright	Apache License, Version 2.0
  */
+
+#include "launcher.h"
+
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -34,33 +37,48 @@
 #include "framework.h"
 #include "linked_list_iterator.h"
 
-#define DEFAULT_CONFIG_FILE "config.properties"
-
-void launcher_shutdown(int signal);
+static void launcher_shutdown(int signal);
 
-int running = 0;
-
-struct framework * framework;
+static struct framework * framework;
 #ifdef WITH_APR
-apr_pool_t *memoryPool;
+static apr_pool_t *memoryPool;
 #endif
 
-void show_usage(char* prog_name);
+int celixLauncher_launch(const char *configFile) {
+    int status = 0;
+    FILE *config = fopen(configFile, "r");
+    if (config != NULL) {
+        status = celixLauncher_launchWithStream(config);
+    } else {
+        fprintf(stderr, "Error: invalid or non-existing configuration file: '%s'.", configFile);
+        perror("");
+        status = 1;
+    }
+    return status;
+}
+
+int celixLauncher_launchWithStream(FILE *stream) {
+    int status = 0;
+
+    properties_pt config = properties_loadWithStream(stream);
+    fclose(stream);
+    // Make sure we've read it and that nothing went wrong with the file access...
+    if (config == NULL) {
+        fprintf(stderr, "Error: invalid configuration file");
+        perror(NULL);
+        status = 1;
+    }
 
-int main(int argc, char *argv[]) {
-	// Set signal handler
+    // Set signal handler
 #ifdef WITH_APR
     apr_status_t rv;
     apr_status_t s;
 #endif
-    properties_pt config = NULL;
-    char *autoStart = NULL;
-    bundle_pt fwBundle = NULL;
 
-	(void) signal(SIGINT, launcher_shutdown);
+    (void) signal(SIGINT, launcher_shutdown);
 
-	// Before doing anything else, let's setup Curl
-	curl_global_init(CURL_GLOBAL_NOTHING);
+    // Before doing anything else, let's setup Curl
+    curl_global_init(CURL_GLOBAL_NOTHING);
 
 #ifdef WITH_APR
 	rv = apr_initialize();
@@ -74,128 +92,99 @@ int main(int argc, char *argv[]) {
     }
 #endif
 
-	// Perform some minimal command-line option parsing...
-	char* opt = NULL;
-	if (argc > 1) {
-		opt = argv[1];
-	}
-
-	char* config_file = NULL;
-
-	if (opt) {
-		// Check whether the user wants some help...
-		if (strcmp("-h", opt) == 0 || strcmp("-help", opt) == 0) {
-			show_usage(argv[0]);
-			return 0;
-		} else {
-			config_file = opt;
-		}
-	} else {
-		config_file = DEFAULT_CONFIG_FILE;
-	}
-
-    config = properties_load(config_file);
-	// Make sure we've read it and that nothing went wrong with the file access...
-	if (config == NULL) {
-		printf("Error: invalid or non-existing configuration file: \"%s\"!\n", config_file);
-		perror(NULL);
-		show_usage(argv[0]);
-		return CELIX_START_ERROR;
-	}
-
-    autoStart = properties_get(config, "cosgi.auto.start.1");
-    framework = NULL;
-    celix_status_t status;
+
+    if (status == 0) {
+        char *autoStart = properties_get(config, "cosgi.auto.start.1");
+        framework = NULL;
+        celix_status_t status;
 #ifdef WITH_APR
-    status = framework_create(&framework, memoryPool, config);
+        status = framework_create(&framework, memoryPool, config);
 #else
-    status = framework_create(&framework, config);
+        status = framework_create(&framework, config);
 #endif
-    if (status == CELIX_SUCCESS) {
-		status = fw_init(framework);
-		if (status == CELIX_SUCCESS) {
-            // Start the system bundle
-            framework_getFrameworkBundle(framework, &fwBundle);
-            bundle_start(fwBundle);
-
-            char delims[] = " ";
-            char *result = NULL;
-            char *save_ptr = NULL;
-            linked_list_pt bundles;
-            array_list_pt installed = NULL;
-            bundle_pt bundle = NULL;
-            bundle_context_pt context = NULL;
-            linked_list_iterator_pt iter = NULL;
-            unsigned int i;
-
-            linkedList_create(&bundles);
-            result = strtok_r(autoStart, delims, &save_ptr);
-            while (result != NULL) {
-                char * location = strdup(result);
-                linkedList_addElement(bundles, location);
-                result = strtok_r(NULL, delims, &save_ptr);
-            }
-            // First install all bundles
-            // Afterwards start them
-            arrayList_create(&installed);
-            framework_getFrameworkBundle(framework, &bundle);
-            bundle_getContext(bundle, &context);
-            iter = linkedListIterator_create(bundles, 0);
-            while (linkedListIterator_hasNext(iter)) {
-                bundle_pt current = NULL;
-                char * location = (char *) linkedListIterator_next(iter);
-                if (bundleContext_installBundle(context, location, &current) == CELIX_SUCCESS) {
-                    // Only add bundle if it is installed correctly
-                    arrayList_add(installed, current);
-                } else {
-                    printf("Could not install bundle from %s\n", location);
+        bundle_pt fwBundle = NULL;
+        if (status == CELIX_SUCCESS) {
+            status = fw_init(framework);
+            if (status == CELIX_SUCCESS) {
+                // Start the system bundle
+                framework_getFrameworkBundle(framework, &fwBundle);
+                bundle_start(fwBundle);
+
+                char delims[] = " ";
+                char *result = NULL;
+                char *save_ptr = NULL;
+                linked_list_pt bundles;
+                array_list_pt installed = NULL;
+                bundle_pt bundle = NULL;
+                bundle_context_pt context = NULL;
+                linked_list_iterator_pt iter = NULL;
+                unsigned int i;
+
+                linkedList_create(&bundles);
+                result = strtok_r(autoStart, delims, &save_ptr);
+                while (result != NULL) {
+                    char *location = strdup(result);
+                    linkedList_addElement(bundles, location);
+                    result = strtok_r(NULL, delims, &save_ptr);
                 }
-                linkedListIterator_remove(iter);
-                free(location);
-            }
-            linkedListIterator_destroy(iter);
-            linkedList_destroy(bundles);
+                // First install all bundles
+                // Afterwards start them
+                arrayList_create(&installed);
+                framework_getFrameworkBundle(framework, &bundle);
+                bundle_getContext(bundle, &context);
+                iter = linkedListIterator_create(bundles, 0);
+                while (linkedListIterator_hasNext(iter)) {
+                    bundle_pt current = NULL;
+                    char *location = (char *) linkedListIterator_next(iter);
+                    if (bundleContext_installBundle(context, location, &current) == CELIX_SUCCESS) {
+                        // Only add bundle if it is installed correctly
+                        arrayList_add(installed, current);
+                    } else {
+                        printf("Could not install bundle from %s\n", location);
+                    }
+                    linkedListIterator_remove(iter);
+                    free(location);
+                }
+                linkedListIterator_destroy(iter);
+                linkedList_destroy(bundles);
 
-            for (i = 0; i < arrayList_size(installed); i++) {
-                bundle_pt installedBundle = (bundle_pt) arrayList_get(installed, i);
-                bundle_startWithOptions(installedBundle, 0);
-            }
+                for (i = 0; i < arrayList_size(installed); i++) {
+                    bundle_pt installedBundle = (bundle_pt) arrayList_get(installed, i);
+                    bundle_startWithOptions(installedBundle, 0);
+                }
 
-            arrayList_destroy(installed);
+                arrayList_destroy(installed);
 
-            framework_waitForStop(framework);
-            framework_destroy(framework);
-            properties_destroy(config);
-		}
-    }
+                framework_waitForStop(framework);
+                framework_destroy(framework);
+                properties_destroy(config);
+            }
+        }
 
-    if (status != CELIX_SUCCESS) {
-        printf("Problem creating framework\n");
-    }
+        if (status != CELIX_SUCCESS) {
+            printf("Problem creating framework\n");
+        }
 
 #ifdef WITH_APR
 	apr_pool_destroy(memoryPool);
 	apr_terminate();
 #endif
 
-	// Cleanup Curl
-	curl_global_cleanup();
+        // Cleanup Curl
+        curl_global_cleanup();
 
-	printf("Launcher: Exit\n");
+        printf("Launcher: Exit\n");
+    }
 
-    return 0;
+    return status;
 }
 
-void launcher_shutdown(int signal) {
-	bundle_pt fwBundle = NULL;
-	framework_getFrameworkBundle(framework, &fwBundle);
-	bundle_stop(fwBundle);
+static void launcher_shutdown(int signal) {
+    bundle_pt fwBundle = NULL;
+    framework_getFrameworkBundle(framework, &fwBundle);
+    bundle_stop(fwBundle);
 //	if (framework_waitForStop(framework) != CELIX_SUCCESS) {
 //		celix_log("Error waiting for stop.");
 //	}
 //	framework_destroy(framework);
 }
-
-void show_usage(char* prog_name) {
-	printf("Usage:\n  %s [path/to/config.properties]\n\n", basename(prog_name));
-}

http://git-wip-us.apache.org/repos/asf/celix/blob/2f56576a/launcher/private/src/main.c
----------------------------------------------------------------------
diff --git a/launcher/private/src/main.c b/launcher/private/src/main.c
new file mode 100644
index 0000000..0a59bc4
--- /dev/null
+++ b/launcher/private/src/main.c
@@ -0,0 +1,62 @@
+/**
+ *Licensed to the Apache Software Foundation (ASF) under one
+ *or more contributor license agreements.  See the NOTICE file
+ *distributed with this work for additional information
+ *regarding copyright ownership.  The ASF licenses this file
+ *to you under the Apache License, Version 2.0 (the
+ *"License"); you may not use this file except in compliance
+ *with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *Unless required by applicable law or agreed to in writing,
+ *software distributed under the License is distributed on an
+ *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ *specific language governing permissions and limitations
+ *under the License.
+ */
+/*
+ * main.c
+ *
+ *  \date       Jul 30, 2015
+ *  \author    	<a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ *  \copyright	Apache License, Version 2.0
+ */
+
+#include <string.h>
+#include <curl/curl.h>
+#include <signal.h>
+#include "launcher.h"
+
+static void show_usage(char* prog_name);
+
+#define DEFAULT_CONFIG_FILE "config.properties"
+
+int main(int argc, char *argv[]) {
+    // Perform some minimal command-line option parsing...
+    char *opt = NULL;
+    if (argc > 1) {
+        opt = argv[1];
+    }
+
+    char *config_file = NULL;
+
+    if (opt) {
+        // Check whether the user wants some help...
+        if (strcmp("-h", opt) == 0 || strcmp("-help", opt) == 0) {
+            show_usage(argv[0]);
+            return 0;
+        } else {
+            config_file = opt;
+        }
+    } else {
+        config_file = DEFAULT_CONFIG_FILE;
+    }
+
+    celixLauncher_launch(config_file);
+}
+
+static void show_usage(char* prog_name) {
+    printf("Usage:\n  %s [path/to/config.properties]\n\n", basename(prog_name));
+}

http://git-wip-us.apache.org/repos/asf/celix/blob/2f56576a/launcher/public/include/launcher.h
----------------------------------------------------------------------
diff --git a/launcher/public/include/launcher.h b/launcher/public/include/launcher.h
new file mode 100644
index 0000000..296df7c
--- /dev/null
+++ b/launcher/public/include/launcher.h
@@ -0,0 +1,35 @@
+/**
+ *Licensed to the Apache Software Foundation (ASF) under one
+ *or more contributor license agreements.  See the NOTICE file
+ *distributed with this work for additional information
+ *regarding copyright ownership.  The ASF licenses this file
+ *to you under the Apache License, Version 2.0 (the
+ *"License"); you may not use this file except in compliance
+ *with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *Unless required by applicable law or agreed to in writing,
+ *software distributed under the License is distributed on an
+ *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ *specific language governing permissions and limitations
+ *under the License.
+ */
+/*
+ * launcher.h
+ *
+ *  \date       Jul 30, 2015
+ *  \author    	<a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ *  \copyright	Apache License, Version 2.0
+ */
+
+#ifndef CELIX_LAUNCHER_H
+#define CELIX_LAUNCHER_H
+
+#include <stdio.h>
+
+int celixLauncher_launch(const char *configFile);
+int celixLauncher_launchWithStream(FILE *config);
+
+#endif //CELIX_LAUNCHER_H