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