Tcl Source Code

Artifact [fe03a3596b]
Login

Artifact fe03a3596b6b21776159c005ca07d2f5adfdccf3:

Attachment "panic.diff" to ticket [417111ffff] added by vincentdarley 2001-08-09 00:33:13.
Index: tclUnixFile.c
===================================================================
RCS file: /cvsroot/tcl/tcl/unix/tclUnixFile.c,v
retrieving revision 1.10
diff -U3 -r1.10 tclUnixFile.c
--- tclUnixFile.c	2001/07/31 19:12:07	1.10
+++ tclUnixFile.c	2001/08/08 17:32:04
@@ -333,13 +333,24 @@
 		    struct stat buf;
 
 		    if (TclpStat(fname, &buf) != 0) {
-			panic("stat failed on known file");
+			if (TclpLstat(fname, &buf) != 0) {
+			    panic("stat failed on known file");
+			} else {
+			    /* 
+			     * The file is a link to a file which
+			     * doesn't exist.  We define this to
+			     * mean it does not match any defined
+			     * permission.
+			     */
+			    typeOk = 0;
+			}
 		    }
+		    
 		    /* 
 		     * readonly means that there are NO write permissions
 		     * (even for user), but execute is OK for anybody
 		     */
-		    if (
+		    if (typeOk && (
 			((types->perm & TCL_GLOB_PERM_RONLY) &&
 				(buf.st_mode & (S_IWOTH|S_IWGRP|S_IWUSR))) ||
 			((types->perm & TCL_GLOB_PERM_R) &&
@@ -348,7 +359,7 @@
 				(TclpAccess(fname, W_OK) != 0)) ||
 			((types->perm & TCL_GLOB_PERM_X) &&
 				(TclpAccess(fname, X_OK) != 0))
-			) {
+			)) {
 			typeOk = 0;
 		    }
 		}