Signed-off-by: Nikola Pajkovsky <[email protected]>
---
 src/include/internal_libreport.h |    5 ++++-
 src/lib/is_in_string_list.c      |   14 +++++++++++---
 src/lib/make_descr.c             |   36 +++++++++++++++++++++++++++---------
 src/lib/problem_data.c           |    8 ++++----
 src/plugins/rhbz.c               |    7 ++++++-
 5 files changed, 52 insertions(+), 18 deletions(-)

diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h
index 95b600b..9011d2a 100644
--- a/src/include/internal_libreport.h
+++ b/src/include/internal_libreport.h
@@ -251,7 +251,7 @@ char *run_in_shell_and_save_output(int flags,
 /* Random utility functions */
 
 #define is_in_string_list libreport_is_in_string_list
-bool is_in_string_list(const char *name, char **v);
+bool is_in_string_list(const char *name, char **v, int flags);
 
 #define is_in_comma_separated_list libreport_is_in_comma_separated_list
 bool is_in_comma_separated_list(const char *value, const char *list);
@@ -572,6 +572,7 @@ enum {
     MAKEDESC_SHOW_FILES     = (1 << 0),
     MAKEDESC_SHOW_MULTILINE = (1 << 1),
     MAKEDESC_SHOW_ONLY_LIST = (1 << 2),
+    MAKEDESC_WHITELIST      = (1 << 3),
 };
 #define make_description libreport_make_description
 char *make_description(problem_data_t *problem_data, char **names_to_skip, 
unsigned max_text_size, unsigned desc_flags);
@@ -579,6 +580,8 @@ char *make_description(problem_data_t *problem_data, char 
**names_to_skip, unsig
 char* make_description_bz(problem_data_t *problem_data, unsigned 
max_text_size);
 #define make_description_logger libreport_make_description_logger
 char* make_description_logger(problem_data_t *problem_data, unsigned 
max_text_size);
+#define make_description_koops libreport_make_description_koops
+char* make_description_koops(problem_data_t *problem_data, unsigned 
max_text_size);
 //UNUSED
 //#define make_description_mailx libreport_make_description_mailx
 //char* make_description_mailx(problem_data_t *problem_data);
diff --git a/src/lib/is_in_string_list.c b/src/lib/is_in_string_list.c
index 663edff..b347b2b 100644
--- a/src/lib/is_in_string_list.c
+++ b/src/lib/is_in_string_list.c
@@ -18,13 +18,21 @@
 */
 #include "internal_libreport.h"
 
-bool is_in_string_list(const char *name, char **v)
+bool is_in_string_list(const char *name, char **v, int flags)
 {
+    bool ret = false;
     while (*v)
     {
         if (strcmp(*v, name) == 0)
-            return true;
+        {
+            ret = true;
+            break;
+        }
         v++;
     }
-    return false;
+
+    if (flags & MAKEDESC_WHITELIST)
+        ret = !ret;
+
+    return ret;
 }
diff --git a/src/lib/make_descr.c b/src/lib/make_descr.c
index a1a9234..f7ac058 100644
--- a/src/lib/make_descr.c
+++ b/src/lib/make_descr.c
@@ -18,7 +18,8 @@
 */
 #include "internal_libreport.h"
 
-char *make_description(problem_data_t *problem_data, char **names_to_skip, 
unsigned max_text_size, unsigned desc_flags)
+char *make_description(problem_data_t *problem_data, char **names_to_skip,
+                       unsigned max_text_size, unsigned desc_flags)
 {
     struct strbuf *buf_dsc = strbuf_new();
 
@@ -42,7 +43,8 @@ char *make_description(problem_data_t *problem_data, char 
**names_to_skip, unsig
 
         /* Skip items we are not interested in */
 //TODO: optimize by doing this once, not 3 times:
-        if (names_to_skip && is_in_string_list(key, names_to_skip))
+        if (names_to_skip
+            && is_in_string_list(key, names_to_skip, desc_flags))
             continue;
 
         struct problem_item *item = g_hash_table_lookup(problem_data, key);
@@ -87,7 +89,8 @@ char *make_description(problem_data_t *problem_data, char 
**names_to_skip, unsig
             l = l->next;
 
             /* Skip items we are not interested in */
-            if (names_to_skip && is_in_string_list(key, names_to_skip))
+            if (names_to_skip
+                && is_in_string_list(key, names_to_skip, desc_flags))
                 continue;
 
             struct problem_item *item = g_hash_table_lookup(problem_data, key);
@@ -144,7 +147,8 @@ char *make_description(problem_data_t *problem_data, char 
**names_to_skip, unsig
             l = l->next;
 
             /* Skip items we are not interested in */
-            if (names_to_skip && is_in_string_list(key, names_to_skip))
+            if (names_to_skip
+                && is_in_string_list(key, names_to_skip, desc_flags))
                 continue;
 
             struct problem_item *item = g_hash_table_lookup(problem_data, key);
@@ -251,11 +255,6 @@ static const char *const blacklisted_items[] = {
     NULL
 };
 
-/*
- * npajkovs: implement second part of problem (not so important)
- * https://bugzilla.redhat.com/show_bug.cgi?id=711591
- */
-
 char* make_description_bz(problem_data_t *problem_data, unsigned max_text_size)
 {
     return make_description(
@@ -275,3 +274,22 @@ char* make_description_logger(problem_data_t 
*problem_data, unsigned max_text_si
                 MAKEDESC_SHOW_FILES | MAKEDESC_SHOW_MULTILINE
     );
 }
+
+/* Items we want to include to bz */
+static const char *const whitelisted_items[] = {
+    FILENAME_CMDLINE,
+    FILENAME_BACKTRACE,
+    NULL
+};
+
+char* make_description_koops(problem_data_t *problem_data, unsigned 
max_text_size)
+{
+    return make_description(
+                problem_data,
+                (char**)whitelisted_items,
+                max_text_size,
+                MAKEDESC_SHOW_FILES
+                | MAKEDESC_SHOW_MULTILINE
+                | MAKEDESC_WHITELIST
+    );
+}
diff --git a/src/lib/problem_data.c b/src/lib/problem_data.c
index 2a7835a..06098de 100644
--- a/src/lib/problem_data.c
+++ b/src/lib/problem_data.c
@@ -213,7 +213,7 @@ static const char *const editable_files[] = {
 };
 static bool is_editable_file(const char *file_name)
 {
-    return is_in_string_list(file_name, (char**)editable_files);
+    return is_in_string_list(file_name, (char**)editable_files, /* flags */ 0);
 }
 
 static const char *const always_text_files[] = {
@@ -257,7 +257,7 @@ static char* is_text_file(const char *name, ssize_t *sz)
     if (base)
     {
         base++;
-        if (is_in_string_list(base, (char**)always_text_files))
+        if (is_in_string_list(base, (char**)always_text_files, /* flags */ 0))
             return buf;
     }
 
@@ -298,7 +298,7 @@ void load_problem_data_from_dump_dir(problem_data_t 
*problem_data, struct dump_d
     dd_init_next_file(dd);
     while (dd_get_next_file(dd, &short_name, &full_name))
     {
-        if (excluding && is_in_string_list(short_name, excluding))
+        if (excluding && is_in_string_list(short_name, excluding, /* flags */ 
0))
         {
             //log("Excluded:'%s'", short_name);
             goto next;
@@ -373,7 +373,7 @@ void load_problem_data_from_dump_dir(problem_data_t 
*problem_data, struct dump_d
             FILENAME_COUNT     ,
             NULL
         };
-        if (is_in_string_list(short_name, (char**)list_files))
+        if (is_in_string_list(short_name, (char**)list_files, /* flags */ 0))
             flags |= CD_FLAG_LIST;
 
         if (strcmp(short_name, FILENAME_TIME) == 0)
diff --git a/src/plugins/rhbz.c b/src/plugins/rhbz.c
index 9ed3154..a3aa2ef 100644
--- a/src/plugins/rhbz.c
+++ b/src/plugins/rhbz.c
@@ -438,7 +438,12 @@ int rhbz_new_bug(struct abrt_xmlrpc *ax, problem_data_t 
*problem_data,
     }
     char *status_whiteboard = xasprintf("abrt_hash:%s", duphash);
 
-    char *bz_dsc = make_description_bz(problem_data, CD_TEXT_ATT_SIZE_BZ);
+    char *bz_dsc;
+    if (analyzer && !strcmp(analyzer, "Kerneloops"))
+        bz_dsc = make_description_koops(problem_data, CD_TEXT_ATT_SIZE_BZ);
+    else
+        bz_dsc = make_description_bz(problem_data, CD_TEXT_ATT_SIZE_BZ);
+
     char *full_dsc = xasprintf("libreport version: "VERSION"\n%s", bz_dsc);
     free(bz_dsc);
 
-- 
1.7.7.2

Reply via email to