Module Name: src Committed By: christos Date: Tue Oct 29 16:02:15 UTC 2013
Modified Files: src/usr.bin/flock: flock.c Log Message: PR/48351: Dennis Ferguson: Fix incorrect parsing of flock flags. XXX: still flock -s 0 fails with EINVAL, why? To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/usr.bin/flock/flock.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/flock/flock.c diff -u src/usr.bin/flock/flock.c:1.7 src/usr.bin/flock/flock.c:1.8 --- src/usr.bin/flock/flock.c:1.7 Thu Feb 7 08:57:40 2013 +++ src/usr.bin/flock/flock.c Tue Oct 29 12:02:15 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: flock.c,v 1.7 2013/02/07 13:57:40 tron Exp $ */ +/* $NetBSD: flock.c,v 1.8 2013/10/29 16:02:15 christos Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: flock.c,v 1.7 2013/02/07 13:57:40 tron Exp $"); +__RCSID("$NetBSD: flock.c,v 1.8 2013/10/29 16:02:15 christos Exp $"); #include <stdio.h> #include <string.h> @@ -149,7 +149,7 @@ int main(int argc, char *argv[]) { int c; - int lock = LOCK_EX; + int lock = 0; double timeout = 0; int cls = 0; int fd = -1; @@ -170,7 +170,8 @@ main(int argc, char *argv[]) debug++; break; case 'x': - if (lock & ~LOCK_NB) +#define T(l) (lock & ~LOCK_NB) != (l) && (lock & ~LOCK_NB) != 0 + if (T(LOCK_EX)) goto badlock; lock |= LOCK_EX; break; @@ -178,12 +179,12 @@ main(int argc, char *argv[]) lock |= LOCK_NB; break; case 's': - if (lock & ~LOCK_NB) + if (T(LOCK_SH)) goto badlock; lock |= LOCK_SH; break; case 'u': - if (lock & ~LOCK_NB) + if (T(LOCK_UN)) goto badlock; lock |= LOCK_UN; break; @@ -205,6 +206,9 @@ main(int argc, char *argv[]) argc -= optind; argv += optind; + if ((lock & ~LOCK_NB) == 0) + usage("Missing lock type flag"); + switch (argc) { case 0: usage("Missing lock file argument");