/src/setlock.c
C | 50 lines | 41 code | 9 blank | 0 comment | 10 complexity | b54769efed50e3d1abb43529aaab1d81 MD5 | raw file
- #include <unistd.h>
- #include "lock.h"
- #include "open.h"
- #include "strerr.h"
- #include "pathexec.h"
- #include "sgetopt.h"
- #define FATAL "setlock: fatal: "
- void usage() {
- strerr_die1x(100,"setlock: usage: setlock [ -nNxX ] file program [ arg ... ]");
- }
- int flagndelay = 0;
- int flagx = 0;
- int main(int argc,const char *const *argv,const char *const *envp)
- {
- int opt;
- int fd;
- const char *file;
- while ((opt = getopt(argc,argv,"nNxX")) != opteof)
- switch(opt) {
- case 'n': flagndelay = 1; break;
- case 'N': flagndelay = 0; break;
- case 'x': flagx = 1; break;
- case 'X': flagx = 0; break;
- default: usage();
- }
- argv += optind;
- if (!*argv) usage();
- file = *argv++;
- if (!*argv) usage();
- fd = open_append(file);
- if (fd == -1) {
- if (flagx) _exit(0);
- strerr_die4sys(111,FATAL,"unable to open ",file,": ");
- }
- if ((flagndelay ? lock_exnb : lock_ex)(fd) == -1) {
- if (flagx) _exit(0);
- strerr_die4sys(111,FATAL,"unable to lock ",file,": ");
- }
- pathexec_run(*argv,argv,envp);
- strerr_die4sys(111,FATAL,"unable to run ",*argv,": ");
- }