Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/lib/libsa move "ls" utility from i386/stand/libsa here



details:   https://anonhg.NetBSD.org/src/rev/9117cc3d9081
branches:  trunk
changeset: 471890:9117cc3d9081
user:      drochner <drochner%NetBSD.org@localhost>
date:      Wed Apr 14 11:32:50 1999 +0000

description:
move "ls" utility from i386/stand/libsa here

diffstat:

 sys/lib/libsa/Makefile |    4 +-
 sys/lib/libsa/ufs.h    |    4 +-
 sys/lib/libsa/ufs_ls.c |  121 +++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 126 insertions(+), 3 deletions(-)

diffs (158 lines):

diff -r 07a4ce226ce4 -r 9117cc3d9081 sys/lib/libsa/Makefile
--- a/sys/lib/libsa/Makefile    Wed Apr 14 11:19:23 1999 +0000
+++ b/sys/lib/libsa/Makefile    Wed Apr 14 11:32:50 1999 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: Makefile,v 1.29 1999/04/01 05:12:20 simonb Exp $
+#      $NetBSD: Makefile,v 1.30 1999/04/14 11:32:51 drochner Exp $
 
 LIB=   sa
 MKPIC= no
@@ -36,7 +36,7 @@
 # boot filesystems
 SRCS+= nfs.c tftp.c
 .endif
-SRCS+= ufs.c cd9660.c ustarfs.c
+SRCS+= ufs.c ufs_ls.c cd9660.c ustarfs.c
 
 # only needed during build
 libinstall::
diff -r 07a4ce226ce4 -r 9117cc3d9081 sys/lib/libsa/ufs.h
--- a/sys/lib/libsa/ufs.h       Wed Apr 14 11:19:23 1999 +0000
+++ b/sys/lib/libsa/ufs.h       Wed Apr 14 11:32:50 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ufs.h,v 1.5 1995/10/20 01:35:25 cgd Exp $      */
+/*     $NetBSD: ufs.h,v 1.6 1999/04/14 11:32:51 drochner Exp $ */
 
 /*-
  * Copyright (c) 1993
@@ -43,3 +43,5 @@
                size_t size, size_t *resid));
 off_t  ufs_seek __P((struct open_file *f, off_t offset, int where));
 int    ufs_stat __P((struct open_file *f, struct stat *sb));
+
+void ufs_ls __P((const char *));
diff -r 07a4ce226ce4 -r 9117cc3d9081 sys/lib/libsa/ufs_ls.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/lib/libsa/ufs_ls.c    Wed Apr 14 11:32:50 1999 +0000
@@ -0,0 +1,121 @@
+/*     $NetBSD: ufs_ls.c,v 1.1 1999/04/14 11:32:50 drochner Exp $       */
+
+/*
+ * Copyright (c) 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * Copyright (c) 1996
+ *     Matthias Drochner.  All rights reserved.
+ *
+ * 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.
+ */
+
+
+#include <sys/param.h>
+#include <ufs/ufs/dinode.h>
+#include <ufs/ufs/dir.h>
+
+#include "stand.h"
+#include "ufs.h"
+
+static char    *typestr[] = {
+       "unknown",
+       "FIFO",
+       "CHR",
+       0,
+       "DIR",
+       0,
+       "BLK",
+       0,
+       "REG",
+       0,
+       "LNK",
+       0,
+       "SOCK",
+       0,
+       "WHT"
+};
+
+void 
+ufs_ls(path)
+       const char *path;
+{
+       int             fd;
+       struct stat     sb;
+       size_t          size;
+       char            dirbuf[DIRBLKSIZ];
+
+       fd = open(path, 0);
+       if (fd < 0) {
+               printf("ls: %s\n", strerror(errno));
+               return;
+       }
+       if (fstat(fd, &sb) < 0) {
+               printf("stat: %s\n", strerror(errno));
+               goto out;
+       }
+       if ((sb.st_mode & IFMT) != IFDIR) {
+               printf("%s: %s\n", path, strerror(ENOTDIR));
+               goto out;
+       }
+       while ((size = read(fd, dirbuf, DIRBLKSIZ)) == DIRBLKSIZ) {
+               struct direct  *dp, *edp;
+
+               dp = (struct direct *) dirbuf;
+               edp = (struct direct *) (dirbuf + size);
+
+               while (dp < edp) {
+                       if (dp->d_ino != (ino_t) 0) {
+                               char           *t;
+
+                               if ((dp->d_namlen > MAXNAMLEN + 1) ||
+                                   (dp->d_type >
+                                     sizeof(typestr) / sizeof(char *) - 1) ||
+                                   !(t = typestr[dp->d_type])) {
+                                       /*
+                                        * This does not handle "old"
+                                        * filesystems properly. On little
+                                        * endian machines, we get a bogus
+                                        * type name if the namlen matches a
+                                        * valid type identifier. We could
+                                        * check if we read namlen "0" and
+                                        * handle this case specially, if
+                                        * there were a pressing need...
+                                        */
+                                       printf("bad dir entry\n");
+                                       goto out;
+                               }
+                               printf("%d: %s (%s)\n", dp->d_ino,
+                                      dp->d_name, t);
+                       }
+                       dp = (struct direct *) ((char *) dp + dp->d_reclen);
+               }
+       }
+out:
+       close(fd);
+}



Home | Main Index | Thread Index | Old Index