diff mbox series

[07/20] fwts_log_scan: move fwts_log_scan_patterns

Message ID 20180620121446.31470-8-info@marcellobauer.com
State Accepted
Headers show
Series coreboot test intergration | expand

Commit Message

Marcello Sylvester Bauer June 20, 2018, 12:14 p.m. UTC
Note: log message name and fallback advice has been added as arguments.

Signed-off-by: Marcello Sylvester Bauer <info@marcellobauer.com>
---
 src/lib/include/fwts_log_scan.h |  1 +
 src/lib/src/fwts_klog.c         | 52 +++----------------------------------
 src/lib/src/fwts_log_scan.c     | 57 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 62 insertions(+), 48 deletions(-)

Comments

Colin Ian King June 21, 2018, 3:51 p.m. UTC | #1
On 20/06/18 13:14, Marcello Sylvester Bauer wrote:
> Note: log message name and fallback advice has been added as arguments.
> 
> Signed-off-by: Marcello Sylvester Bauer <info@marcellobauer.com>
> ---
>  src/lib/include/fwts_log_scan.h |  1 +
>  src/lib/src/fwts_klog.c         | 52 +++----------------------------------
>  src/lib/src/fwts_log_scan.c     | 57 +++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 62 insertions(+), 48 deletions(-)
> 
> diff --git a/src/lib/include/fwts_log_scan.h b/src/lib/include/fwts_log_scan.h
> index ac56dba2..0f03d336 100644
> --- a/src/lib/include/fwts_log_scan.h
> +++ b/src/lib/include/fwts_log_scan.h
> @@ -46,5 +46,6 @@ fwts_list *fwts_log_find_changes(fwts_list *log_old, fwts_list *log_new);
>  char      *fwts_log_remove_timestamp(char *text);
>  int        fwts_log_scan(fwts_framework *fw, fwts_list *log, fwts_log_scan_func callback, fwts_log_progress_func progress, void *private, int *errors, bool remove_timestamp);
>  char *fwts_log_unique_label(const char *str, const char *label);
> +void       fwts_log_scan_patterns(fwts_framework *fw, char *line, int repeated, char *prevline, void *private, int *errors, const char *name, const char *advice);
>  
>  #endif
> diff --git a/src/lib/src/fwts_klog.c b/src/lib/src/fwts_klog.c
> index cfb76d7f..48ebf13b 100644
> --- a/src/lib/src/fwts_klog.c
> +++ b/src/lib/src/fwts_klog.c
> @@ -113,55 +113,11 @@ void fwts_klog_scan_patterns(fwts_framework *fw,
>  	void *private,
>  	int *errors)
>  {
> -	fwts_log_pattern *pattern = (fwts_log_pattern *)private;
> -	static char *advice =
> -		"This is a bug picked up by the kernel, but as yet, the "
> -		"firmware test suite has no diagnostic advice for this particular problem.";
> -
> -	FWTS_UNUSED(prevline);
> -
> -	while (pattern->pattern != NULL) {
> -		bool matched = false;
> -		switch (pattern->compare_mode) {
> -		case FWTS_COMPARE_REGEX:
> -			if (pattern->compiled_ok) {
> -				int ret = regexec(&pattern->compiled, line, 0, NULL, 0);
> -				if (!ret) {
> -					/* A successful regular expression match! */
> -					matched = true;
> -				} else if (ret != REG_NOMATCH) {
> -					char msg[1024];
> -
> -					regerror(ret, &pattern->compiled, msg, sizeof(msg));
> -					fwts_log_info(fw, "regular expression engine error: %s.", msg);
> -				}
> -			}
> -			break;
> -		case FWTS_COMPARE_STRING:
> -		default:
> -			matched = (strstr(line, pattern->pattern) != NULL) ;
> -			break;
> -		}
> +    static char *advice =
> +        "This is a bug picked up by the kernel, but as yet, the "
> +        "firmware test suite has no diagnostic advice for this particular problem.";
>  
> -		if (matched) {
> -			if (pattern->level == LOG_LEVEL_INFO)
> -				fwts_log_info(fw, "Kernel message: %s", line);
> -			else {
> -				fwts_failed(fw, pattern->level, pattern->label,
> -					"%s Kernel message: %s", fwts_log_level_to_str(pattern->level), line);
> -				fwts_error_inc(fw, pattern->label, errors);
> -			}
> -			if (repeated)
> -				fwts_log_info(fw, "Message repeated %d times.", repeated);
> -
> -			if ((pattern->advice) != NULL && (*pattern->advice))
> -				fwts_advice(fw, "%s", pattern->advice);
> -			else
> -				fwts_advice(fw, "%s", advice);
> -			return;
> -		}
> -		pattern++;
> -	}
> +    fwts_log_scan_patterns(fw, line, repeated, prevline, private, errors, "Kernel", advice);
>  }
>  
>  /*
> diff --git a/src/lib/src/fwts_log_scan.c b/src/lib/src/fwts_log_scan.c
> index d9c2ac1e..40611a36 100644
> --- a/src/lib/src/fwts_log_scan.c
> +++ b/src/lib/src/fwts_log_scan.c
> @@ -239,3 +239,60 @@ char *fwts_log_unique_label(const char *str, const char *label)
>          *dst = '\0';
>          return buffer;
>  }
> +
> +void fwts_log_scan_patterns(fwts_framework *fw,
> +        char *line,
> +        int  repeated,
> +        char *prevline,
> +        void *private,
> +        int *errors,
> +        const char *name,
> +        const char *advice)
> +{
> +        fwts_log_pattern *pattern = (fwts_log_pattern *)private;
> +
> +        FWTS_UNUSED(prevline);
> +
> +        while (pattern->pattern != NULL) {
> +                bool matched = false;
> +                switch (pattern->compare_mode) {
> +                case FWTS_COMPARE_REGEX:
> +                        if (pattern->compiled_ok) {
> +                                int ret = regexec(&pattern->compiled, line, 0, NULL, 0);
> +                                if (!ret) {
> +                                        /* A successful regular expression match! */
> +                                        matched = true;
> +                                } else if (ret != REG_NOMATCH) {
> +                                        char msg[1024];
> +
> +                                        regerror(ret, &pattern->compiled, msg, sizeof(msg));
> +                                        fwts_log_info(fw, "regular expression engine error: %s.", msg);
> +                                }
> +                        }
> +                        break;
> +                case FWTS_COMPARE_STRING:
> +                default:
> +                        matched = (strstr(line, pattern->pattern) != NULL) ;
> +                        break;
> +                }
> +
> +                if (matched) {
> +                        if (pattern->level == LOG_LEVEL_INFO)
> +                                fwts_log_info(fw, "%s message: %s", name, line);
> +                        else {
> +                                fwts_failed(fw, pattern->level, pattern->label,
> +                                        "%s %s message: %s", fwts_log_level_to_str(pattern->level), name, line);
> +                                fwts_error_inc(fw, pattern->label, errors);
> +                        }
> +                        if (repeated)
> +                                fwts_log_info(fw, "Message repeated %d times.", repeated);
> +
> +                        if ((pattern->advice) != NULL && (*pattern->advice))
> +                                fwts_advice(fw, "%s", pattern->advice);
> +                        else
> +                                fwts_advice(fw, "%s", advice);
> +                        return;
> +                }
> +                pattern++;
> +        }
> +}
> 

Acked-by: Colin Ian King <colin.king@canonical.com>
Alex Hung June 27, 2018, 10:49 p.m. UTC | #2
On 2018-06-20 05:14 AM, Marcello Sylvester Bauer wrote:
> Note: log message name and fallback advice has been added as arguments.
> 
> Signed-off-by: Marcello Sylvester Bauer <info@marcellobauer.com>
> ---
>   src/lib/include/fwts_log_scan.h |  1 +
>   src/lib/src/fwts_klog.c         | 52 +++----------------------------------
>   src/lib/src/fwts_log_scan.c     | 57 +++++++++++++++++++++++++++++++++++++++++
>   3 files changed, 62 insertions(+), 48 deletions(-)
> 
> diff --git a/src/lib/include/fwts_log_scan.h b/src/lib/include/fwts_log_scan.h
> index ac56dba2..0f03d336 100644
> --- a/src/lib/include/fwts_log_scan.h
> +++ b/src/lib/include/fwts_log_scan.h
> @@ -46,5 +46,6 @@ fwts_list *fwts_log_find_changes(fwts_list *log_old, fwts_list *log_new);
>   char      *fwts_log_remove_timestamp(char *text);
>   int        fwts_log_scan(fwts_framework *fw, fwts_list *log, fwts_log_scan_func callback, fwts_log_progress_func progress, void *private, int *errors, bool remove_timestamp);
>   char *fwts_log_unique_label(const char *str, const char *label);
> +void       fwts_log_scan_patterns(fwts_framework *fw, char *line, int repeated, char *prevline, void *private, int *errors, const char *name, const char *advice);
>   
>   #endif
> diff --git a/src/lib/src/fwts_klog.c b/src/lib/src/fwts_klog.c
> index cfb76d7f..48ebf13b 100644
> --- a/src/lib/src/fwts_klog.c
> +++ b/src/lib/src/fwts_klog.c
> @@ -113,55 +113,11 @@ void fwts_klog_scan_patterns(fwts_framework *fw,
>   	void *private,
>   	int *errors)
>   {
> -	fwts_log_pattern *pattern = (fwts_log_pattern *)private;
> -	static char *advice =
> -		"This is a bug picked up by the kernel, but as yet, the "
> -		"firmware test suite has no diagnostic advice for this particular problem.";
> -
> -	FWTS_UNUSED(prevline);
> -
> -	while (pattern->pattern != NULL) {
> -		bool matched = false;
> -		switch (pattern->compare_mode) {
> -		case FWTS_COMPARE_REGEX:
> -			if (pattern->compiled_ok) {
> -				int ret = regexec(&pattern->compiled, line, 0, NULL, 0);
> -				if (!ret) {
> -					/* A successful regular expression match! */
> -					matched = true;
> -				} else if (ret != REG_NOMATCH) {
> -					char msg[1024];
> -
> -					regerror(ret, &pattern->compiled, msg, sizeof(msg));
> -					fwts_log_info(fw, "regular expression engine error: %s.", msg);
> -				}
> -			}
> -			break;
> -		case FWTS_COMPARE_STRING:
> -		default:
> -			matched = (strstr(line, pattern->pattern) != NULL) ;
> -			break;
> -		}
> +    static char *advice =
> +        "This is a bug picked up by the kernel, but as yet, the "
> +        "firmware test suite has no diagnostic advice for this particular problem.";
>   
> -		if (matched) {
> -			if (pattern->level == LOG_LEVEL_INFO)
> -				fwts_log_info(fw, "Kernel message: %s", line);
> -			else {
> -				fwts_failed(fw, pattern->level, pattern->label,
> -					"%s Kernel message: %s", fwts_log_level_to_str(pattern->level), line);
> -				fwts_error_inc(fw, pattern->label, errors);
> -			}
> -			if (repeated)
> -				fwts_log_info(fw, "Message repeated %d times.", repeated);
> -
> -			if ((pattern->advice) != NULL && (*pattern->advice))
> -				fwts_advice(fw, "%s", pattern->advice);
> -			else
> -				fwts_advice(fw, "%s", advice);
> -			return;
> -		}
> -		pattern++;
> -	}
> +    fwts_log_scan_patterns(fw, line, repeated, prevline, private, errors, "Kernel", advice);
>   }
>   
>   /*
> diff --git a/src/lib/src/fwts_log_scan.c b/src/lib/src/fwts_log_scan.c
> index d9c2ac1e..40611a36 100644
> --- a/src/lib/src/fwts_log_scan.c
> +++ b/src/lib/src/fwts_log_scan.c
> @@ -239,3 +239,60 @@ char *fwts_log_unique_label(const char *str, const char *label)
>           *dst = '\0';
>           return buffer;
>   }
> +
> +void fwts_log_scan_patterns(fwts_framework *fw,
> +        char *line,
> +        int  repeated,
> +        char *prevline,
> +        void *private,
> +        int *errors,
> +        const char *name,
> +        const char *advice)
> +{
> +        fwts_log_pattern *pattern = (fwts_log_pattern *)private;
> +
> +        FWTS_UNUSED(prevline);
> +
> +        while (pattern->pattern != NULL) {
> +                bool matched = false;
> +                switch (pattern->compare_mode) {
> +                case FWTS_COMPARE_REGEX:
> +                        if (pattern->compiled_ok) {
> +                                int ret = regexec(&pattern->compiled, line, 0, NULL, 0);
> +                                if (!ret) {
> +                                        /* A successful regular expression match! */
> +                                        matched = true;
> +                                } else if (ret != REG_NOMATCH) {
> +                                        char msg[1024];
> +
> +                                        regerror(ret, &pattern->compiled, msg, sizeof(msg));
> +                                        fwts_log_info(fw, "regular expression engine error: %s.", msg);
> +                                }
> +                        }
> +                        break;
> +                case FWTS_COMPARE_STRING:
> +                default:
> +                        matched = (strstr(line, pattern->pattern) != NULL) ;
> +                        break;
> +                }
> +
> +                if (matched) {
> +                        if (pattern->level == LOG_LEVEL_INFO)
> +                                fwts_log_info(fw, "%s message: %s", name, line);
> +                        else {
> +                                fwts_failed(fw, pattern->level, pattern->label,
> +                                        "%s %s message: %s", fwts_log_level_to_str(pattern->level), name, line);
> +                                fwts_error_inc(fw, pattern->label, errors);
> +                        }
> +                        if (repeated)
> +                                fwts_log_info(fw, "Message repeated %d times.", repeated);
> +
> +                        if ((pattern->advice) != NULL && (*pattern->advice))
> +                                fwts_advice(fw, "%s", pattern->advice);
> +                        else
> +                                fwts_advice(fw, "%s", advice);
> +                        return;
> +                }
> +                pattern++;
> +        }
> +}
> 
Acked-by: Alex Hung <alex.hung@canonical.com>
diff mbox series

Patch

diff --git a/src/lib/include/fwts_log_scan.h b/src/lib/include/fwts_log_scan.h
index ac56dba2..0f03d336 100644
--- a/src/lib/include/fwts_log_scan.h
+++ b/src/lib/include/fwts_log_scan.h
@@ -46,5 +46,6 @@  fwts_list *fwts_log_find_changes(fwts_list *log_old, fwts_list *log_new);
 char      *fwts_log_remove_timestamp(char *text);
 int        fwts_log_scan(fwts_framework *fw, fwts_list *log, fwts_log_scan_func callback, fwts_log_progress_func progress, void *private, int *errors, bool remove_timestamp);
 char *fwts_log_unique_label(const char *str, const char *label);
+void       fwts_log_scan_patterns(fwts_framework *fw, char *line, int repeated, char *prevline, void *private, int *errors, const char *name, const char *advice);
 
 #endif
diff --git a/src/lib/src/fwts_klog.c b/src/lib/src/fwts_klog.c
index cfb76d7f..48ebf13b 100644
--- a/src/lib/src/fwts_klog.c
+++ b/src/lib/src/fwts_klog.c
@@ -113,55 +113,11 @@  void fwts_klog_scan_patterns(fwts_framework *fw,
 	void *private,
 	int *errors)
 {
-	fwts_log_pattern *pattern = (fwts_log_pattern *)private;
-	static char *advice =
-		"This is a bug picked up by the kernel, but as yet, the "
-		"firmware test suite has no diagnostic advice for this particular problem.";
-
-	FWTS_UNUSED(prevline);
-
-	while (pattern->pattern != NULL) {
-		bool matched = false;
-		switch (pattern->compare_mode) {
-		case FWTS_COMPARE_REGEX:
-			if (pattern->compiled_ok) {
-				int ret = regexec(&pattern->compiled, line, 0, NULL, 0);
-				if (!ret) {
-					/* A successful regular expression match! */
-					matched = true;
-				} else if (ret != REG_NOMATCH) {
-					char msg[1024];
-
-					regerror(ret, &pattern->compiled, msg, sizeof(msg));
-					fwts_log_info(fw, "regular expression engine error: %s.", msg);
-				}
-			}
-			break;
-		case FWTS_COMPARE_STRING:
-		default:
-			matched = (strstr(line, pattern->pattern) != NULL) ;
-			break;
-		}
+    static char *advice =
+        "This is a bug picked up by the kernel, but as yet, the "
+        "firmware test suite has no diagnostic advice for this particular problem.";
 
-		if (matched) {
-			if (pattern->level == LOG_LEVEL_INFO)
-				fwts_log_info(fw, "Kernel message: %s", line);
-			else {
-				fwts_failed(fw, pattern->level, pattern->label,
-					"%s Kernel message: %s", fwts_log_level_to_str(pattern->level), line);
-				fwts_error_inc(fw, pattern->label, errors);
-			}
-			if (repeated)
-				fwts_log_info(fw, "Message repeated %d times.", repeated);
-
-			if ((pattern->advice) != NULL && (*pattern->advice))
-				fwts_advice(fw, "%s", pattern->advice);
-			else
-				fwts_advice(fw, "%s", advice);
-			return;
-		}
-		pattern++;
-	}
+    fwts_log_scan_patterns(fw, line, repeated, prevline, private, errors, "Kernel", advice);
 }
 
 /*
diff --git a/src/lib/src/fwts_log_scan.c b/src/lib/src/fwts_log_scan.c
index d9c2ac1e..40611a36 100644
--- a/src/lib/src/fwts_log_scan.c
+++ b/src/lib/src/fwts_log_scan.c
@@ -239,3 +239,60 @@  char *fwts_log_unique_label(const char *str, const char *label)
         *dst = '\0';
         return buffer;
 }
+
+void fwts_log_scan_patterns(fwts_framework *fw,
+        char *line,
+        int  repeated,
+        char *prevline,
+        void *private,
+        int *errors,
+        const char *name,
+        const char *advice)
+{
+        fwts_log_pattern *pattern = (fwts_log_pattern *)private;
+
+        FWTS_UNUSED(prevline);
+
+        while (pattern->pattern != NULL) {
+                bool matched = false;
+                switch (pattern->compare_mode) {
+                case FWTS_COMPARE_REGEX:
+                        if (pattern->compiled_ok) {
+                                int ret = regexec(&pattern->compiled, line, 0, NULL, 0);
+                                if (!ret) {
+                                        /* A successful regular expression match! */
+                                        matched = true;
+                                } else if (ret != REG_NOMATCH) {
+                                        char msg[1024];
+
+                                        regerror(ret, &pattern->compiled, msg, sizeof(msg));
+                                        fwts_log_info(fw, "regular expression engine error: %s.", msg);
+                                }
+                        }
+                        break;
+                case FWTS_COMPARE_STRING:
+                default:
+                        matched = (strstr(line, pattern->pattern) != NULL) ;
+                        break;
+                }
+
+                if (matched) {
+                        if (pattern->level == LOG_LEVEL_INFO)
+                                fwts_log_info(fw, "%s message: %s", name, line);
+                        else {
+                                fwts_failed(fw, pattern->level, pattern->label,
+                                        "%s %s message: %s", fwts_log_level_to_str(pattern->level), name, line);
+                                fwts_error_inc(fw, pattern->label, errors);
+                        }
+                        if (repeated)
+                                fwts_log_info(fw, "Message repeated %d times.", repeated);
+
+                        if ((pattern->advice) != NULL && (*pattern->advice))
+                                fwts_advice(fw, "%s", pattern->advice);
+                        else
+                                fwts_advice(fw, "%s", advice);
+                        return;
+                }
+                pattern++;
+        }
+}