Quoting Christian Seiler (christ...@iwakd.de): > Signed-off-by: Christian Seiler <christ...@iwakd.de>
Ideally the conversion of lxcapi_startl would have been a part of this patch rather than the next one, but I'm being nit-picky. Acked-by: Serge E. Hallyn <serge.hal...@ubuntu.com> > --- > src/lxc/utils.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ > src/lxc/utils.h | 5 +++++ > 2 files changed, 51 insertions(+) > > diff --git a/src/lxc/utils.c b/src/lxc/utils.c > index 89d335d..9dd742b 100644 > --- a/src/lxc/utils.c > +++ b/src/lxc/utils.c > @@ -26,6 +26,7 @@ > #include <unistd.h> > #include <stdlib.h> > #include <stddef.h> > +#include <string.h> > #include <sys/types.h> > #include <sys/stat.h> > #include <sys/mman.h> > @@ -447,3 +448,48 @@ int sha1sum_file(char *fnam, unsigned char *digest) > return ret; > } > #endif > + > +char** lxc_va_arg_list_to_argv(va_list ap, size_t skip, int do_strdup) > +{ > + va_list ap2; > + size_t count = 1 + skip; > + char **result; > + > + /* first determine size of argument list, we don't want to reallocate > + * constantly... > + */ > + va_copy(ap2, ap); > + while (1) { > + char* arg = va_arg(ap2, char*); > + if (!arg) > + break; > + count++; > + } > + va_end(ap2); > + > + result = calloc(count, sizeof(char*)); > + if (!result) > + return NULL; > + count = skip; > + while (1) { > + char* arg = va_arg(ap, char*); > + if (!arg) > + break; > + arg = do_strdup ? strdup(arg) : arg; > + if (!arg) > + goto oom; > + result[count++] = arg; > + } > + > + /* calloc has already set last element to NULL*/ > + return result; > + > +oom: > + free(result); > + return NULL; > +} > + > +const char** lxc_va_arg_list_to_argv_const(va_list ap, size_t skip) > +{ > + return (const char**)lxc_va_arg_list_to_argv(ap, skip, 0); > +} > diff --git a/src/lxc/utils.h b/src/lxc/utils.h > index 455d7d2..1818ee3 100644 > --- a/src/lxc/utils.h > +++ b/src/lxc/utils.h > @@ -24,6 +24,7 @@ > #define _utils_h > > #include <errno.h> > +#include <stdarg.h> > #include <sys/types.h> > #include <unistd.h> > #include "config.h" > @@ -182,4 +183,8 @@ extern ssize_t lxc_read_nointr_expect(int fd, void* buf, > size_t count, const voi > extern int sha1sum_file(char *fnam, unsigned char *md_value); > #endif > > +/* convert variadic argument lists to arrays (for execl type argument lists) > */ > +extern char** lxc_va_arg_list_to_argv(va_list ap, size_t skip, int > do_strdup); > +extern const char** lxc_va_arg_list_to_argv_const(va_list ap, size_t skip); > + > #endif > -- > 1.7.10.4 > > > ------------------------------------------------------------------------------ > Get 100% visibility into Java/.NET code with AppDynamics Lite! > It's a free troubleshooting tool designed for production. > Get down to code-level detail for bottlenecks, with <2% overhead. > Download for free and get started troubleshooting in minutes. > http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk > _______________________________________________ > Lxc-devel mailing list > Lxc-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/lxc-devel ------------------------------------------------------------------------------ Get 100% visibility into Java/.NET code with AppDynamics Lite! It's a free troubleshooting tool designed for production. Get down to code-level detail for bottlenecks, with <2% overhead. Download for free and get started troubleshooting in minutes. http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel