diff mbox series

[pseudo] pseudo_util: Add log severity flags

Message ID 20260527120820.237469-1-frezidok1@gmail.com
State New
Headers show
Series [pseudo] pseudo_util: Add log severity flags | expand

Commit Message

Dmitry Sakhonchik May 27, 2026, 12:08 p.m. UTC
From: Dmitry Sakhonchik <frezidok1@gmail.com>

Create an infrastructure to make use of severity flags from pseudo_tables.
After that it is now possible to set severity flags from env (PSEUDO_SEVERITY) and from terminal via optargs.

[YOCTO #12141]

Signed-off-by: Dmitry Sakhonchik <frezidok1@gmail.com>
---
 pseudo.c      |  8 +++++++-
 pseudo.h      |  3 +++
 pseudo_util.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 54 insertions(+), 1 deletion(-)

Comments

Mark Hatle May 29, 2026, 3:40 p.m. UTC | #1
Sorry for the late reply.

On 5/27/26 7:08 AM, Dmitry Sakhonchik via lists.yoctoproject.org wrote:
> From: Dmitry Sakhonchik <frezidok1@gmail.com>
> 
> Create an infrastructure to make use of severity flags from pseudo_tables.
> After that it is now possible to set severity flags from env (PSEUDO_SEVERITY) and from terminal via optargs.
> 
> [YOCTO #12141]
> 
> Signed-off-by: Dmitry Sakhonchik <frezidok1@gmail.com>
> ---
>   pseudo.c      |  8 +++++++-
>   pseudo.h      |  3 +++
>   pseudo_util.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
>   3 files changed, 54 insertions(+), 1 deletion(-)
> 
> diff --git a/pseudo.c b/pseudo.c
> index 25711b6..8a05d82 100644
> --- a/pseudo.c
> +++ b/pseudo.c
> @@ -134,7 +134,10 @@ main(int argc, char *argv[]) {
>   	 * wrong.  The + suppresses this annoying behavior, but may not
>   	 * be compatible with sane option libraries.
>   	 */
> -	while ((o = getopt(argc, argv, "+BCdfhi:lm:M:p:P:r:R:St:vVx:")) != -1) {
> +	while ((o = getopt(argc, argv, "+BCdfhi:lm:M:p:P:r:R:St:vVx:k:")) != -1) {

In the above string, the letters should be in alphabetic order.  So the new line 
should be:

+BCdfhi:klm:M:p:P:r:R:St:vVx:

> +		/*                                                               ^^^^^    */
> +		/* 						which letter to choose for severity is a topic for discussion */
> +		/*						I've chosen 'k' simply because it was not used yet 	*/

I've no objections to 'k'.  We're out of easily letters at this point.. :(

>   		switch (o) {
>   		case 'B': /* rebuild database */
>   			opt_B = 1;
> @@ -231,6 +234,9 @@ main(int argc, char *argv[]) {
>   			printf("Set PSEUDO_PREFIX to run with a different prefix.\n");
>   			exit(0);
>   			break;
> +		case 'k': /* debug severity */
> +			pseudo_severity_set(optarg);
> +			break;
>   		case 'x': /* debug flags */
>   			pseudo_debug_set(optarg);
>   			break;
> diff --git a/pseudo.h b/pseudo.h
> index b6c13f2..e48d38a 100644
> --- a/pseudo.h
> +++ b/pseudo.h
> @@ -26,8 +26,11 @@ extern void pseudo_debug_terse(void);
>   extern void pseudo_debug_set(char *);
>   extern void pseudo_debug_clear(char *);
>   extern void pseudo_debug_flags_finalize(void);
> +extern void pseudo_severity_set(char *);
> +extern void pseudo_severity_flags_finalize(void);
>   extern unsigned long pseudo_util_debug_flags;
>   extern unsigned long pseudo_util_evlog_flags;
> +extern unsigned long pseudo_util_severity_flags;
>   extern int pseudo_util_debug_fd;
>   extern int pseudo_disabled;
>   extern int pseudo_allow_fsync;
> diff --git a/pseudo_util.c b/pseudo_util.c
> index 2b0cc04..f8f2a2f 100644
> --- a/pseudo_util.c
> +++ b/pseudo_util.c
> @@ -63,6 +63,7 @@ static struct pseudo_variables pseudo_env[] = {
>   #endif
>   	{ "PSEUDO_EVLOG", 12, NULL },
>   	{ "PSEUDO_EVLOG_FILE", 17, NULL },
> +	{ "PSEUDO_SEVERITY", 15, NULL },
>   	{ NULL, 0, NULL } /* Magic terminator */
>   };
>   
> @@ -90,6 +91,7 @@ static int pseudo_evlog_next_entry = 0;
>   static void pseudo_evlog_set(char *);
>   static void pseudo_evlog_flags_finalize(void);
>   static unsigned long pseudo_debug_flags_in(char *);
> +static unsigned long pseudo_severity_flags_in(char *);
>   
>   /* -1 - init hasn't been run yet
>    * 0 - init has been run
> @@ -247,10 +249,17 @@ pseudo_init_util(void) {
>   		pseudo_evlog_flags_finalize();
>   	}
>   	free(env);
> +	env = pseudo_get_value("PSEUDO_SEVERITY");
> +	if (env) {
> +		pseudo_severity_set(env);
> +		pseudo_severity_flags_finalize();
> +	}
> +	free(env);
>   }
>   
>   unsigned long pseudo_util_debug_flags = 0;
>   unsigned long pseudo_util_evlog_flags = 0;
> +unsigned long pseudo_util_severity_flags = 0;
>   int pseudo_util_debug_fd = 2;
>   int pseudo_util_evlog_fd = 2;
>   static int debugged_newline = 1;
> @@ -433,6 +442,11 @@ pseudo_evlog_set(char *s) {
>   	pseudo_util_evlog_flags = pseudo_debug_flags_in(s);
>   }
>   
> +void
> +pseudo_severity_set(char *s) {
> +	pseudo_util_severity_flags = pseudo_severity_flags_in(s);
> +}
> +
>   /* This exists because we don't want to allocate a bunch of strings
>    * and free them immediately if you have several flags set.
>    */
> @@ -457,6 +471,11 @@ pseudo_evlog_flags_finalize(void) {
>   	pseudo_flags_finalize(pseudo_util_evlog_flags, "PSEUDO_EVLOG");
>   }
>   
> +void
> +pseudo_severity_flags_finalize(void) {
> +	pseudo_flags_finalize(pseudo_util_severity_flags, "PSEUDO_SEVERITY");
> +}
> +
>   static unsigned long
>   pseudo_debug_flags_in(char *s) {
>   	unsigned long flags = 0;
> @@ -471,6 +490,31 @@ pseudo_debug_flags_in(char *s) {
>   	return flags;
>   }
>   
> +static unsigned long
> +pseudo_severity_flags_in(char *s) {
> +	unsigned long flags = 0;
> +	char *token = NULL;
> +	char *saveptr = NULL;
> +	char *s_copy = NULL;
> +
> +	if (!s)
> +		return flags;
> +
> +	s_copy = strdup(s);
> +
> +	token = strtok_r(s_copy, " ,;", &saveptr);
> +	while (token != NULL) {
> +		pseudo_sev_t id = pseudo_sev_id(token);
> +		if (id > SEVERITY_NONE && id < SEVERITY_MAX) {
> +				flags |= (1UL << id);
> +			}
> +		token = strtok_r(NULL, " ,;", &saveptr);
> +	}
> +
> +	free(s_copy);
> +	return flags;	
> +}
> +
>   void
>   pseudo_debug_clear(char *s) {
>   	if (!s)
> 
> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#4074): https://lists.yoctoproject.org/g/yocto-patches/message/4074
> Mute This Topic: https://lists.yoctoproject.org/mt/119511285/3616948
> Group Owner: yocto-patches+owner@lists.yoctoproject.org
> Unsubscribe: https://lists.yoctoproject.org/g/yocto-patches/leave/13201099/3616948/947757854/xyzzy [mark.hatle@kernel.crashing.org]
> -=-=-=-=-=-=-=-=-=-=-=-
>
diff mbox series

Patch

diff --git a/pseudo.c b/pseudo.c
index 25711b6..8a05d82 100644
--- a/pseudo.c
+++ b/pseudo.c
@@ -134,7 +134,10 @@  main(int argc, char *argv[]) {
 	 * wrong.  The + suppresses this annoying behavior, but may not
 	 * be compatible with sane option libraries.
 	 */
-	while ((o = getopt(argc, argv, "+BCdfhi:lm:M:p:P:r:R:St:vVx:")) != -1) {
+	while ((o = getopt(argc, argv, "+BCdfhi:lm:M:p:P:r:R:St:vVx:k:")) != -1) {
+		/*                                                               ^^^^^    */
+		/* 						which letter to choose for severity is a topic for discussion */
+		/*						I've chosen 'k' simply because it was not used yet 	*/
 		switch (o) {
 		case 'B': /* rebuild database */
 			opt_B = 1;
@@ -231,6 +234,9 @@  main(int argc, char *argv[]) {
 			printf("Set PSEUDO_PREFIX to run with a different prefix.\n");
 			exit(0);
 			break;
+		case 'k': /* debug severity */
+			pseudo_severity_set(optarg);
+			break;
 		case 'x': /* debug flags */
 			pseudo_debug_set(optarg);
 			break;
diff --git a/pseudo.h b/pseudo.h
index b6c13f2..e48d38a 100644
--- a/pseudo.h
+++ b/pseudo.h
@@ -26,8 +26,11 @@  extern void pseudo_debug_terse(void);
 extern void pseudo_debug_set(char *);
 extern void pseudo_debug_clear(char *);
 extern void pseudo_debug_flags_finalize(void);
+extern void pseudo_severity_set(char *);
+extern void pseudo_severity_flags_finalize(void);
 extern unsigned long pseudo_util_debug_flags;
 extern unsigned long pseudo_util_evlog_flags;
+extern unsigned long pseudo_util_severity_flags;
 extern int pseudo_util_debug_fd;
 extern int pseudo_disabled;
 extern int pseudo_allow_fsync;
diff --git a/pseudo_util.c b/pseudo_util.c
index 2b0cc04..f8f2a2f 100644
--- a/pseudo_util.c
+++ b/pseudo_util.c
@@ -63,6 +63,7 @@  static struct pseudo_variables pseudo_env[] = {
 #endif
 	{ "PSEUDO_EVLOG", 12, NULL },
 	{ "PSEUDO_EVLOG_FILE", 17, NULL },
+	{ "PSEUDO_SEVERITY", 15, NULL },
 	{ NULL, 0, NULL } /* Magic terminator */
 };
 
@@ -90,6 +91,7 @@  static int pseudo_evlog_next_entry = 0;
 static void pseudo_evlog_set(char *);
 static void pseudo_evlog_flags_finalize(void);
 static unsigned long pseudo_debug_flags_in(char *);
+static unsigned long pseudo_severity_flags_in(char *);
 
 /* -1 - init hasn't been run yet
  * 0 - init has been run
@@ -247,10 +249,17 @@  pseudo_init_util(void) {
 		pseudo_evlog_flags_finalize();
 	}
 	free(env);
+	env = pseudo_get_value("PSEUDO_SEVERITY");
+	if (env) {
+		pseudo_severity_set(env);
+		pseudo_severity_flags_finalize();
+	}
+	free(env);
 }
 
 unsigned long pseudo_util_debug_flags = 0;
 unsigned long pseudo_util_evlog_flags = 0;
+unsigned long pseudo_util_severity_flags = 0;
 int pseudo_util_debug_fd = 2;
 int pseudo_util_evlog_fd = 2;
 static int debugged_newline = 1;
@@ -433,6 +442,11 @@  pseudo_evlog_set(char *s) {
 	pseudo_util_evlog_flags = pseudo_debug_flags_in(s);
 }
 
+void
+pseudo_severity_set(char *s) {
+	pseudo_util_severity_flags = pseudo_severity_flags_in(s);
+}
+
 /* This exists because we don't want to allocate a bunch of strings
  * and free them immediately if you have several flags set.
  */
@@ -457,6 +471,11 @@  pseudo_evlog_flags_finalize(void) {
 	pseudo_flags_finalize(pseudo_util_evlog_flags, "PSEUDO_EVLOG");
 }
 
+void
+pseudo_severity_flags_finalize(void) {
+	pseudo_flags_finalize(pseudo_util_severity_flags, "PSEUDO_SEVERITY");
+}
+
 static unsigned long
 pseudo_debug_flags_in(char *s) {
 	unsigned long flags = 0;
@@ -471,6 +490,31 @@  pseudo_debug_flags_in(char *s) {
 	return flags;
 }
 
+static unsigned long
+pseudo_severity_flags_in(char *s) {
+	unsigned long flags = 0;
+	char *token = NULL;
+	char *saveptr = NULL;
+	char *s_copy = NULL;
+
+	if (!s)
+		return flags;
+
+	s_copy = strdup(s);
+
+	token = strtok_r(s_copy, " ,;", &saveptr);
+	while (token != NULL) {
+		pseudo_sev_t id = pseudo_sev_id(token);
+		if (id > SEVERITY_NONE && id < SEVERITY_MAX) {
+				flags |= (1UL << id);
+			}
+		token = strtok_r(NULL, " ,;", &saveptr);
+	}
+
+	free(s_copy);
+	return flags;	
+}
+
 void
 pseudo_debug_clear(char *s) {
 	if (!s)