Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 5 Dec 2010 09:33:04 +0000 (UTC)
From:      Doug Barton <dougb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r216196 - head/usr.bin/stat
Message-ID:  <201012050933.oB59X4xq081654@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dougb
Date: Sun Dec  5 09:33:04 2010
New Revision: 216196
URL: http://svn.freebsd.org/changeset/base/216196

Log:
  Bring in the change from NetBSD 1.18:
  
  "If using stat (the -L flag) and it fails, fall back to lstat().  It
  may be the case that we're examining a broken symlink, and anything is
  better than nothing."
  
  The changes in 1.14 through 1.17 were not relevant to us.
  
  Obtained from:	atatat@NetBSD.org

Modified:
  head/usr.bin/stat/stat.c

Modified: head/usr.bin/stat/stat.c
==============================================================================
--- head/usr.bin/stat/stat.c	Sun Dec  5 09:00:32 2010	(r216195)
+++ head/usr.bin/stat/stat.c	Sun Dec  5 09:33:04 2010	(r216196)
@@ -30,7 +30,7 @@
 #include <sys/cdefs.h>
 #if 0
 #ifndef lint
-__RCSID("$NetBSD: stat.c,v 1.13 2003/07/25 03:21:17 atatat Exp $");
+__RCSID("$NetBSD: stat.c,v 1.18 2004/05/28 04:48:31 atatat Exp $");
 #endif
 #endif
 
@@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$");
 
 #include <ctype.h>
 #include <err.h>
+#include <errno.h>
 #include <grp.h>
 #include <limits.h>
 #include <paths.h>
@@ -313,8 +314,17 @@ main(int argc, char *argv[])
 			rc = fstat(STDIN_FILENO, &st);
 		} else {
 			file = argv[0];
-			if (usestat)
-				rc = stat(file, &st);
+			if (usestat) {
+				/*
+				 * Try stat() and if it fails, fall back to
+				 * lstat() just in case we're examining a
+				 * broken symlink.
+				 */
+				if ((rc = stat(file, &st)) == -1 &&
+				    errno == ENOENT &&
+				    (rc = lstat(file, &st)) == -1)
+					errno = ENOENT;
+			}
 			else
 				rc = lstat(file, &st);
 		}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201012050933.oB59X4xq081654>