[lxc-devel] [PATCH] lxc-ls: Restore old [filter] behaviour

Christian Brauner christianvanbrauner at gmail.com
Wed Jan 20 00:54:45 UTC 2016


In the Python implementation users could pass a regex without a parameter flag
as additional argument on the command line. The C implementation gained the
flag -r/--regex for this. To not irritate users we restore the old behaviour
and additionally rename -r/--regex to --filter to allow eplicitly passing the
regex.

Signed-off-by: Christian Brauner <christian.brauner at mailbox.org>
---
 src/lxc/arguments.h |  2 +-
 src/lxc/lxc_ls.c    | 14 ++++++++------
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/src/lxc/arguments.h b/src/lxc/arguments.h
index a3d2932..46fecbf 100644
--- a/src/lxc/arguments.h
+++ b/src/lxc/arguments.h
@@ -123,7 +123,7 @@ struct lxc_arguments {
 	/* lxc-ls */
 	char *ls_fancy_format;
 	char *ls_groups;
-	char *ls_regex;
+	char *ls_filter;
 	unsigned int ls_nesting; /* maximum allowed nesting level */
 	bool ls_active;
 	bool ls_fancy;
diff --git a/src/lxc/lxc_ls.c b/src/lxc/lxc_ls.c
index b270ff1..5bbff1e 100644
--- a/src/lxc/lxc_ls.c
+++ b/src/lxc/lxc_ls.c
@@ -49,6 +49,7 @@ lxc_log_define(lxc_ls, lxc);
 #define LS_ACTIVE 3
 #define LS_RUNNING 4
 #define LS_NESTING 5
+#define LS_FILTER 6
 
 /* Store container info. */
 struct ls {
@@ -161,7 +162,7 @@ static const struct option my_longopts[] = {
 	{"stopped", no_argument, 0, LS_STOPPED},
 	{"nesting", optional_argument, 0, LS_NESTING},
 	{"groups", required_argument, 0, 'g'},
-	{"regex", required_argument, 0, 'r'},
+	{"filter", required_argument, 0, LS_FILTER},
 	LXC_COMMON_OPTIONS
 };
 
@@ -354,9 +355,10 @@ static int ls_get(struct ls **m, size_t *size, const struct lxc_arguments *args,
 		char *name = containers[i];
 
 		/* Filter container names by regex the user gave us. */
-		if (args->ls_regex) {
+		if (args->ls_filter || args->argc == 1) {
 			regex_t preg;
-			check = regcomp(&preg, args->ls_regex, REG_NOSUB | REG_EXTENDED);
+			tmp = args->ls_filter ? args->ls_filter : args->argv[0];
+			check = regcomp(&preg, tmp, REG_NOSUB | REG_EXTENDED);
 			if (check == REG_ESPACE) /* we're out of memory */
 				goto out;
 			else if (check != 0)
@@ -923,8 +925,8 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg)
 	case 'g':
 		args->groups = arg;
 		break;
-	case 'r':
-		args->ls_regex = arg;
+	case LS_FILTER:
+		args->ls_filter = arg;
 		break;
 	case 'F':
 		args->ls_fancy_format = arg;
@@ -986,7 +988,7 @@ static int ls_remove_lock(const char *path, const char *name,
 	}
 
 	int check = snprintf(*lockpath, *len_lockpath, "%s/lxc/lock/%s/%s", RUNTIME_PATH, path, name);
-	if (check < 0 || check >= *len_lockpath)
+	if (check < 0 || (size_t)check >= *len_lockpath)
 		return -1;
 
 	lxc_rmdir_onedev(*lockpath, NULL);
-- 
2.7.0



More information about the lxc-devel mailing list