Source-Changes-HG archive

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

[src/trunk]: src/sys/lib/libsa reduce size by 1K by sharing the ls code.



details:   https://anonhg.NetBSD.org/src/rev/2ac5d21a03fe
branches:  trunk
changeset: 794625:2ac5d21a03fe
user:      christos <christos%NetBSD.org@localhost>
date:      Thu Mar 20 03:13:18 2014 +0000

description:
reduce size by 1K by sharing the ls code.

diffstat:

 sys/lib/libsa/cd9660.c   |   6 +-
 sys/lib/libsa/dosfs.c    |   6 +-
 sys/lib/libsa/ext2fs.c   |  83 ++++++++++-------------------------------
 sys/lib/libsa/ls.c       |  67 +++++++++++++++++++++++++++++++++-
 sys/lib/libsa/minixfs3.c |  62 +++---------------------------
 sys/lib/libsa/nfs.c      |   6 +-
 sys/lib/libsa/nullfs.c   |   6 +-
 sys/lib/libsa/tftp.c     |   6 +-
 sys/lib/libsa/ufs.c      |  96 +++++++++++++----------------------------------
 sys/lib/libsa/ustarfs.c  |   5 +-
 10 files changed, 138 insertions(+), 205 deletions(-)

diffs (truncated from 581 to 300 lines):

diff -r bfcc9de54e2c -r 2ac5d21a03fe sys/lib/libsa/cd9660.c
--- a/sys/lib/libsa/cd9660.c    Thu Mar 20 01:46:19 2014 +0000
+++ b/sys/lib/libsa/cd9660.c    Thu Mar 20 03:13:18 2014 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: cd9660.c,v 1.29 2012/07/23 00:49:20 mhitch Exp $       */
+/*     $NetBSD: cd9660.c,v 1.30 2014/03/20 03:13:18 christos Exp $     */
 
 /*
  * Copyright (C) 1996 Wolfgang Solfrank.
@@ -401,10 +401,10 @@
 }
 
 #if defined(LIBSA_ENABLE_LS_OP)
+#include "ls.h"
 __compactcall void
 cd9660_ls(struct open_file *f, const char *pattern)
 {
-       printf("Currently ls command is unsupported by cd9660\n");
-       return;
+       lsunsup("cd9660");
 }
 #endif
diff -r bfcc9de54e2c -r 2ac5d21a03fe sys/lib/libsa/dosfs.c
--- a/sys/lib/libsa/dosfs.c     Thu Mar 20 01:46:19 2014 +0000
+++ b/sys/lib/libsa/dosfs.c     Thu Mar 20 03:13:18 2014 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: dosfs.c,v 1.19 2013/10/20 17:15:42 christos Exp $      */
+/*     $NetBSD: dosfs.c,v 1.20 2014/03/20 03:13:18 christos Exp $      */
 
 /*
  * Copyright (c) 1996, 1998 Robert Nordier
@@ -406,11 +406,11 @@
 }
 
 #if defined(LIBSA_ENABLE_LS_OP)
+#include "ls.h"
 __compactcall void
 dosfs_ls(struct open_file *f, const char *pattern)
 {
-       printf("Currently ls command is unsupported by dosfs\n");
-       return;
+       lsunsup("dosfs");
 }
 #endif
 
diff -r bfcc9de54e2c -r 2ac5d21a03fe sys/lib/libsa/ext2fs.c
--- a/sys/lib/libsa/ext2fs.c    Thu Mar 20 01:46:19 2014 +0000
+++ b/sys/lib/libsa/ext2fs.c    Thu Mar 20 03:13:18 2014 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ext2fs.c,v 1.19 2013/10/20 17:17:30 christos Exp $     */
+/*     $NetBSD: ext2fs.c,v 1.20 2014/03/20 03:13:18 christos Exp $     */
 
 /*
  * Copyright (c) 1997 Manuel Bouyer.
@@ -146,30 +146,6 @@
        daddr_t         f_buf_blkno;    /* block number of data block */
 };
 
-#if defined(LIBSA_ENABLE_LS_OP)
-
-#define NELEM(x) (sizeof (x) / sizeof(*x))
-
-typedef struct entry_t entry_t;
-struct entry_t {
-       entry_t *e_next;
-       ino32_t e_ino;
-       uint8_t e_type;
-       char    e_name[1];
-};
-
-static const char    *const typestr[] = {
-       "unknown",
-       "REG",
-       "DIR",
-       "CHR",
-       "BLK",
-       "FIFO",
-       "SOCK",
-       "LNK"
-};
-
-#endif /* LIBSA_ENABLE_LS_OP */
 
 static int read_inode(ino32_t, struct open_file *);
 static int block_map(struct open_file *, indp_t, indp_t *);
@@ -828,6 +804,20 @@
 }
 
 #if defined(LIBSA_ENABLE_LS_OP)
+
+#include "ls.h"
+
+static const char    *const typestr[] = {
+       "unknown",
+       "REG",
+       "DIR",
+       "CHR",
+       "BLK",
+       "FIFO",
+       "SOCK",
+       "LNK"
+};
+
 __compactcall void
 ext2fs_ls(struct open_file *f, const char *pattern)
 {
@@ -835,7 +825,7 @@
        size_t block_size = fp->f_fs->e2fs_bsize;
        char *buf;
        size_t buf_size;
-       entry_t *names = 0, *n, **np;
+       lsentry_t *names = NULL;
 
        fp->f_seekp = 0;
        while (fp->f_seekp < (off_t)fp->f_di.e2di_size) {
@@ -874,47 +864,14 @@
                                printf("bad dir entry\n");
                                goto out;
                        }
-                       if (pattern && !fnmatch(dp->e2d_name, pattern))
-                               continue;
-                       n = alloc(sizeof *n + strlen(dp->e2d_name));
-                       if (!n) {
-                               printf("%d: %s (%s)\n",
-                                       fs2h32(dp->e2d_ino), dp->e2d_name, t);
-                               continue;
-                       }
-                       n->e_ino = fs2h32(dp->e2d_ino);
-                       n->e_type = dp->e2d_type;
-                       strcpy(n->e_name, dp->e2d_name);
-                       for (np = &names; *np; np = &(*np)->e_next) {
-                               if (strcmp(n->e_name, (*np)->e_name) < 0)
-                                       break;
-                       }
-                       n->e_next = *np;
-                       *np = n;
+                       lsadd(&names, pattern, dp->e2d_name,
+                           strlen(dp->e2d_name), fs2h32(dp->e2d_ino), t);
                }
                fp->f_seekp += buf_size;
        }
 
-       if (names) {
-               entry_t *p_names = names;
-               do {
-                       n = p_names;
-                       printf("%d: %s (%s)\n",
-                               n->e_ino, n->e_name, typestr[n->e_type]);
-                       p_names = n->e_next;
-               } while (p_names);
-       } else {
-               printf("not found\n");
-       }
-out:
-       if (names) {
-               do {
-                       n = names;
-                       names = n->e_next;
-                       dealloc(n, 0);
-               } while (names);
-       }
-       return;
+       lsprint(names);
+out:   lsfree(names);
 }
 #endif
 
diff -r bfcc9de54e2c -r 2ac5d21a03fe sys/lib/libsa/ls.c
--- a/sys/lib/libsa/ls.c        Thu Mar 20 01:46:19 2014 +0000
+++ b/sys/lib/libsa/ls.c        Thu Mar 20 03:13:18 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ls.c,v 1.4 2012/03/02 12:08:44 tsutsui Exp $ */
+/* $NetBSD: ls.c,v 1.5 2014/03/20 03:13:18 christos Exp $ */
 
 /*-
  * Copyright (c) 2011
@@ -85,6 +85,7 @@
 
 
 #include "stand.h"
+#include "ls.h"
 #include <sys/stat.h>
 #include <lib/libkern/libkern.h>
 
@@ -160,3 +161,67 @@
 out:
        close(fd);
 }
+
+struct lsentry {
+       struct lsentry *e_next;
+       uint32_t e_ino;
+       const char *e_type;
+       char    e_name[1];
+};
+
+__compactcall void
+lsadd(lsentry_t **names, const char *pattern, const char *name, size_t namelen,
+    uint32_t ino, const char *type)
+{
+       lsentry_t *n, **np;
+
+       if (pattern && !fnmatch(name, pattern))
+               return;
+
+       n = alloc(sizeof *n + namelen);
+       if (!n) {
+               printf("%d: %.*s (%s)\n", ino, (int)namelen, name, type);
+               return;
+       }
+
+       n->e_ino = ino;
+       n->e_type = type;
+       memcpy(n->e_name, name, namelen);
+       n->e_name[namelen] = '\0';
+
+       for (np = names; *np; np = &(*np)->e_next) {
+               if (strcmp(n->e_name, (*np)->e_name) < 0)
+                       break;
+       }
+       n->e_next = *np;
+       *np = n;
+}
+
+__compactcall void
+lsprint(lsentry_t *names) {
+       if (!names) {
+               printf("not found\n");
+               return;
+       }
+       do {
+               lsentry_t *n = names;
+               printf("%d: %s (%s)\n", n->e_ino, n->e_name, n->e_type);
+               names = n->e_next;
+       } while (names);
+}
+
+__compactcall void
+lsfree(lsentry_t *names) {
+       if (!names)
+               return;
+       do {
+               lsentry_t *n = names;
+               names = n->e_next;
+               dealloc(n, 0);
+       } while (names);
+}
+
+__compactcall void
+lsunsup(const char *name) {
+       printf("The ls command is not currently supported for %s\n", name);
+}
diff -r bfcc9de54e2c -r 2ac5d21a03fe sys/lib/libsa/minixfs3.c
--- a/sys/lib/libsa/minixfs3.c  Thu Mar 20 01:46:19 2014 +0000
+++ b/sys/lib/libsa/minixfs3.c  Thu Mar 20 03:13:18 2014 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: minixfs3.c,v 1.6 2013/11/03 00:44:34 christos Exp $    */
+/*     $NetBSD: minixfs3.c,v 1.7 2014/03/20 03:13:18 christos Exp $    */
 
 /*-
  * Copyright (c) 2012
@@ -169,20 +169,6 @@
        daddr_t         f_buf_blkno;    /* block number of data block */
 };
 
-#if defined(LIBSA_ENABLE_LS_OP)
-
-#define NELEM(x) (sizeof (x) / sizeof(*x))
-
-typedef struct entry_t entry_t;
-struct entry_t {
-       entry_t *e_next;
-       ino32_t e_ino;
-       char    e_name[1];
-};
-
-#endif /* LIBSA_ENABLE_LS_OP */
-
-
 static int read_inode(ino32_t, struct open_file *);
 static int block_map(struct open_file *, block_t, block_t *);
 static int buf_read_file(struct open_file *, void *, size_t *);
@@ -833,6 +819,7 @@
 }
 
 #if defined(LIBSA_ENABLE_LS_OP)
+#include "ls.h"
 __compactcall void
 minixfs3_ls(struct open_file *f, const char *pattern)
 {
@@ -841,7 +828,7 @@
        struct mfs_direct *dp;
        struct mfs_direct *dbuf;
        size_t buf_size;
-       entry_t *names = 0, *n, **np;
+       lsentry_t *names = 0;
 
        fp->f_seekp = 0;
        while (fp->f_seekp < (off_t)fp->f_di.mdi_size) {
@@ -864,9 +851,6 @@



Home | Main Index | Thread Index | Old Index