[comp.bugs.4bsd] ls -l obscures important information

matt@oddjob.UUCP (03/12/87)

In article <1264@sphinx.UChicago.UUCP> kdw1@sphinx.UUCP (Keith Waclena) writes:
) I don't know what version of Unix you're using (4.[23]?), but System V
) (release 2.0 and higher)'s ls would have displayed a capital S in the 
) example above to indicate that the execute permission was not set.

Good idea.  Here's a change to the 4.3 "ls" (and its man page) to
do the same thing.

*** /tmp/,RCSt1016260	Thu Mar 12 14:28:21 1987
--- ls.c	Thu Mar 12 14:24:36 1987
***************
*** 575,587 ****
  
  int	m1[] = { 1, S_IREAD>>0, 'r', '-' };
  int	m2[] = { 1, S_IWRITE>>0, 'w', '-' };
! int	m3[] = { 2, S_ISUID, 's', S_IEXEC>>0, 'x', '-' };
  int	m4[] = { 1, S_IREAD>>3, 'r', '-' };
  int	m5[] = { 1, S_IWRITE>>3, 'w', '-' };
! int	m6[] = { 2, S_ISGID, 's', S_IEXEC>>3, 'x', '-' };
  int	m7[] = { 1, S_IREAD>>6, 'r', '-' };
  int	m8[] = { 1, S_IWRITE>>6, 'w', '-' };
! int	m9[] = { 2, S_ISVTX, 't', S_IEXEC>>6, 'x', '-' };
  
  int	*m[] = { m1, m2, m3, m4, m5, m6, m7, m8, m9};
  
--- 575,587 ----
  
  int	m1[] = { 1, S_IREAD>>0, 'r', '-' };
  int	m2[] = { 1, S_IWRITE>>0, 'w', '-' };
! int	m3[] = { 3, S_ISUID|(S_IEXEC>>0), 's', S_ISUID, 'S', S_IEXEC>>0, 'x', '-' };
  int	m4[] = { 1, S_IREAD>>3, 'r', '-' };
  int	m5[] = { 1, S_IWRITE>>3, 'w', '-' };
! int	m6[] = { 3, S_ISGID|(S_IEXEC>>3), 's', S_ISGID, 'S', S_IEXEC>>3, 'x', '-' };
  int	m7[] = { 1, S_IREAD>>6, 'r', '-' };
  int	m8[] = { 1, S_IWRITE>>6, 'w', '-' };
! int	m9[] = { 3, S_ISVTX|(S_IEXEC>>6), 't', S_ISVTX, 'T', S_IEXEC>>6, 'x', '-' };
  
  int	*m[] = { m1, m2, m3, m4, m5, m6, m7, m8, m9};
  
***************
*** 596,604 ****
  		register int *pairp = *mp++;
  		register int n = *pairp++;
  
! 		while (--n >= 0 && (flags&*pairp++) == 0)
! 			pairp++;
! 		*lp++ = *pairp;
  	}
  	return (lp);
  }
--- 596,604 ----
  		register int *pairp = *mp++;
  		register int n = *pairp++;
  
! 		while (--n >= 0 && (flags&*pairp) != *pairp)
! 			pairp += 2;
! 		*lp++ = pairp[n>=0];
  	}
  	return (lp);
  }
*** man/man1/ls.1	Mon May 12 16:32:00 1986
--- man.local/man1/ls.1	Thu Mar 12 14:37:56 1987
***************
*** 3,8 ****
--- 3,9 ----
  .\" specifies the terms and conditions for redistribution.
  .\"
  .\"	@(#)ls.1	6.4 (Berkeley) 5/12/86
+ .\"	reflect printing of 'S' or 'T' when unset 'x' bit is hidden
  .\"
  .TH LS 1 "May 12, 1986"
  .UC
***************
*** 195,200 ****
--- 196,206 ----
  See
  .IR  chmod (1)
  for the meaning of this mode.
+ Usually the `s' and `t' characters hide an execute permission bit
+ which is set.
+ If the hidden bit is
+ .I not
+ set, then `S' or `T' is printed instead.
  .PP
  When the sizes of the files in a directory
  are listed, a total count of blocks,
________________________________________________________
Matt	     University		matt@oddjob.uchicago.edu
Crawford     of Chicago     {astrovax,ihnp4}!oddjob!matt