[comp.os.minix] Patches for ls

cechew@bruce.OZ (Earl Chew) (08/29/89)

Here are some patches for my recent ls to bring it up to patchlevel 1.7.

Problems fixed are:

o long user names and group names truncated to prevent columns being corrupted
o declare errno on behalf of error.h
o support for fifo's and limited support for symbolic links
o char *malloc() instead of void *malloc()

There has been a patch posted for getdents by Bruce Culbertson.

This file contains patches for ls.c ls.man and ls.doc.

Earl

-------------------------------------------------------------------------------
diff -c old/ls.c new/ls.c
*** old/ls.c	Tue Aug 29 10:08:11 1989
--- new/ls.c	Sun Aug 27 23:59:24 1989
***************
*** 13,19
   * are no restrictions with regard to the size of the directory file
   * since memory is allocated dynamically.
   *
!  * Patchlevel 1.6
   *
   * Edit History:
   *

--- 13,19 -----
   * are no restrictions with regard to the size of the directory file
   * since memory is allocated dynamically.
   *
!  * Patchlevel 1.7
   *
   * Edit History:
   *
***************
*** 17,22
   *
   * Edit History:
   *
   * 16-May-1989	Option -n shouldn't look in /etc/passwd. Use new
   *		strerror in string.h, add prototype for itoa().
   * 30-Apr-1989	Changed stat failure message to not found. Include

--- 17,28 -----
   *
   * Edit History:
   *
+  * 27-Aug-1989	Added declaration of errno for old errno.h and
+  *		char *malloc() for old include files. Added
+  *		support for named FIFO's. Changed user and group
+  *		name format to %6.6s so that long names won't
+  *		muck up columns. Later will have to add
+  *		symbolic link support for -l and -L.
   * 16-May-1989	Option -n shouldn't look in /etc/passwd. Use new
   *		strerror in string.h, add prototype for itoa().
   * 30-Apr-1989	Changed stat failure message to not found. Include
***************
*** 119,125
  struct group *getgrgid();		/* get group from gid */
  int getuid();				/* get uid of this process */
  int getopt();				/* parse the options */
- void *malloc();				/* memory allocator */
  void free();				/* free memory */
  int isatty();				/* stdout is a terminal */
  void exit();				/* terminate */

--- 125,130 -----
  struct group *getgrgid();		/* get group from gid */
  int getuid();				/* get uid of this process */
  int getopt();				/* parse the options */
  void free();				/* free memory */
  int isatty();				/* stdout is a terminal */
  void exit();				/* terminate */
***************
*** 124,129
  int isatty();				/* stdout is a terminal */
  void exit();				/* terminate */
  
  /*
   * External Variables.
   */

--- 129,140 -----
  int isatty();				/* stdout is a terminal */
  void exit();				/* terminate */
  
+ #ifdef MINIX
+ char *malloc();				/* memory allocator */
+ #else
+ void *malloc();				/* memory allocator */
+ #endif
+ 
  /*
   * External Variables.
   */
***************
*** 130,135
  
  extern int optind;			/* next argument */
  
  /*
   * Forward declarations.
   */

--- 141,150 -----
  
  extern int optind;			/* next argument */
  
+ #ifdef	MINIX
+ extern int errno;			/* error code */
+ #endif
+ 
  /*
   * Forward declarations.
   */
***************
*** 764,769
        pad++;
      else {
        if ((p->status->st_mode & S_IFMT) == S_IFDIR)    (void) putchar('/');
        else if (TEST('F') && p->status->st_mode & 0111) (void) putchar('*');
        else pad++;
      }

--- 779,787 -----
        pad++;
      else {
        if ((p->status->st_mode & S_IFMT) == S_IFDIR)    (void) putchar('/');
+ #ifdef	S_IFLNK
+       if ((p->status->st_mode & S_IFMT) == S_IFLNK)    (void) putchar('@');
+ #endif
        else if (TEST('F') && p->status->st_mode & 0111) (void) putchar('*');
        else pad++;
      }
***************
*** 812,817
    if      (filetype == S_IFDIR) filecode = 'd';
    else if (filetype == S_IFBLK) filecode = 'b';
    else if (filetype == S_IFCHR) filecode = 'c';
    else                          filecode = '-';
  
    for (i = 0, mode = sp->st_mode; i < 3; mode >>= 3, i++)

--- 830,841 -----
    if      (filetype == S_IFDIR) filecode = 'd';
    else if (filetype == S_IFBLK) filecode = 'b';
    else if (filetype == S_IFCHR) filecode = 'c';
+ #ifdef S_IFIFO
+   else if (filetype == S_IFIFO) filecode = 'p';
+ #endif
+ #ifdef S_IFLNK
+   else if (filetype == S_IFLNK) filecode = 'l';
+ #endif
    else                          filecode = '-';
  
    for (i = 0, mode = sp->st_mode; i < 3; mode >>= 3, i++)
***************
*** 823,829
    if (TEST('o')) {
      if (! TEST('n') && ((pwent && pwent->pw_uid == sp->st_uid) ||
                          (pwent = getpwuid(sp->st_uid)) != NIL))
!       (void) printf("%6s ", pwent->pw_name);
      else
        (void) printf("%6d ", sp->st_uid);
    }

--- 847,853 -----
    if (TEST('o')) {
      if (! TEST('n') && ((pwent && pwent->pw_uid == sp->st_uid) ||
                          (pwent = getpwuid(sp->st_uid)) != NIL))
!       (void) printf("%6.6s ", pwent->pw_name);
      else
        (void) printf("%6d ", sp->st_uid);
    }
***************
*** 831,837
    if (TEST('g')) {
      if (! TEST('n') && ((grent && grent->gr_gid == sp->st_gid) ||
                          (grent = getgrgid(sp->st_gid)) != NIL))
!       (void) printf("%6s ", grent->gr_name);
      else
        (void) printf("%6d ", sp->st_gid);
    }

--- 855,861 -----
    if (TEST('g')) {
      if (! TEST('n') && ((grent && grent->gr_gid == sp->st_gid) ||
                          (grent = getgrgid(sp->st_gid)) != NIL))
!       (void) printf("%6.6s ", grent->gr_name);
      else
        (void) printf("%6d ", sp->st_gid);
    }
diff -c old/ls.doc new/ls.doc
*** old/ls.doc	Tue Aug 29 10:09:20 1989
--- new/ls.doc	Tue Aug 29 10:17:58 1989
***************
*** 60,66
  
  
  
! Printed 3/23/89               MINIX                             1
  
  
  

--- 60,66 -----
  
  
  
! Printed 8/29/89               MINIX                             1
  
  
  
***************
*** 113,120
  
       -C  Multicolumn output with entries sorted down the columns.
  
!      -F  Cause directories to be marked with a trailing / and
!          executables to be marked with a trailing *.
  
       -R  Recursively list subdirectories encountered.
  

--- 113,121 -----
  
       -C  Multicolumn output with entries sorted down the columns.
  
!      -F  Cause directories to be marked with a trailing /, sym-
!          bolic links with a trailing @ and executables with a
!          trailing *.
  
       -R  Recursively list subdirectories encountered.
  
***************
*** 121,128
       The mode printed under the -l option consists of 10 charac-
       ters that are interpreted as follows:
  
-      The first character is:
-           d    if the entry is a directory
  
  
  

--- 122,127 -----
       The mode printed under the -l option consists of 10 charac-
       ters that are interpreted as follows:
  
  
  
  
***************
*** 126,132
  
  
  
- Printed 3/23/89               MINIX                             2
  
  
  

--- 125,130 -----
  
  
  
  
  Printed 8/29/89               MINIX                             2
  
***************
*** 128,133
  
  Printed 3/23/89               MINIX                             2
  
  
  
  

--- 126,132 -----
  
  
  
+ Printed 8/29/89               MINIX                             2
  
  
  
***************
*** 133,138
  
  
  
  LS(1)               Minix Programmer's Manual               LS(1)
  
  

--- 132,138 -----
  
  
  
+ 
  LS(1)               Minix Programmer's Manual               LS(1)
  
  
***************
*** 137,142
  
  
  
            b    if the entry is a block special file
            c    if the entry is a character special file
            -    if the entry is an ordinary file

--- 137,144 -----
  
  
  
+      The first character is:
+           d    if the entry is a directory
            b    if the entry is a block special file
            c    if the entry is a character special file
            p    if the entry is a FIFO special file
***************
*** 139,144
  
            b    if the entry is a block special file
            c    if the entry is a character special file
            -    if the entry is an ordinary file
  
       The next 9 characters are interpreted as three sets of three

--- 141,148 -----
            d    if the entry is a directory
            b    if the entry is a block special file
            c    if the entry is a character special file
+           p    if the entry is a FIFO special file
+           l    if the entry is a symbolic link
            -    if the entry is an ordinary file
  
       The next 9 characters are interpreted as three sets of three
***************
*** 188,198
  
  
  
! 
! 
! 
! 
! Printed 3/23/89               MINIX                             3
  
  
  

--- 192,198 -----
  
  
  
! Printed 8/29/89               MINIX                             3
  
  
  
diff -c old/ls.man new/ls.man
*** old/ls.man	Tue Aug 29 10:09:22 1989
--- new/ls.man	Tue Aug 29 10:15:03 1989
***************
*** 104,111
  Multicolumn output with entries sorted down the columns.
  .TP 4
  \-F
! Cause directories to be marked with a trailing / and executables to be
! marked with a trailing *.
  .TP 4
  \-R
  Recursively list subdirectories encountered.

--- 104,111 -----
  Multicolumn output with entries sorted down the columns.
  .TP 4
  \-F
! Cause directories to be marked with a trailing /, symbolic links
! with a trailing @ and executables with a trailing *.
  .TP 4
  \-R
  Recursively list subdirectories encountered.
***************
*** 120,125
  	b	if the entry is a block special file
  .br
  	c	if the entry is a character special file
  .br
  	-	if the entry is an ordinary file
  .PP

--- 120,129 -----
  	b	if the entry is a block special file
  .br
  	c	if the entry is a character special file
+ .br
+ 	p	if the entry is a FIFO special file
+ .br
+ 	l	if the entry is a symbolic link
  .br
  	-	if the entry is an ordinary file
  .PP
-------------------------------------------------------------------------------