Signed-off-by: Matthew Vernon <mv3@sanger.ac.uk>
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
---
v3: split off from timeout patch
add copyright notice
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
*
* Copyright 1993-2016 Ian Jackson in some jurisdictions
* Copyright 2017 Ian Jackson in all jurisdictions
*
* Copyright 1993-2016 Ian Jackson in some jurisdictions
* Copyright 2017 Ian Jackson in all jurisdictions
+ * Copyright 2017 Genome Research Ltd
-int main(int argc, char **argv) {
- int fd, mode, um;
- struct stat stab, fstab;
- long cloexec;
- struct flock fl;
- const char *p;
-
- if (argc >= 3 && !strcmp((p= strrchr(argv[0],'/')) ? ++p : argv[0], "with-lock")) {
- mode= 'f';
- } else if (argc < 3 || argv[1][0] != '-' || argv[1][2] ||
- ((mode= argv[1][1]) != 'w' && mode != 'q' && mode != 'f'
- && mode != 'l') ||
- (mode != 'l' && argc < 4) ||
- (mode == 'l' && argc != 3)) {
- fputs("usage: with-lock-ex -w|-q|-f <lockfile> <command> <args>...\n"
+static void badusage(void) __attribute__((noreturn));
+
+static void badusage(void) {
+ fputs("usage: with-lock-ex -w|-q|-f [-t <secs>] <lockfile> <command> <args>...\n"
" with-lock-ex -l <lockfile>\n"
" with-lock <lockfile> <command> <args>...\n",
stderr);
exit(255);
" with-lock-ex -l <lockfile>\n"
" with-lock <lockfile> <command> <args>...\n",
stderr);
exit(255);
- } else {
- argv++; argc--;
- }
+}
+
+static int mode;
+
+int main(int argc, char **argv) {
+ int fd, um, c;
+ struct stat stab, fstab;
+ long cloexec;
+ struct flock fl;
+
+ mode='x';
+ while ((c = getopt(argc,argv,"+wfqlt:")) != -1)
+ switch(c) {
+ case 'l':
+ case 'w':
+ case 'f':
+ case 'q':
+ if (mode != 'x') badusage();
+ mode = c;
+ break;
+ default:
+ badusage();
+ }
+
+ argv += optind-1; argc -= optind-1;
+ if (argc < 2) badusage();
+
cmd= argv[2];
um= umask(0777); if (um==-1) fail("find umask");
if (umask(um)==-1) fail("reset umask");
cmd= argv[2];
um= umask(0777); if (um==-1) fail("find umask");
if (umask(um)==-1) fail("reset umask");
with-lock-ex
Copyright 1993-2016 Ian Jackson in some jurisdictions
Copyright 2017 Ian Jackson in all jurisdictions
with-lock-ex
Copyright 1993-2016 Ian Jackson in some jurisdictions
Copyright 2017 Ian Jackson in all jurisdictions
+ Copyright 2017 Genome Research Ltd
The chiark utilities are all free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License
The chiark utilities are all free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License