Move exit() into os dependent interface as os_exit(). Add os_arg() hook to allow...
authorHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Fri, 29 Oct 2010 11:11:25 +0000 (13:11 +0200)
committerHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Fri, 29 Oct 2010 11:11:25 +0000 (13:11 +0200)
lib/cl_roam/src/cl_roam.c
src/main.c
src/olsr.c
src/olsr_cfg.c
src/olsr_types.h
src/os_system.h
src/unix/init.c
src/win32/net.c

index d664a2d..3e8861d 100644 (file)
@@ -46,6 +46,7 @@
 #include "olsr_cookie.h"
 #include "olsr_ip_prefix_list.h"
 #include "olsr_logging.h"
+#include "os_system.h"
 
 #include <stdio.h>
 #include <string.h>
@@ -363,7 +364,7 @@ static void ping_infinite(struct guest_client * target) {
     rc = pthread_create(&thread, NULL, ping_thread_infinite, (void *) target);
     if (rc) {
       printf("ERROR; return code from pthread_create() is %d\n", rc);
-      exit(-1);
+      os_exit(-1);
     }
     target->ping_thread = thread;
     OLSR_INFO(LOG_PLUGINS, "Set up ping-thread for %s\n", inet_ntoa(target->ip.v4));
@@ -792,7 +793,7 @@ static void olsr_event2(void *foo  __attribute__ ((unused))) {
     rc = pthread_create(&thread, NULL, check_neighbour_host, (void *) nbr);
     if (rc) {
       printf("ERROR; return code from pthread_create() is %d\n", rc);
-      exit(-1);
+      os_exit(-1);
     }
   }
 }
index fe3a00f..23b88f2 100644 (file)
@@ -152,6 +152,9 @@ main(int argc, char *argv[])
   /* Using PID as random seed */
   srandom(getpid());
 
+  /* call os dependent argument preprocessor */
+  os_arg(&argc, argv);
+
   /*
    * Set default configfile name
    */
@@ -180,7 +183,7 @@ main(int argc, char *argv[])
   case CFG_ERROR:
     if (parse_msg[0])
       fprintf(stderr, "Error: %s\n", parse_msg);
-    exit(EXIT_FAILURE);
+    os_exit(EXIT_FAILURE);
     break;
   case CFG_WARN:
     if (parse_msg[0])
@@ -188,7 +191,7 @@ main(int argc, char *argv[])
     /* No exit */
     break;
   case CFG_EXIT:
-    exit(EXIT_SUCCESS);
+    os_exit(EXIT_SUCCESS);
     break;
   case CFG_OK:
     /* Continue */
@@ -354,7 +357,7 @@ main(int argc, char *argv[])
     OLSR_INFO(LOG_MAIN, "%s detaching from the current process...\n", olsrd_version);
     if (daemon(0, 0) < 0) {
       OLSR_ERROR(LOG_MAIN, "daemon(3) failed: %s\n", strerror(errno));
-      exit(EXIT_FAILURE);
+      olsr_exit(EXIT_FAILURE);
     }
   }
 #endif
index f02376f..f38ffde 100644 (file)
@@ -518,7 +518,7 @@ olsr_exit(int val)
   fflush(stdout);
   olsr_cnf->exit_value = val;
   if (app_state == STATE_INIT) {
-    exit(val);
+    os_exit(val);
   }
   app_state = STATE_SHUTDOWN;
 }
index 6662333..0240e39 100644 (file)
@@ -50,6 +50,7 @@
 #include "common/string.h"
 #include "olsr_time.h"
 #include "os_net.h"
+#include "os_system.h"
 
 #include <unistd.h>
 #include <string.h>
@@ -510,7 +511,7 @@ parse_cfg_interface(char *argstr, struct olsr_config *rcfg, char *rmsg)
                      (0 == strcasecmp("Midinterval", p_next[0])) || (0 == strcasecmp("MidValidityTime", p_next[0])) ||
                      (0 == strcasecmp("Hnainterval", p_next[0])) || (0 == strcasecmp("HnaValidityTime", p_next[0]))) {
             fprintf(stderr,"ERROR: %s is deprecated within the interface section. All message intervals/validities except Hellos are global!\n",p_next[0]);
-            exit(1);
+            os_exit(1);
           } else if (0 == strcasecmp("Weight", p_next[0])) {
             new_if->cnf->weight.fixed = true;
             PARSER_DEBUG_PRINTF("\tFixed willingness: %d\n", new_if->cnf->weight.value);
index adf8ddc..7f1eb66 100644 (file)
@@ -47,7 +47,7 @@
 #ifndef _OLSR_TYPES_H
 #define        _OLSR_TYPES_H
 
-#if !defined linux && !defined __MacOSX__ && !defined WIN32 && !defined __FreeBSD__ && !defined __NetBSD__ && !defined __OpenBSD__
+#if !defined linux && !defined __MacOSX__ && !defined WIN32 && !defined __FreeBSD__ && !defined __NetBSD__ && !defined __OpenBSD__ && !defined EMULATION
 #       error "Unsupported system"
 #endif
 
index 8523e94..6ca9da4 100644 (file)
 
 #include "defs.h"
 
+void os_arg(int *argc, char **argv);
 void os_init(void);
 void os_cleanup(void);
+void os_exit(int ret);
 
 void os_clear_console(void);
 void os_printf_syslog (int level, const char *format, ...) __attribute__ ((format(printf, 2, 3)));
index 51c0bbf..473097d 100644 (file)
@@ -5,6 +5,8 @@
  *      Author: rogge
  */
 
+#include <stdlib.h>
+
 #include "os_system.h"
 #include "unix/unix_log.h"
 
 #include "bsd/bsd_net.h"
 #endif
 
+void
+os_arg(int *argc __attribute__ ((unused)), char **argv __attribute__ ((unused))) {
+  return;
+}
+
+void  __attribute__((noreturn))
+os_exit(int ret) {
+  exit(ret);
+}
+
 void os_init(void) {
   os_syslog_init("olsrd");
   os_init_global_ifoptions();
index 7c9ed91..675764b 100644 (file)
@@ -72,6 +72,25 @@ void PError(const char *);
 
 static void DisableIcmpRedirects(void);
 
+/**
+ * Argument preprocessor
+ * @param argc
+ * @param argv
+ */
+void
+os_arg(int *argc __attribute__ ((unused)), char **argv __attribute__ ((unused))) {
+  return;
+}
+
+/**
+ * Wrapper for exit call
+ * @param ret return value
+ */
+void  __attribute__((noreturn))
+os_exit(int ret) {
+  exit(ret);
+}
+
 /**
  * Wrapper for closing sockets
  * @param