BSD 4_3_Net_2 release
[unix-history] / usr / src / bin / ls / print.c
index d486fdf..09ab426 100644 (file)
@@ -5,21 +5,37 @@
  * This code is derived from software contributed to Berkeley by
  * Michael Fischbein.
  *
  * This code is derived from software contributed to Berkeley by
  * Michael Fischbein.
  *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)print.c    5.19 (Berkeley) %G%";
+static char sccsid[] = "@(#)print.c    5.24 (Berkeley) 10/19/90";
 #endif /* not lint */
 
 #include <sys/param.h>
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -45,7 +61,8 @@ printlong(stats, num)
        LS *stats;
        register int num;
 {
        LS *stats;
        register int num;
 {
-       char *user_from_uid(), *group_from_gid();
+       extern int errno;
+       char modep[15], *user_from_uid(), *group_from_gid(), *strerror();
 
        if (f_total)
                (void)printf("total %lu\n", f_kblocks ?
 
        if (f_total)
                (void)printf("total %lu\n", f_kblocks ?
@@ -58,9 +75,9 @@ printlong(stats, num)
                        (void)printf("%4ld ", f_kblocks ?
                            howmany(stats->lstat.st_blocks, 2) :
                            stats->lstat.st_blocks);
                        (void)printf("%4ld ", f_kblocks ?
                            howmany(stats->lstat.st_blocks, 2) :
                            stats->lstat.st_blocks);
-               printperms(stats->lstat.st_mode);
-               (void)printf("%3u %-*s ", stats->lstat.st_nlink, UT_NAMESIZE,
-                   user_from_uid(stats->lstat.st_uid, 0));
+               (void)strmode(stats->lstat.st_mode, modep);
+               (void)printf("%s %3u %-*s ", modep, stats->lstat.st_nlink,
+                   UT_NAMESIZE, user_from_uid(stats->lstat.st_uid, 0));
                if (f_group)
                        (void)printf("%-*s ", UT_NAMESIZE,
                            group_from_gid(stats->lstat.st_gid, 0));
                if (f_group)
                        (void)printf("%-*s ", UT_NAMESIZE,
                            group_from_gid(stats->lstat.st_gid, 0));
@@ -167,7 +184,10 @@ printtime(ftime)
                (void)putchar(longstring[i]);
 
 #define        SIXMONTHS       ((DAYSPERNYEAR / 2) * SECSPERDAY)
                (void)putchar(longstring[i]);
 
 #define        SIXMONTHS       ((DAYSPERNYEAR / 2) * SECSPERDAY)
-       if (ftime + SIXMONTHS > time((time_t *)NULL))
+       if (f_sectime)
+               for (i = 11; i < 24; i++)
+                       (void)putchar(longstring[i]);
+       else if (ftime + SIXMONTHS > time((time_t *)NULL))
                for (i = 11; i < 16; ++i)
                        (void)putchar(longstring[i]);
        else {
                for (i = 11; i < 16; ++i)
                        (void)putchar(longstring[i]);
        else {
@@ -178,113 +198,6 @@ printtime(ftime)
        (void)putchar(' ');
 }
 
        (void)putchar(' ');
 }
 
-/*
- * do the permissions printing, passed the mode
- */
-printperms(mode)
-       mode_t mode;
-{
-        /* print type */
-       switch (mode & S_IFMT) {
-       case S_IFDIR:                   /* directory */
-               (void)putchar('d');
-               break;
-       case S_IFCHR:                   /* character special */
-               (void)putchar('c');
-               break;
-       case S_IFBLK:                   /* block special */
-               (void)putchar('b');
-               break;
-       case S_IFREG:                   /* regular */
-               (void)putchar('-');
-               break;
-       case S_IFLNK:                   /* symbolic link */
-               (void)putchar('l');
-               break;
-       case S_IFSOCK:                  /* socket */
-               (void)putchar('s');
-               break;
-#ifdef S_IFIFO
-       case S_IFIFO:                   /* fifo */
-               (void)putchar('p');
-               break;
-#endif
-       default:                        /* unknown */
-               (void)putchar('?');
-               break;
-       }
-       /* usr */
-       if (mode & S_IRUSR)
-               (void)putchar('r');
-       else
-               (void)putchar('-');
-       if (mode & S_IWUSR)
-               (void)putchar('w');
-       else
-               (void)putchar('-');
-       switch (mode & (S_IXUSR | S_ISUID)) {
-       case 0:
-               (void)putchar('-');
-               break;
-       case S_IXUSR:
-               (void)putchar('x');
-               break;
-       case S_ISUID:
-               (void)putchar('S');
-               break;
-       case S_IXUSR | S_ISUID:
-               (void)putchar('s');
-               break;
-       }
-       /* group */
-       if (mode & S_IRGRP)
-               (void)putchar('r');
-       else
-               (void)putchar('-');
-       if (mode & S_IWGRP)
-               (void)putchar('w');
-       else
-               (void)putchar('-');
-       switch (mode & (S_IXGRP | S_ISGID)) {
-       case 0:
-               (void)putchar('-');
-               break;
-       case S_IXGRP:
-               (void)putchar('x');
-               break;
-       case S_ISGID:
-               (void)putchar('S');
-               break;
-       case S_IXGRP | S_ISGID:
-               (void)putchar('s');
-               break;
-       }
-       /* other */
-       if (mode & S_IROTH)
-               (void)putchar('r');
-       else
-               (void)putchar('-');
-       if (mode & S_IWOTH)
-               (void)putchar('w');
-       else
-               (void)putchar('-');
-       switch (mode & (S_IXOTH | S_ISVTX)) {
-       case 0:
-               (void)putchar('-');
-               break;
-       case S_IXOTH:
-               (void)putchar('x');
-               break;
-       case S_ISVTX:
-               (void)putchar('T');
-               break;
-       case S_IXOTH | S_ISVTX:
-               (void)putchar('t');
-               break;
-       }
-       (void)putchar(' ');
-}
-
 printtype(mode)
        mode_t mode;
 {
 printtype(mode)
        mode_t mode;
 {