add locking where it exists
diff --git a/Modules/dbhashmodule.c b/Modules/dbhashmodule.c
index e04cebc..a8df027 100644
--- a/Modules/dbhashmodule.c
+++ b/Modules/dbhashmodule.c
@@ -334,19 +334,30 @@
 	  return NULL;
     if (flag != NULL) {
 	/* XXX need a way to pass O_EXCL, O_EXLOCK, O_NONBLOCK, O_SHLOCK */
-	if (strcmp(flag, "r") == 0)
+	if (flag[0] == 'r')
 	    flags = O_RDONLY;
-	else if (strcmp(flag, "w") == 0)
+	else if (flag[0] == 'w')
 	    flags = O_RDWR;
-	else if (strcmp(flag, "c") == 0)
+	else if (flag[0] == 'c')
 	    flags = O_RDWR|O_CREAT;
-	else if (strcmp(flag, "n") == 0)
+	else if (flag[0] == 'n')
 	    flags = O_RDWR|O_CREAT|O_TRUNC;
 	else {
 	    err_setstr(DbhashError,
-		       "Flag should be one of 'r', 'w', 'c' or 'n'");
+		       "Flag should begin with 'r', 'w', 'c' or 'n'");
 	    return NULL;
 	}
+	if (flag[1] == 'l') {
+#if defined(O_EXLOCK) && defined(O_SHLOCK)
+	    if (flag[0] == 'r')
+	        flags |= O_SHLOCK;
+	    else
+		flags |= O_EXLOCK;
+#else
+	    err_setstr(DbhashError, "locking not supported on this platform");
+	    return NULL;
+#endif
+	}
     }
     return newdbhashobject(file, flags, mode,
 			   bsize, ffactor, nelem, cachesize, hash, lorder);