Signed-off-by: Nikola Pajkovsky <npajkovs(a)redhat.com>
---
src/include/abrt_crash_dump.h | 1 +
src/include/report/dump_dir.h | 1 +
src/lib/crash_dump.c | 31 +++++++++++++++++++++++++++++++
src/lib/dump_dir.c | 41 +++++++++++++++++++++++++++++++++++++++++
4 files changed, 74 insertions(+), 0 deletions(-)
diff --git a/src/include/abrt_crash_dump.h b/src/include/abrt_crash_dump.h
index 9ecbf56..aa62000 100644
--- a/src/include/abrt_crash_dump.h
+++ b/src/include/abrt_crash_dump.h
@@ -70,6 +70,7 @@
// (a string with "\n" terminated event names)
#define CD_EVENTS "Events"
+extern const char *abrt_known_files[];
#ifdef __cplusplus
extern "C" {
diff --git a/src/include/report/dump_dir.h b/src/include/report/dump_dir.h
index bf3b120..913eca1 100644
--- a/src/include/report/dump_dir.h
+++ b/src/include/report/dump_dir.h
@@ -58,6 +58,7 @@ char* dd_load_text(const struct dump_dir *dd, const char *name);
void dd_save_text(struct dump_dir *dd, const char *name, const char *data);
void dd_save_binary(struct dump_dir *dd, const char *name, const char *data, unsigned
size);
void dd_delete(struct dump_dir *dd);
+char **dd_get_unknown_files(struct dump_dir *dd, const char **known_files);
void delete_dump_dir(const char *dd_dir);
diff --git a/src/lib/crash_dump.c b/src/lib/crash_dump.c
index 189ec9c..c7f44e5 100644
--- a/src/lib/crash_dump.c
+++ b/src/lib/crash_dump.c
@@ -19,6 +19,37 @@
#include "abrtlib.h"
#include "abrt_crash_dump.h"
+const char *abrt_known_files[] = {
+ FILENAME_ANALYZER ,
+ FILENAME_EXECUTABLE ,
+ FILENAME_BINARY ,
+ FILENAME_CMDLINE ,
+ FILENAME_REASON ,
+ FILENAME_COREDUMP ,
+ FILENAME_MEMORYMAP ,
+ FILENAME_DUPHASH ,
+ FILENAME_CRASH_FUNCTION ,
+ FILENAME_ARCHITECTURE ,
+ FILENAME_KERNEL ,
+ FILENAME_TIME ,
+ FILENAME_RELEASE ,
+ FILENAME_PACKAGE ,
+ FILENAME_COMPONENT ,
+ FILENAME_DESCRIPTION ,
+ FILENAME_COMMENT ,
+ FILENAME_REPRODUCE ,
+ FILENAME_RATING ,
+ FILENAME_HOSTNAME ,
+ FILENAME_REMOTE ,
+ FILENAME_TAINTED ,
+ FILENAME_UID ,
+ FILENAME_UUID ,
+ FILENAME_INFORMALL ,
+ FILENAME_COUNT ,
+ FILENAME_MESSAGE ,
+ NULL
+};
+
static void free_crash_item(void *ptr)
{
if (ptr)
diff --git a/src/lib/dump_dir.c b/src/lib/dump_dir.c
index 8e1744a..0e0b5f1 100644
--- a/src/lib/dump_dir.c
+++ b/src/lib/dump_dir.c
@@ -503,6 +503,47 @@ int dd_get_next_file(struct dump_dir *dd, char **short_name, char
**full_name)
return 0;
}
+/*
+ * return list of unknown files in dump directory
+ */
+char **dd_get_unknown_files(struct dump_dir *dd, const char **known_files)
+{
+ if (!dd->locked)
+ error_msg_and_die("dump_dir is not opened"); /* bug */
+
+ char *short_name = NULL;
+ unsigned size = 16;
+ unsigned idx = 0;
+ char **unknowns = xzalloc(sizeof(char*) * size);
+
+ dd_init_next_file(dd);
+ while (dd_get_next_file(dd, &short_name, NULL))
+ {
+ if (idx + 1 >= size)
+ {
+ size *= 2;
+ unknowns = xrealloc(unknowns, sizeof(char*) * size);
+ }
+
+ const char *const *v = known_files;
+ while (*v)
+ {
+ if (strcmp(*v, short_name) == 0)
+ break;
+ v++;
+ }
+
+ if (*v)
+ continue;
+
+ unknowns[idx++] = short_name;
+ }
+
+ unknowns[idx] = NULL;
+
+ return unknowns;
+}
+
/* Utility function */
void delete_dump_dir(const char *dd_dir)
{
--
1.7.3.3.489.g44430