X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fudev%2Fcollect%2Fcollect.c;h=6cf41c67bb322f6adef1ddb2190b52340fd6e99f;hb=d42688ef21a695f8a30b0d899dafdc6ff1ee0973;hp=cb5df01c6a66c9269d16bda02e15f390b927d17d;hpb=919ce0b7affc6fbd68598b709faf477f56c22ac1;p=elogind.git diff --git a/src/udev/collect/collect.c b/src/udev/collect/collect.c index cb5df01c6..6cf41c67b 100644 --- a/src/udev/collect/collect.c +++ b/src/udev/collect/collect.c @@ -20,18 +20,10 @@ */ #include -#include #include -#include -#include -#include #include -#include #include -#include -#include -#include "libudev.h" #include "libudev-private.h" #include "macro.h" @@ -68,15 +60,19 @@ noreturn static void sig_alrm(int signo) static void usage(void) { - printf("usage: collect [--add|--remove] [--debug] \n" - "\n" + printf("%s [options] \n\n" + "Collect variables across events.\n\n" + " -h --help Print this message\n" + " -a --add Add ID to the list \n" + " -r --remove Remove ID from the list \n" + " -d --debug Debug to stderr\n\n" " Adds ID to the list governed by .\n" " must be part of the list .\n" " If all IDs given by are listed (ie collect has been\n" " invoked for each ID in ) collect returns 0, the\n" " number of missing IDs otherwise.\n" - " On error a negative number is returned.\n" - "\n"); + " On error a negative number is returned.\n\n" + , program_invocation_short_name); } /* @@ -86,16 +82,16 @@ static void usage(void) */ static int prepare(char *dir, char *filename) { - struct stat statbuf; char buf[512]; - int fd; + int r, fd; - if (stat(dir, &statbuf) < 0) - mkdir(dir, 0700); + r = mkdir(dir, 0700); + if (r < 0 && errno != EEXIST) + return -errno; snprintf(buf, sizeof(buf), "%s/%s", dir, filename); - fd = open(buf,O_RDWR|O_CREAT, S_IRUSR|S_IWUSR); + fd = open(buf,O_RDWR|O_CREAT|O_CLOEXEC, S_IRUSR|S_IWUSR); if (fd < 0) fprintf(stderr, "Cannot open %s: %m\n", buf); @@ -153,7 +149,7 @@ static int checkout(int fd) if (!ptr && word < (buf + len)) { bufsize = bufsize << 1; if (debug) - fprintf(stderr, "ID overflow, restarting with size %zi\n", bufsize); + fprintf(stderr, "ID overflow, restarting with size %zu\n", bufsize); free(buf); lseek(fd, 0, SEEK_SET); goto restart; @@ -254,7 +250,7 @@ static void reject(char *us) * kickout * * Remove all IDs in the internal list which are not part - * of the list passed via the commandline. + * of the list passed via the command line. */ static void kickout(void) {