[RFC PATCH 1/1] metaparse: Replace macro also in arrays

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

 



This helps to replace macros like:

    #define TEST_APP "userns06_capcheck"

    static const char *const resource_files[] = {
	TEST_APP,
	NULL,
    };

$ ./metaparse -Iinclude -Itestcases/kernel/syscalls/utils/ ../testcases/kernel/containers/userns/userns06.c
Before:
   "resource_files": [
     "TEST_APP"
    ],
    ...

After:
   "resource_files": [
     "userns06_capcheck"
    ],
    ...

Signed-off-by: Petr Vorel <pvorel@xxxxxxx>
---
Hi all,

This is a reaction on patch
https://patchwork.ozlabs.org/project/ltp/patch/20220722083529.209-1-chenhx.fnst@xxxxxxxxxxx/
First: I was wrong, inlining arrays does any change in the docparse output.
BTW I'd be still for inlining for better readability.

I'm not sure if this is not good idea, maybe some of the constants should be
kept unparsed, e.g.:

Orig:
   "caps": [
     "TST_CAP",
     "(",
     "TST_CAP_DROP",
     "CAP_SYS_RESOURCE",

Becomes:
   "caps": [
     "TST_CAP",
     "(",
     "TST_CAP_DROP",
     "24",

CAP_SYS_RESOURCE is replaced because it's a string, but IMHO it'd be better to keep it.
TST_CAP{_DROP,} aren't replaced because they aren't a plain strings.
Maybe replace only non-numerc values?

Kind regards,
Petr

 metadata/metaparse.c | 43 ++++++++++++++++++++++---------------------
 1 file changed, 22 insertions(+), 21 deletions(-)

diff --git a/metadata/metaparse.c b/metadata/metaparse.c
index 2384c73c8..0cc288b2d 100644
--- a/metadata/metaparse.c
+++ b/metadata/metaparse.c
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (c) 2019-2021 Cyril Hrubis <chrubis@xxxxxxx>
- * Copyright (c) 2020 Petr Vorel <pvorel@xxxxxxx>
+ * Copyright (c) 2020-2022 Petr Vorel <pvorel@xxxxxxx>
  */
 
 #define _GNU_SOURCE
@@ -286,9 +286,28 @@ static void close_include(FILE *inc)
 	fclose(inc);
 }
 
+static void try_apply_macro(char **res)
+{
+	ENTRY macro = {
+		.key = *res,
+	};
+
+	ENTRY *ret;
+
+	ret = hsearch(macro, FIND);
+
+	if (!ret)
+		return;
+
+	if (verbose)
+		fprintf(stderr, "APPLYING MACRO %s=%s\n", ret->key, (char*)ret->data);
+
+	*res = ret->data;
+}
+
 static int parse_array(FILE *f, struct data_node *node)
 {
-	const char *token;
+	char *token;
 
 	for (;;) {
 		if (!(token = next_token(f, NULL)))
@@ -315,6 +334,7 @@ static int parse_array(FILE *f, struct data_node *node)
 		if (!strcmp(token, "NULL"))
 			continue;
 
+		try_apply_macro(&token);
 		struct data_node *str = data_node_string(token);
 
 		data_node_array_add(node, str);
@@ -323,25 +343,6 @@ static int parse_array(FILE *f, struct data_node *node)
 	return 0;
 }
 
-static void try_apply_macro(char **res)
-{
-	ENTRY macro = {
-		.key = *res,
-	};
-
-	ENTRY *ret;
-
-	ret = hsearch(macro, FIND);
-
-	if (!ret)
-		return;
-
-	if (verbose)
-		fprintf(stderr, "APPLYING MACRO %s=%s\n", ret->key, (char*)ret->data);
-
-	*res = ret->data;
-}
-
 static int parse_get_array_len(FILE *f)
 {
 	const char *token;
-- 
2.37.1




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux