about summary refs log tree commit diff
path: root/lr.c
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2016-02-27 21:44:48 +0100
committerChristian Neukirchen <chneukirchen@gmail.com>2016-02-27 21:44:48 +0100
commitf4f0f9c601c7f775723d88bc5bc92e9f47c66d55 (patch)
tree5ff5be7d83e2d6f4e4846a3a8d6e54be8a42c418 /lr.c
parented408d59ffb1166d33400f5c0b96adc600af9c40 (diff)
downloadlr-f4f0f9c601c7f775723d88bc5bc92e9f47c66d55.tar.gz
lr-f4f0f9c601c7f775723d88bc5bc92e9f47c66d55.tar.xz
lr-f4f0f9c601c7f775723d88bc5bc92e9f47c66d55.zip
add clauses for -1 -A -d to the beginning of the expression
Diffstat (limited to 'lr.c')
-rw-r--r--lr.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/lr.c b/lr.c
index f9ca8c1..50fafd8 100644
--- a/lr.c
+++ b/lr.c
@@ -755,6 +755,8 @@ chain(struct expr *e1, enum op op, struct expr *e2)
 	struct expr *i, *j, *e;
 	if (!e1)
 		return e2;
+	if (!e2)
+		return e1;
 	for (j = 0, i = e1; i->op == op; j = i, i = i->b.expr)
 		;
 	if (!j) {
@@ -1828,8 +1830,8 @@ main(int argc, char *argv[])
 	while ((c = getopt(argc, argv, "01ADFGHLQST:Udf:lho:st:x")) != -1)
 		switch(c) {
 		case '0': format = zero_format; Qflag++; break;
-		case '1': expr = chain(expr, EXPR_AND, parse_expr("depth == 0 || prune")); break;
-		case 'A': expr = chain(expr, EXPR_AND, parse_expr("!(path ~~ \"*/.*\" && prune) && !path == \".\"")); break;
+		case '1': expr = chain(parse_expr("depth == 0 || prune"), EXPR_AND, expr); break;
+		case 'A': expr = chain(parse_expr("!(path ~~ \"*/.*\" && prune) && !path == \".\""), EXPR_AND, expr); break;
 		case 'D': Dflag++; break;
 		case 'F': format = type_format; break;
 		case 'G': Gflag++; break;
@@ -1839,7 +1841,7 @@ main(int argc, char *argv[])
 		case 'S': format = stat_format; break;
 		case 'T': Tflag = timeflag(optarg); break;
 		case 'U': Uflag++; break;
-		case 'd': expr = chain(expr, EXPR_AND, parse_expr("type == d && prune || print")); break;
+		case 'd': expr = chain(parse_expr("type == d && prune || print"), EXPR_AND, expr); break;
 		case 'f': format = optarg; break;
 		case 'h': hflag++; break;
 		case 'l': lflag++; format = long_format; break;