From ee70bf78e38e2a3f8cc8d28a541cdad88286ae26 Mon Sep 17 00:00:00 2001 From: Cedric Le Goater Date: Wed, 26 May 2010 16:54:48 +0200 Subject: [PATCH] merge lxc_restart() and lxc_start() now that we have specific operations and specific arguments for each sequence, lxc_restart() and lxc_start() can easily be merged under a common subroutine. Signed-off-by: Cedric Le Goater Signed-off-by: Daniel Lezcano --- src/lxc/start.c | 83 +++++++++++++++++++++++++++---------------------- src/lxc/start.h | 3 +- 2 files changed, 47 insertions(+), 39 deletions(-) diff --git a/src/lxc/start.c b/src/lxc/start.c index 71c103141..c79cf708d 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -560,57 +560,24 @@ out_abort: return -1; } -struct start_arg { - char *const *argv; -}; - -static int start(struct lxc_handler *handler, void* data) -{ - struct start_arg *arg = data; - - NOTICE("exec'ing '%s'", arg->argv[0]); - - execvp(arg->argv[0], arg->argv); - SYSERROR("failed to exec %s", arg->argv[0]); - return 0; -} - -static int post_start(struct lxc_handler *handler, void* data) -{ - struct start_arg *arg = data; - - NOTICE("'%s' started with pid '%d'", arg->argv[0], handler->pid); - return 0; -} - -static struct lxc_operations start_ops = { - .start = start, - .post_start = post_start -}; - -int lxc_start(const char *name, char *const argv[], struct lxc_conf *conf) +int __lxc_start(const char *name, struct lxc_conf *conf, + struct lxc_operations* ops, void *data) { struct lxc_handler *handler; int err = -1; int status; - struct start_arg start_arg = { - .argv = argv, - }; - - if (lxc_check_inherited(-1)) - return -1; handler = lxc_init(name, conf); if (!handler) { ERROR("failed to initialize the container"); return -1; } - handler->ops = &start_ops; - handler->data = &start_arg; + handler->ops = ops; + handler->data = data; err = lxc_spawn(handler); if (err) { - ERROR("failed to spawn '%s'", argv[0]); + ERROR("failed to spawn '%s'", name); goto out_fini; } @@ -639,3 +606,43 @@ out_abort: lxc_abort(name, handler); goto out_fini; } + +struct start_args { + char *const *argv; +}; + +static int start(struct lxc_handler *handler, void* data) +{ + struct start_args *arg = data; + + NOTICE("exec'ing '%s'", arg->argv[0]); + + execvp(arg->argv[0], arg->argv); + SYSERROR("failed to exec %s", arg->argv[0]); + return 0; +} + +static int post_start(struct lxc_handler *handler, void* data) +{ + struct start_args *arg = data; + + NOTICE("'%s' started with pid '%d'", arg->argv[0], handler->pid); + return 0; +} + +static struct lxc_operations start_ops = { + .start = start, + .post_start = post_start +}; + +int lxc_start(const char *name, char *const argv[], struct lxc_conf *conf) +{ + struct start_args start_arg = { + .argv = argv, + }; + + if (lxc_check_inherited(-1)) + return -1; + + return __lxc_start(name, conf, &start_ops, &start_arg); +} diff --git a/src/lxc/start.h b/src/lxc/start.h index a861df13b..ff35bca52 100644 --- a/src/lxc/start.h +++ b/src/lxc/start.h @@ -28,7 +28,6 @@ struct lxc_conf; -struct start_arg; struct lxc_handler; struct lxc_operations { @@ -59,6 +58,8 @@ extern void lxc_abort(const char *name, struct lxc_handler *handler); extern void lxc_fini(const char *name, struct lxc_handler *handler); extern int lxc_set_state(const char *, struct lxc_handler *, lxc_state_t); extern int lxc_check_inherited(int fd_to_ignore); +int __lxc_start(const char *, struct lxc_conf *, struct lxc_operations *, + void *); #endif -- 2.47.2