]> rtime.felk.cvut.cz Git - frescor/forb.git/blobdiff - src/forbrun/forbrun.c
forb: forbrun passes the parameters to shlibs properly
[frescor/forb.git] / src / forbrun / forbrun.c
index 62e1607608b02a98bc5b2ba7461c6bf1537ef825..2319cf0ef2f3543ff335538b998e2a89e057010b 100644 (file)
@@ -5,6 +5,7 @@
 #include <errno.h>
 #include <stdio.h>
 #include <ul_log.h>
+#include <ul_logreg.h>
 #include <stdbool.h>
 #include <dlfcn.h>
 #include <forb/forb-internal.h>
@@ -13,7 +14,7 @@
 static struct option long_opts[] = {
     { "daemon",   optional_argument, NULL, 'd' },
     { "id",      required_argument, NULL, 'i' },
-/*     { "loglevel", required_argument, NULL, 'l' }, */
+    { "loglevel", required_argument, NULL, 'l' },
     { "port",            required_argument, NULL, 'p' },
     { 0, 0, 0, 0}
 };
@@ -23,8 +24,8 @@ usage(void)
 {
        printf("usage: forbrun [ options ] -- <forb-server>.so [ options for forb_main() ] [-- ...]\n");
        printf("  -d, --daemon [pid-file]   go to background after initialization of servers\n");
-       printf("  -i, --id <orb id>         \n");
-/*     printf("  -l, --loglevel <number>|<domain>=<number>,...\n"); */
+       printf("  -i, --id <textual orb id>\n");
+       printf("  -l, --loglevel <number>|<domain>=<number>,...\n");
        printf("  -p, --port <number>       listen on a fixed port number\n");
 }
 
@@ -46,6 +47,7 @@ void *forb_main_thread(void *arg)
 {
        struct forb_main_data *data = arg;
        int ret;
+       optind = 1;
        ret = data->forb_main(data->orb, data->argc, data->argv);
        free(data);
        exit(ret);
@@ -58,7 +60,7 @@ int main(int argc, char *argv[])
        forb_orb orb;
        bool opt_daemon = false;
        char *opt_pidfile = NULL;
-       int i;
+       int i, ret;
        forb_init_attr_t attr = {
                .orb_id = "",
                .peer_discovery_callback = NULL, /* TODO */
@@ -71,22 +73,19 @@ int main(int argc, char *argv[])
        };
        int  opt;
 
-       while ((opt = getopt_long(argc, argv, "d::hil:p:x", &long_opts[0], NULL)) != EOF) {
+       while ((opt = getopt_long(argc, argv, "d::hi:l:p:", &long_opts[0], NULL)) != EOF) {
                switch (opt) {
-#if 0                  
                        case 'l':
                                if (*optarg == '?') {
                                        ul_logreg_for_each_domain(print_log_domain, NULL);
                                        exit(0);
                                }
                                {
-                                       int ret;
                                        ret = ul_log_domain_arg2levels(optarg);
                                        if (ret) 
                                                error(1, EINVAL, "Error parsing -l argument at char %d\n", ret);
                                }
                                break;
-#endif
                        case 'd':
                                opt_daemon = true;
                                opt_pidfile = optarg;
@@ -143,7 +142,9 @@ int main(int argc, char *argv[])
                fosa_thread_create(&tid, NULL, forb_main_thread, data);
                libs_loaded_cnt++;
 
-               forb_wait_for_server_ready(orb);
+               ret = forb_wait_for_server_ready(orb);
+               if (ret)
+                       error(1, errno, "forb_wait_for_server_ready");
        }
 
        if (opt_daemon)