launch: launch the binder as a daemon
[src/app-framework-main.git] / src / afm-launch.c
index 937366d..a66004b 100644 (file)
@@ -54,6 +54,7 @@ extern char **environ;
 
 static const char *args_for_afb_daemon[] = {
        "/usr/bin/afb-daemon",
+       "--daemon",
        "--alias=/icons:%I",
        "--port=%P",
        "--rootdir=%D",
@@ -73,7 +74,7 @@ static const char *args_for_qmlviewer[] = {
 };
 
 static const char *args_for_web_runtime[] = {
-       "/usr/share/qt5/examples/webkitwidgets/browser/browser",
+       "/usr/bin/web-runtime",
        "http://localhost:%P/%c?token=%S",
        NULL
 };
@@ -107,25 +108,26 @@ static char **instantiate_arguments(const char **args, struct afm_launch_desc *d
 {
        const char **iter, *p, *v;
        char *data, **result, port[20], width[20], height[20], mini[3], c;
-       int n, s, x;
+       int n, s;
 
        /* init */
        mini[0] = '%';
        mini[2] = 0;
 
        /* loop that either compute the size and build the result */
-       n = s = x = 0;
+       data = NULL;
+       n = s = 0;
        for (;;) {
                iter = args;
                n = 0;
                while (*iter) {
                        p = *iter++;
-                       if (x)
+                       if (data)
                                result[n] = data;
                        n++;
                        while((c = *p++) != 0) {
                                if (c != '%') {
-                                       if (x)
+                                       if (data)
                                                *data++ = c;
                                        else
                                                s++;
@@ -133,7 +135,7 @@ static char **instantiate_arguments(const char **args, struct afm_launch_desc *d
                                        c = *p++;
                                        switch (c) {
                                        case 'I': v = FWK_ICON_DIR; break;
-                                       case 'P': if(!x) sprintf(port, "%d", params->port); v = port; break;
+                                       case 'P': if(!data) sprintf(port, "%d", params->port); v = port; break;
                                        case 'S': v = params->secret; break;
                                        case 'D': v = params->datadir; break;
                                        case 'r': v = desc->path; break;
@@ -144,23 +146,23 @@ static char **instantiate_arguments(const char **args, struct afm_launch_desc *d
                                        case 'm': v = desc->type; break;
                                        case 'n': v = desc->name; break;
                                        case 'p': v = "" /*desc->plugins*/; break;
-                                       case 'W': if(!x) sprintf(width, "%d", desc->width); v = width; break;
-                                       case 'H': if(!x) sprintf(height, "%d", desc->height); v = height; break;
+                                       case 'W': if(!data) sprintf(width, "%d", desc->width); v = width; break;
+                                       case 'H': if(!data) sprintf(height, "%d", desc->height); v = height; break;
                                        case '%': c = 0;
                                        default: mini[1] = c; v = mini; break;
                                        }
-                                       if (x)
+                                       if (data)
                                                data = stpcpy(data, v);
                                        else
                                                s += strlen(v);
                                }
                        }
-                       if (x)
+                       if (data)
                                *data++ = 0;
                        else
                                s++;
                }
-               if (x) {
+               if (data) {
                        result[n] = NULL;
                        return result;
                }
@@ -171,7 +173,6 @@ static char **instantiate_arguments(const char **args, struct afm_launch_desc *d
                        return NULL;
                }
                data = (char*)(&result[n + 1]);
-               x = 1;
        }
 }
 
@@ -284,13 +285,12 @@ static int launchexec2(struct afm_launch_desc *desc, pid_t children[2], struct l
                close(spipe[0]);
                /* wait the ready signal (that transmit the slave pid) */
                rc = read(mpipe[0], &children[1], sizeof children[1]);
-               if (rc  < 0) {
+               close(mpipe[0]);
+               if (rc  <= 0) {
                        ERROR("reading master pipe failed: %m");
-                       close(mpipe[0]);
                        close(spipe[1]);
                        return -1;
                }
-               close(mpipe[0]);
                assert(rc == sizeof children[1]);
                /* start the child */
                rc = write(spipe[1], "start", 5);
@@ -344,7 +344,7 @@ static int launchexec2(struct afm_launch_desc *desc, pid_t children[2], struct l
                /********* in the slave child ************/
                close(mpipe[0]);
                rc = read(spipe[0], message, sizeof message);
-               if (rc < 0) {
+               if (rc <= 0) {
                        ERROR("reading slave pipe failed: %m");
                        _exit(1);
                }
@@ -368,7 +368,7 @@ static int launchexec2(struct afm_launch_desc *desc, pid_t children[2], struct l
        }
        else {
                rc = write(mpipe[1], &children[1], sizeof children[1]);
-               if (rc < 0) {
+               if (rc <= 0) {
                        ERROR("can't write master pipe: %m");
                }
                else {