socsvn commit: r269686 - soc2014/zkorchev/freebsd_head/bin/ls
zkorchev at FreeBSD.org
zkorchev at FreeBSD.org
Tue Jun 17 14:57:30 UTC 2014
Author: zkorchev
Date: Tue Jun 17 14:57:28 2014
New Revision: 269686
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=269686
Log:
ls improvements
Deleted:
soc2014/zkorchev/freebsd_head/bin/ls/sol.c
soc2014/zkorchev/freebsd_head/bin/ls/sol.h
Modified:
soc2014/zkorchev/freebsd_head/bin/ls/Makefile
soc2014/zkorchev/freebsd_head/bin/ls/ls.c
soc2014/zkorchev/freebsd_head/bin/ls/print.c
soc2014/zkorchev/freebsd_head/bin/ls/util.c
Modified: soc2014/zkorchev/freebsd_head/bin/ls/Makefile
==============================================================================
--- soc2014/zkorchev/freebsd_head/bin/ls/Makefile Tue Jun 17 13:14:31 2014 (r269685)
+++ soc2014/zkorchev/freebsd_head/bin/ls/Makefile Tue Jun 17 14:57:28 2014 (r269686)
@@ -4,9 +4,9 @@
.include <src.opts.mk>
PROG= ls
-SRCS= cmp.c ls.c print.c util.c sol.c
+SRCS= cmp.c ls.c print.c util.c
DPADD= ${LIBUTIL}
-LDADD= -L/usr/local/lib -lutil -lyajl
+LDADD= -L/usr/local/lib -lutil -lsol
CFLAGS+= -DSOL_ON -I/usr/local/include -Wno-format-invalid-specifier
.if !defined(RELEASE_CRUNCH) && \
Modified: soc2014/zkorchev/freebsd_head/bin/ls/ls.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/bin/ls/ls.c Tue Jun 17 13:14:31 2014 (r269685)
+++ soc2014/zkorchev/freebsd_head/bin/ls/ls.c Tue Jun 17 14:57:28 2014 (r269686)
@@ -66,10 +66,12 @@
#include <termcap.h>
#include <signal.h>
#endif
+#if defined(SOL_ON)
+# include <sol.h>
+#endif
#include "ls.h"
#include "extern.h"
-#include "sol.h"
/*
* Upward approximation of the maximum number of characters needed to
@@ -194,11 +196,7 @@
if (getenv("LS_SAMESORT"))
f_samesort = 1;
while ((ch = getopt(argc, argv,
-#if defined(SOL_ON)
"1ABCD:FGHILOPRSTUWXZabcdfghiklmnopqrstuwxy,")) != -1) {
-#else
- "1ABCD:FGHILPRSTUWXZabcdfghiklmnopqrstuwxy,")) != -1) {
-#endif
switch (ch) {
/*
* The -1, -C, -x and -l options all override each other so
@@ -222,11 +220,13 @@
f_longform = 0;
f_singlecol = 0;
break;
-#if defined(SOL_ON)
case 'O':
+#if defined(SOL_ON)
f_solformat = 1;
- break;
+#else
+ errx(1, "ls compiled without -O support");
#endif
+ break;
/* The -c, -u, and -U options override each other. */
case 'c':
f_statustime = 1;
@@ -278,7 +278,11 @@
f_slash = 0;
break;
case 'G':
+#if defined(COLORLS)
setenv("CLICOLOR", "", 1);
+#else
+ errx(1, "ls compiled without -G support");
+#endif
break;
case 'H':
fts_options |= FTS_COMFOLLOW;
@@ -508,7 +512,11 @@
}
#if defined(SOL_ON)
- if (f_solformat) sol_init(&sol_stream, SOL_JSON);
+ if (f_solformat) {
+ sol_init(&sol_stream, SOL_JSON);
+ if (f_recursive || (argc > 1))
+ sol_map_start(&sol_stream);
+ }
#endif
if (argc)
@@ -517,7 +525,10 @@
traverse(1, dotav, fts_options);
#if defined(SOL_ON)
- if (f_solformat) sol_term(&sol_stream);
+ if (f_solformat) {
+ if (f_recursive || (argc > 1)) sol_map_end(&sol_stream);
+ sol_term(&sol_stream);
+ }
#endif
exit(rval);
@@ -579,22 +590,32 @@
* a separator. If multiple arguments, precede each
* directory with its name.
*/
-#if !defined(SOL_ON)
- if (output) {
- putchar('\n');
- (void)printname(p->fts_path);
- puts(":");
- } else if (argc > 1) {
- (void)printname(p->fts_path);
- puts(":");
- output = 1;
+#if defined(SOL_ON)
+ if (f_solformat)
+ {
+ if (f_recursive || (argc > 1))
+ sol_map_key(&sol_stream, p->fts_path, p->fts_pathlen);
+ sol_array_start(&sol_stream);
}
-#else
- (void)argc; // TODO remove this
- // TODO zaro what to do on multiple directory listing?
+ else
#endif
+ {
+ if (output) {
+ putchar('\n');
+ (void)printname(p->fts_path);
+ puts(":");
+ } else if (argc > 1) {
+ (void)printname(p->fts_path);
+ puts(":");
+ output = 1;
+ }
+ }
chp = fts_children(ftsp, ch_options);
display(p, chp, options);
+#if defined(SOL_ON)
+ if (f_solformat)
+ sol_array_end(&sol_stream);
+#endif
if (!f_recursive && chp != NULL)
(void)fts_set(ftsp, p, FTS_SKIP);
Modified: soc2014/zkorchev/freebsd_head/bin/ls/print.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/bin/ls/print.c Tue Jun 17 13:14:31 2014 (r269685)
+++ soc2014/zkorchev/freebsd_head/bin/ls/print.c Tue Jun 17 14:57:28 2014 (r269686)
@@ -58,10 +58,12 @@
#include <termcap.h>
#include <signal.h>
#endif
+#if defined(SOL_ON)
+# include <sol.h>
+#endif
#include "ls.h"
#include "extern.h"
-#include "sol.h"
static int printaname(const FTSENT *, u_long, u_long);
static void printdev(size_t, dev_t);
@@ -389,8 +391,8 @@
#if defined(SOL_ON)
if (f_solformat)
{
- sol_map_key(&sol_stream, "time", 4);
- sol_map_string(&sol_stream, longstring, len);
+ SOL_MAP_KEYL(&sol_stream, "time");
+ sol_string(&sol_stream, longstring, len);
}
else
#endif
@@ -409,8 +411,8 @@
if ((mode & S_IFMT) == S_IFDIR) {
#if defined(SOL_ON)
if (f_solformat) {
- sol_map_key(&sol_stream, "type", 4);
- sol_map_string(&sol_stream, "/", 1);
+ SOL_MAP_KEYL(&sol_stream, "type");
+ sol_string(&sol_stream, "/", 1);
}
else
#endif
@@ -446,8 +448,8 @@
#if defined(SOL_ON)
if (f_solformat) {
- sol_map_key(&sol_stream, "type", 4);
- sol_map_string(&sol_stream, &type, 1);
+ SOL_MAP_KEYL(&sol_stream, "type");
+ sol_string(&sol_stream, &type, 1);
}
else
#endif
@@ -620,8 +622,8 @@
#if defined(SOL_ON)
if (f_solformat)
{
- sol_map_key(&sol_stream, "link", 4);
- sol_map_string(&sol_stream, path, lnklen);
+ SOL_MAP_KEYL(&sol_stream, "link");
+ sol_string(&sol_stream, path, lnklen);
}
else
#endif
@@ -738,8 +740,6 @@
(void)printf("total %lu\n", howmany(dp->btotal, blocksize));
}*/
- sol_array_start(&sol_stream);
-
for (p = dp->list; p; p = p->fts_link) {
if (IS_NOPRINT(p))
continue;
@@ -748,48 +748,48 @@
sp = p->fts_statp;
if (f_inode) {
- sol_map_key(&sol_stream, "inode", 5);
- sol_map_integer(&sol_stream, sp->st_ino);
+ SOL_MAP_KEYL(&sol_stream, "inode");
+ sol_integer(&sol_stream, sp->st_ino);
}
if (f_size) {
- sol_map_key(&sol_stream, "bsize", 5);
- sol_map_integer(&sol_stream, howmany(sp->st_blocks, blocksize));
+ SOL_MAP_KEYL(&sol_stream, "bsize");
+ sol_integer(&sol_stream, howmany(sp->st_blocks, blocksize));
}
strmode(sp->st_mode, buf);
aclmode(buf, p);
np = p->fts_pointer;
- sol_map_key(&sol_stream, "mode", 4);
- sol_map_string(&sol_stream, buf, strlen(buf));
+ SOL_MAP_KEYL(&sol_stream, "mode");
+ sol_string(&sol_stream, buf, strlen(buf));
- sol_map_key(&sol_stream, "nlink", 5);
- sol_map_integer(&sol_stream, sp->st_nlink);
+ SOL_MAP_KEYL(&sol_stream, "nlink");
+ sol_integer(&sol_stream, sp->st_nlink);
if (f_numericonly) {
- sol_map_key(&sol_stream, "uid", 3);
- sol_map_integer(&sol_stream, sp->st_uid);
- sol_map_key(&sol_stream, "gid", 3);
- sol_map_integer(&sol_stream, sp->st_gid);
+ SOL_MAP_KEYL(&sol_stream, "uid");
+ sol_integer(&sol_stream, sp->st_uid);
+ SOL_MAP_KEYL(&sol_stream, "gid");
+ sol_integer(&sol_stream, sp->st_gid);
}
else {
- sol_map_key(&sol_stream, "user", 4);
- sol_map_string(&sol_stream, np->user, strlen(np->user));
- sol_map_key(&sol_stream, "group", 5);
- sol_map_string(&sol_stream, np->group, strlen(np->group));
+ SOL_MAP_KEYL(&sol_stream, "user");
+ sol_string(&sol_stream, np->user, strlen(np->user));
+ SOL_MAP_KEYL(&sol_stream, "group");
+ sol_string(&sol_stream, np->group, strlen(np->group));
}
if (f_flags) {
- sol_map_key(&sol_stream, "flags", 5);
- sol_map_string(&sol_stream, np->flags, strlen(np->flags));
+ SOL_MAP_KEYL(&sol_stream, "flags");
+ sol_string(&sol_stream, np->flags, strlen(np->flags));
}
if (f_label) {
- sol_map_key(&sol_stream, "label", 5);
- sol_map_string(&sol_stream, np->label, strlen(np->label));
+ SOL_MAP_KEYL(&sol_stream, "label");
+ sol_string(&sol_stream, np->label, strlen(np->label));
}
if (S_ISCHR(sp->st_mode) || S_ISBLK(sp->st_mode)) {
- sol_map_key(&sol_stream, "dev", 3);
- sol_map_integer(&sol_stream, sp->st_rdev); // TODO hex?
+ SOL_MAP_KEYL(&sol_stream, "dev");
+ sol_integer(&sol_stream, sp->st_rdev); // TODO hex?
}
else {
if (f_humanval) {
@@ -801,8 +801,8 @@
size_t len = humanize_number(buffer, sizeof(buffer), (int64_t)sp->st_size,
"", HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
- sol_map_key(&sol_stream, "hsize", 5);
- sol_map_string(&sol_stream, buffer, len);
+ SOL_MAP_KEYL(&sol_stream, "hsize");
+ sol_string(&sol_stream, buffer, len);
} else if (f_thousands) { /* with commas */
/*
* Reserve 4 bytes for each byte of the size.
@@ -812,11 +812,11 @@
const char *format = "%j'd ";
size_t len = snprintf(buffer, sizeof(buffer), format, sp->st_size);
- sol_map_key(&sol_stream, "csize", 5);
- sol_map_string(&sol_stream, buffer, len);
+ SOL_MAP_KEYL(&sol_stream, "csize");
+ sol_string(&sol_stream, buffer, len);
} else {
- sol_map_key(&sol_stream, "size", 4);
- sol_map_integer(&sol_stream, sp->st_size);
+ SOL_MAP_KEYL(&sol_stream, "size");
+ sol_integer(&sol_stream, sp->st_size);
}
}
@@ -829,8 +829,8 @@
else
printtime(sp->st_mtime);
- sol_map_key(&sol_stream, "name", 4);
- sol_map_string(&sol_stream, p->fts_name, p->fts_namelen);
+ SOL_MAP_KEYL(&sol_stream, "name");
+ sol_string(&sol_stream, p->fts_name, p->fts_namelen);
if (f_type)
(void)printtype(sp->st_mode);
@@ -839,8 +839,6 @@
sol_map_end(&sol_stream);
}
-
- sol_array_end(&sol_stream);
}
void
@@ -848,12 +846,10 @@
{
FTSENT *p;
- sol_array_start(&sol_stream);
for (p = dp->list; p; p = p->fts_link) {
if (IS_NOPRINT(p))
continue;
sol_string(&sol_stream, p->fts_name, p->fts_namelen);
}
- sol_array_end(&sol_stream);
}
#endif
Modified: soc2014/zkorchev/freebsd_head/bin/ls/util.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/bin/ls/util.c Tue Jun 17 13:14:31 2014 (r269685)
+++ soc2014/zkorchev/freebsd_head/bin/ls/util.c Tue Jun 17 14:57:28 2014 (r269686)
@@ -224,14 +224,6 @@
usage(void)
{
(void)fprintf(stderr,
- "usage: ls [-ABCF"
-#if defined(COLORLS)
- "G"
-#endif
- "HIL"
-#if defined(SOL_ON)
- "O"
-#endif
- "PRSTUWZabcdfghiklmnopqrstuwxy1,] [-D format] [file ...]\n");
+ "usage: ls [-ABCFGHILOPRSTUWZabcdfghiklmnopqrstuwxy1,] [-D format] [file ...]\n");
exit(1);
}
More information about the svn-soc-all
mailing list