Signed-off-by: Nikola Pajkovsky npajkovs@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) {