Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 8 Feb 2010 15:42:56 +0000 (UTC)
From:      Jaakko Heinonen <jh@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r203665 - head/bin/ls
Message-ID:  <201002081542.o18FguQs085221@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jh
Date: Mon Feb  8 15:42:55 2010
New Revision: 203665
URL: http://svn.freebsd.org/changeset/base/203665

Log:
  Make sure that FTS_COMFOLLOW is not set when the -P option is in effect.
  Otherwise the -i option will show the inode number of the referenced file
  for symbolic links given on the command line. Similarly, the file color
  was printed according to the link target in colorized output.
  
  PR:		bin/102394
  Reviewed by:	jilles
  MFC after:	2 weeks

Modified:
  head/bin/ls/ls.c

Modified: head/bin/ls/ls.c
==============================================================================
--- head/bin/ls/ls.c	Mon Feb  8 15:39:48 2010	(r203664)
+++ head/bin/ls/ls.c	Mon Feb  8 15:42:55 2010	(r203665)
@@ -113,6 +113,7 @@ static int f_listdir;		/* list actual di
 static int f_listdot;		/* list files beginning with . */
 static int f_noautodot;		/* do not automatically enable -A for root */
        int f_longform;		/* long listing format */
+static int f_nofollow;		/* don't follow symbolic link arguments */
        int f_nonprint;		/* show unprintables as ? */
 static int f_nosort;		/* don't sort output */
        int f_notabs;		/* don't use tab-separated multi-col output */
@@ -234,6 +235,7 @@ main(int argc, char *argv[])
 			break;
 		case 'H':
 			fts_options |= FTS_COMFOLLOW;
+			f_nofollow = 0;
 			break;
 		case 'G':
 			setenv("CLICOLOR", "", 1);
@@ -241,11 +243,13 @@ main(int argc, char *argv[])
 		case 'L':
 			fts_options &= ~FTS_PHYSICAL;
 			fts_options |= FTS_LOGICAL;
+			f_nofollow = 0;
 			break;
 		case 'P':
 			fts_options &= ~FTS_COMFOLLOW;
 			fts_options &= ~FTS_LOGICAL;
 			fts_options |= FTS_PHYSICAL;
+			f_nofollow = 1;
 			break;
 		case 'R':
 			f_recursive = 1;
@@ -396,10 +400,10 @@ main(int argc, char *argv[])
 		fts_options |= FTS_NOSTAT;
 
 	/*
-	 * If not -F, -d or -l options, follow any symbolic links listed on
+	 * If not -F, -P, -d or -l options, follow any symbolic links listed on
 	 * the command line.
 	 */
-	if (!f_longform && !f_listdir && (!f_type || f_slash))
+	if (!f_nofollow && !f_longform && !f_listdir && (!f_type || f_slash))
 		fts_options |= FTS_COMFOLLOW;
 
 	/*



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