=== modified file 'TODO' --- TODO 2010-09-12 18:23:40 +0000 +++ TODO 2010-09-15 17:17:46 +0000 @@ -32,9 +32,6 @@ ** TODO [#B] Prefix all debug output with "Mandos plugin " + program_invocation_short_name ** TODO [#B] lock stdin (with flock()?) -* plymouth -** TODO Use [[info:libc:Argz%20Functions][argz_extract]] - * TODO [#B] passdev * plugin-runner === modified file 'debian/watch' --- debian/watch 2009-01-15 02:52:02 +0000 +++ debian/watch 2010-09-15 17:17:46 +0000 @@ -1,2 +1,2 @@ version=3 -ftp://ftp.fukt.bsnet.se/pub/mandos/mandos[-_]([^\s]+?)(?:\.orig)?\.tar\.(?:gz|bz2|7z) +ftp://ftp.fukt.bsnet.se/pub/mandos/mandos[-_]([^\s]+?)(?:\.orig)?\.tar\.(?:gz|bz2|7z|xz) === modified file 'plugins.d/plymouth.c' --- plugins.d/plymouth.c 2010-09-07 18:48:56 +0000 +++ plugins.d/plymouth.c 2010-09-15 17:17:46 +0000 @@ -24,7 +24,7 @@ #include /* EX_OSERR */ #include /* error() */ #include /* TEMP_FAILURE_RETRY */ -#include +#include /* argz_count(), argz_extract() */ sig_atomic_t interrupted_by_signal = 0; const char plymouth_pid[] = "/dev/.initramfs/plymouth.pid"; @@ -286,21 +286,15 @@ } /* we got cmdline and cmdline_len, ignore rest... */ - const char **argv = NULL; - size_t argv_size = 0; - for(char *arg = cmdline; arg-cmdline < (ssize_t)cmdline_len; - arg = strchr(arg, '\0')+1){ - tmp = realloc(argv, ((++argv_size)+1)*sizeof(char *)); - if(tmp == NULL){ - error(0, errno, "realloc"); - free(argv); - return NULL; - } - argv = (const char **)tmp; - argv[argv_size-1] = arg; + char **argv = malloc((argz_count(cmdline, cmdline_len)+1) + * sizeof(char *)); /* Get number of args */ + if(argv == NULL){ + error(0, errno, "argv = malloc()"); + free(cmdline); + return NULL; } - argv[argv_size] = NULL; - return argv; + argz_extract(cmdline, cmdline_len, argv); /* Create argv */ + return (const char **)argv; } int main(__attribute__((unused))int argc, === modified file 'plugins.d/usplash.c' --- plugins.d/usplash.c 2010-09-07 16:48:58 +0000 +++ plugins.d/usplash.c 2010-09-15 17:17:46 +0000 @@ -49,6 +49,7 @@ #include /* intmax_t, strtoimax() */ #include /* struct stat, lstat(), S_ISLNK */ #include /* EX_OSERR, EX_UNAVAILABLE */ +#include /* argz_count(), argz_extract() */ sig_atomic_t interrupted_by_signal = 0; int signal_received; @@ -566,27 +567,15 @@ } } - /* Create argc and argv for new usplash*/ - int cmdline_argc = 0; - char **cmdline_argv = malloc(sizeof(char *)); - { - size_t position = 0; - while(position < cmdline_len){ - char **tmp = realloc(cmdline_argv, - (sizeof(char *) - * (size_t)(cmdline_argc + 2))); - if(tmp == NULL){ - error(0, errno, "realloc"); - free(cmdline_argv); - return status; - } - cmdline_argv = tmp; - cmdline_argv[cmdline_argc] = cmdline + position; - cmdline_argc++; - position += strlen(cmdline + position) + 1; - } - cmdline_argv[cmdline_argc] = NULL; + /* Create argv for new usplash*/ + char **cmdline_argv = malloc(argz_count(cmdline, cmdline_len) + * sizeof(char *)); /* Count args */ + if(cmdline_argv == NULL){ + error(0, errno, "malloc"); + return status; } + argz_extract(cmdline, cmdline_len, cmdline_argv); /* Create argv */ + /* Kill old usplash */ kill(usplash_pid, SIGTERM); sleep(2);