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");

Reply via email to