X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Foserver%2Foserver.c;h=d4266eda1ef5ead9329ecd5e4136e307a8a162d4;hb=92f7f79eb9535a281cab710eedb9878c74b950b8;hp=405a576c63d103003970e17c9b6e2fe477bf3c71;hpb=b6c158bea04f0b8ec13b70c5a3f68aef74c4e356;p=ccan-lca-2011.git diff --git a/ccan/oserver/oserver.c b/ccan/oserver/oserver.c index 405a576..d4266ed 100644 --- a/ccan/oserver/oserver.c +++ b/ccan/oserver/oserver.c @@ -305,6 +305,8 @@ static void dump(struct tevent_context *ev, write(fd, str, strlen(str)); close(fd); talloc_free(str); + if (oserver->argv) + execvp(oserver->argv[0], oserver->argv); } static bool load_file(struct oserver *oserver, const char *file) @@ -385,7 +387,7 @@ struct oserver *oserver_restore(struct tevent_context *ev, const char *dumpfile) } struct oserver *oserver_setup(struct tevent_context *ev, unsigned short port, - const char *dumpfile) + const char *dumpfile, char *argv[]) { struct oserver *oserver; int one = 1; @@ -395,6 +397,14 @@ struct oserver *oserver_setup(struct tevent_context *ev, unsigned short port, } u; oserver = talloc(ev, struct oserver); + oserver->argv = argv; + if (argv) { + /* Count the terminal NULL in argv_len. */ + for (oserver->argv_len = 1; + argv[oserver->argv_len - 1]; + oserver->argv_len++); + } else + oserver->argv_len = 0; clear_clients(oserver); oserver->fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (oserver->fd < 0) {