home *** CD-ROM | disk | FTP | other *** search
/ The UNIX CD Bookshelf / OREILLY_TUCB_UNIX_CD.iso / upt / examples / SOURCES / SLS / I386 / SLS. next >
Encoding:
Text File  |  1998-07-24  |  6.1 KB  |  233 lines

  1. *** Makefile.rtr    Thu Nov  5 12:04:57 1992
  2. --- Makefile    Thu Nov  5 12:05:52 1992
  3. ***************
  4. *** 1,6 ****
  5.   BIN= <installdir>/bin
  6.   MAN= <installsharedir>/man/man1
  7. ! CFLAGS= -O
  8.   
  9.   sls:    sls.o
  10.       cc sls.o -o sls
  11. --- 1,6 ----
  12.   BIN= <installdir>/bin
  13.   MAN= <installsharedir>/man/man1
  14. ! CFLAGS= -O -DSYSV
  15.   
  16.   sls:    sls.o
  17.       cc sls.o -o sls
  18. *** sls.c.orig    Thu Nov  5 11:10:59 1992
  19. --- sls.c    Thu Nov  5 12:00:29 1992
  20. ***************
  21. *** 24,31 ****
  22.   #include <time.h>
  23.   #include <sys/types.h>
  24.   #include <sys/stat.h>
  25. ! #include <sys/dir.h>
  26.   
  27.   #define ISEXEC(m)    (m & (S_IEXEC|(S_IEXEC>>3)|(S_IEXEC>>6)))
  28.   #define MAXUIDS        200    /* max #of user names from passwd file */
  29.   #define MAXGIDS        100    /* max #of group names from group file */
  30. --- 24,33 ----
  31.   #include <time.h>
  32.   #include <sys/types.h>
  33.   #include <sys/stat.h>
  34. ! #include <dirent.h>
  35.   
  36. + #define direct dirent
  37.   #define ISEXEC(m)    (m & (S_IEXEC|(S_IEXEC>>3)|(S_IEXEC>>6)))
  38.   #define MAXUIDS        200    /* max #of user names from passwd file */
  39.   #define MAXGIDS        100    /* max #of group names from group file */
  40. ***************
  41. *** 35,47 ****
  42. --- 37,53 ----
  43.        * or reverse order if it is a sort key; leading '0' indicates zero-fill
  44.        * (numeric fields) */
  45.   #define F_ADATE        'a'    /* access date (optional fmtdate string) */
  46. + #ifndef SYSV
  47.   #define F_BLOCKS    'b'    /* #allocated (512-byte) blocks (+ m,k,c|b) */
  48. + #endif
  49.   #define F_CDATE        'c'    /* inode change date */
  50.   #define F_DEV        'd'    /* device number inode resides on */
  51.   #define F_GROUPA    'g'    /* ascii group name (from group file) */
  52.   #define F_GROUPN    'G'    /* numeric group id */
  53.   #define F_INODE        'i'    /* inode number */
  54. + #ifndef SYSV
  55.   #define F_BLKSIZE    'k'    /* optimal file system block size */
  56. + #endif
  57.   #define F_NLINKS    'l'    /* number of hard links */
  58.   #define F_MDATE        'm'    /* modify date (optional fmtdate string) */
  59.   #define F_NAME        'n'    /* file name (+ b=basename,a=ascii,s=suffix) */
  60. ***************
  61. *** 109,114 ****
  62. --- 115,123 ----
  63.       if ((pav = getenv("SLS_LONGFMT")) != NULL && strlen(pav) > 0)
  64.       longfmt = copystr (pav);
  65.       Use_less = Follow_links = Recursive = Stat_dirs = All_files = 0;
  66. + #ifdef SYSV
  67. +     Follow_links = 1;
  68. + #endif
  69.       Dostat = 0;
  70.       Sixmosago = getsixmosago ();    /* in case Use_less==1 */
  71.   
  72. ***************
  73. *** 233,240 ****
  74. --- 242,254 ----
  75.       return;
  76.       }
  77.   
  78. + #ifndef SYSV
  79.       if ((!Follow_links && lstat (fname, &sbuf) != 0)
  80.       || (Follow_links && stat (fname, &sbuf) != 0))
  81. + #else
  82. +         if (fname == NULL || *fname == NULL) fname = ".";
  83. +         if (Follow_links && stat (fname, &sbuf) != 0)
  84. + #endif
  85.       {
  86.       fprintf (stderr, "?unable to stat file '%s' (errno=%d)\n",
  87.           fname, errno);
  88. ***************
  89. *** 296,302 ****
  90.       /* loop through directory entries */
  91.       for (dentp = readdir(dirp); dentp != NULL; dentp = readdir(dirp))
  92.       {
  93. !     if (len + dentp->d_namlen >= sizeof(fname))
  94.       {
  95.           *pfname = '\0';    /* so we don't see previous filename part */
  96.           fprintf (stderr, "?file name too long: '%s%s'\n",
  97. --- 310,316 ----
  98.       /* loop through directory entries */
  99.       for (dentp = readdir(dirp); dentp != NULL; dentp = readdir(dirp))
  100.       {
  101. !     if (len + strlen(dentp->d_name) >= sizeof(fname))
  102.       {
  103.           *pfname = '\0';    /* so we don't see previous filename part */
  104.           fprintf (stderr, "?file name too long: '%s%s'\n",
  105. ***************
  106. *** 428,435 ****
  107. --- 442,453 ----
  108.           case S_IFDIR:    p1 = "d"; break;
  109.           case S_IFCHR:    p1 = "c"; break;
  110.           case S_IFBLK:    p1 = "b"; break;
  111. + #ifdef S_IFLNK
  112.           case S_IFLNK:    p1 = "l"; break;
  113. + #endif
  114. + #ifdef S_IFSOCK
  115.           case S_IFSOCK:    p1 = "s"; break;
  116. + #endif
  117.           case S_IFIFO:    p1 = "p"; break;
  118.           default:        p1 = "?"; break;
  119.           }
  120. ***************
  121. *** 439,446 ****
  122. --- 457,468 ----
  123.           case S_IFDIR:    p2 = "d"; break;
  124.           case S_IFCHR:    p2 = "c"; break;
  125.           case S_IFBLK:    p2 = "b"; break;
  126. + #ifdef S_IFLNK
  127.           case S_IFLNK:    p2 = "l"; break;
  128. + #endif
  129. + #ifdef S_IFSOCK
  130.           case S_IFSOCK:    p2 = "s"; break;
  131. + #endif
  132.           case S_IFIFO:    p2 = "p"; break;
  133.           default:        p2 = "?"; break;
  134.           }
  135. ***************
  136. *** 506,519 ****
  137. --- 528,545 ----
  138.           l1 = psbuf1->st_size;
  139.           l2 = psbuf2->st_size;
  140.           break;
  141. + #ifdef F_BLOCKS
  142.       case F_BLOCKS:
  143.           l1 = psbuf1->st_blocks;
  144.           l2 = psbuf2->st_blocks;
  145.           break;
  146. + #endif
  147. + #ifdef F_BLKSIZE
  148.       case F_BLKSIZE:
  149.           l1 = psbuf1->st_blksize;
  150.           l2 = psbuf2->st_blksize;
  151.           break;
  152. + #endif
  153.       case F_MDATE:
  154.           l1 = psbuf1->st_mtime;
  155.           l2 = psbuf2->st_mtime;
  156. ***************
  157. *** 644,651 ****
  158. --- 670,681 ----
  159.           case S_IFDIR:    ptmp = "d"; break;
  160.           case S_IFCHR:    ptmp = "c"; break;
  161.           case S_IFBLK:    ptmp = "b"; break;
  162. + #ifdef S_IFLNK
  163.           case S_IFLNK:    ptmp = "l"; break;
  164. + #endif
  165. + #ifdef S_IFSOCK
  166.           case S_IFSOCK:    ptmp = "s"; break;
  167. + #endif
  168.           case S_IFIFO:    ptmp = "p"; break;
  169.           default:
  170.           ptmp = "?";
  171. ***************
  172. *** 760,765 ****
  173. --- 790,796 ----
  174.               ++popt;
  175.           }
  176.           break;
  177. + #ifdef F_BLOCKS
  178.       case F_BLOCKS:
  179.           l = (long) psbuf->st_blocks;    /* 512-byte blocks allocated */
  180.           if (*(popt+1) == 'm')
  181. ***************
  182. *** 789,798 ****
  183. --- 820,832 ----
  184.           sprintf (pobuf, fmtstr, l);
  185.           }
  186.           break;
  187. + #endif
  188. + #ifdef F_BLKSIZE
  189.       case F_BLKSIZE:
  190.           fmtstr = getfmtstr ('d', (fwid?fwid:4), leftjust, zerofill);
  191.           sprintf (pobuf, fmtstr, psbuf->st_blksize);
  192.           break;
  193. + #endif
  194.       case F_MDATE:
  195.           if (fwid == 0)
  196.           strcpy (pobuf, fmtdate (psbuf->st_mtime, popt+1, &i));
  197. ***************
  198. *** 853,860 ****
  199. --- 887,898 ----
  200.           switch (psbuf->st_mode & S_IFMT)
  201.           {
  202.           case S_IFDIR:    pc = "/"; break;
  203. + #ifdef S_IFLNK
  204.           case S_IFLNK:    pc = "@"; break;
  205. + #endif
  206. + #ifdef S_IFSOCK
  207.           case S_IFSOCK:    pc = "="; break;
  208. + #endif
  209.           default:
  210.               if (ISEXEC(psbuf->st_mode))
  211.               pc = "*";
  212. ***************
  213. *** 864,869 ****
  214. --- 902,908 ----
  215.           if (fwid == 0)
  216.           {
  217.           strcpy (pobuf, ptmp);
  218. + #ifdef S_IFLNK
  219.           if (c == F_NAMEL && !suffix)
  220.           {    /* add linked-to filename if a symlink */
  221.               if ((psbuf->st_mode & S_IFMT) == S_IFLNK
  222. ***************
  223. *** 874,879 ****
  224. --- 913,919 ----
  225.               strcat (pobuf, lname);
  226.               }
  227.           }
  228. + #endif
  229.           }
  230.           else
  231.           {
  232.