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