[ABRT PATCH] Use common string-to-sha1_hash functions. #694

Denys Vlasenko dvlasenk at redhat.com
Tue Sep 10 12:27:30 UTC 2013


Signed-off-by: Denys Vlasenko <dvlasenk at redhat.com>
---
 src/cli/abrt-cli-core.c                     | 18 +++---------------
 src/cli/abrt-cli-core.h                     |  1 -
 src/cli/list.c                              |  3 ++-
 src/lib/kernel.c                            |  8 +-------
 src/plugins/abrt-action-analyze-backtrace.c | 14 +-------------
 src/plugins/abrt-action-analyze-c.c         | 14 +-------------
 src/plugins/abrt-action-analyze-python.c    | 13 ++++---------
 7 files changed, 12 insertions(+), 59 deletions(-)

diff --git a/src/cli/abrt-cli-core.c b/src/cli/abrt-cli-core.c
index 89bd04a..23a74a8 100644
--- a/src/cli/abrt-cli-core.c
+++ b/src/cli/abrt-cli-core.c
@@ -74,19 +74,6 @@ static bool isxdigit_str(const char *str)
     return true;
 }
 
-const char *str2hash(const char *str)
-{
-    static char result[SHA1_RESULT_LEN*2 + 1];
-
-    char hash_bytes[SHA1_RESULT_LEN];
-    sha1_ctx_t sha1ctx;
-    sha1_begin(&sha1ctx);
-    sha1_hash(&sha1ctx, str, strlen(str));
-    sha1_end(&sha1ctx, hash_bytes);
-    bin2hex(result, hash_bytes, SHA1_RESULT_LEN)[0] = '\0';
-    return result;
-}
-
 struct name_resolution_param {
     const char *shortcut;
     unsigned strlen_shortcut;
@@ -96,8 +83,9 @@ struct name_resolution_param {
 static int find_dir_by_hash(struct dump_dir *dd, void *arg)
 {
     struct name_resolution_param *param = arg;
-    const char *h = str2hash(dd->dd_dirname);
-    if (strncasecmp(param->shortcut, h, param->strlen_shortcut) == 0)
+    char hash_str[SHA1_RESULT_LEN*2 + 1];
+    str_to_sha1str(hash_str, dd->dd_dirname);
+    if (strncasecmp(param->shortcut, hash_str, param->strlen_shortcut) == 0)
     {
         if (param->found_name)
             error_msg_and_die(_("'%s' identifies more than one problem directory"), param->shortcut);
diff --git a/src/cli/abrt-cli-core.h b/src/cli/abrt-cli-core.h
index 2e5dfe5..83d0b5d 100644
--- a/src/cli/abrt-cli-core.h
+++ b/src/cli/abrt-cli-core.h
@@ -30,7 +30,6 @@ void free_vector_of_problem_data(vector_of_problem_data_t *vector);
 vector_of_problem_data_t *new_vector_of_problem_data(void);
 vector_of_problem_data_t *fetch_crash_infos(GList *dir_list);
 
-const char *str2hash(const char *str);
 /* Returns malloced string, or NULL if not found: */
 char *hash2dirname(const char *hash);
 
diff --git a/src/cli/list.c b/src/cli/list.c
index c6bc895..a7209ed 100644
--- a/src/cli/list.c
+++ b/src/cli/list.c
@@ -110,9 +110,10 @@ static void print_crash_list(vector_of_problem_data_t *crash_list, int detailed,
                 continue;
         }
 
+        char hash_str[SHA1_RESULT_LEN*2 + 1];
         struct problem_item *item = g_hash_table_lookup(crash, CD_DUMPDIR);
         if (item)
-            printf("@%s\n", str2hash(item->content));
+            printf("@%s\n", str_to_sha1str(hash_str, item->content));
         print_crash(crash, detailed, text_size);
         if (i != crash_list->len - 1)
             printf("\n");
diff --git a/src/lib/kernel.c b/src/lib/kernel.c
index dd2383b..54bf048 100644
--- a/src/lib/kernel.c
+++ b/src/lib/kernel.c
@@ -517,14 +517,8 @@ int koops_hash_str(char hash_str[SHA1_RESULT_LEN*2 + 1], const char *oops_buf)
      */
     int bad = (kernel_bt->len == 0);
 
-    char hash_bytes[SHA1_RESULT_LEN];
-    sha1_ctx_t sha1ctx;
-    sha1_begin(&sha1ctx);
-    sha1_hash(&sha1ctx, kernel_bt->buf, kernel_bt->len);
-    sha1_end(&sha1ctx, hash_bytes);
+    str_to_sha1str(hash_str, kernel_bt->buf);
     strbuf_free(kernel_bt);
-
-    bin2hex(hash_str, hash_bytes, SHA1_RESULT_LEN)[0] = '\0';
     VERB3 log("hash: %s", hash_str);
 
     return bad;
diff --git a/src/plugins/abrt-action-analyze-backtrace.c b/src/plugins/abrt-action-analyze-backtrace.c
index 9348195..99055cf 100644
--- a/src/plugins/abrt-action-analyze-backtrace.c
+++ b/src/plugins/abrt-action-analyze-backtrace.c
@@ -25,18 +25,6 @@
 static const char *dump_dir_name = ".";
 
 
-static void create_hash(char hash_str[SHA1_RESULT_LEN*2 + 1], const char *pInput)
-{
-    char hash_bytes[SHA1_RESULT_LEN];
-    sha1_ctx_t sha1ctx;
-    sha1_begin(&sha1ctx);
-    sha1_hash(&sha1ctx, pInput, strlen(pInput));
-    sha1_end(&sha1ctx, hash_bytes);
-
-    bin2hex(hash_str, hash_bytes, SHA1_RESULT_LEN)[0] = '\0';
-    //log("hash:%s str:'%s'", hash_str, pInput);
-}
-
 int main(int argc, char **argv)
 {
     /* I18n */
@@ -111,7 +99,7 @@ int main(int argc, char **argv)
 
         VERB3 log("Generating duphash: %s", emptybt->buf);
         char hash_str[SHA1_RESULT_LEN*2 + 1];
-        create_hash(hash_str, emptybt->buf);
+        str_to_sha1str(hash_str, emptybt->buf);
 
         dd_save_text(dd, FILENAME_DUPHASH, hash_str);
         /*
diff --git a/src/plugins/abrt-action-analyze-c.c b/src/plugins/abrt-action-analyze-c.c
index cb2bd78..a53f4fb 100644
--- a/src/plugins/abrt-action-analyze-c.c
+++ b/src/plugins/abrt-action-analyze-c.c
@@ -18,18 +18,6 @@
 */
 #include "libabrt.h"
 
-static void create_hash(char hash_str[SHA1_RESULT_LEN*2 + 1], const char *pInput)
-{
-    char hash_bytes[SHA1_RESULT_LEN];
-    sha1_ctx_t sha1ctx;
-    sha1_begin(&sha1ctx);
-    sha1_hash(&sha1ctx, pInput, strlen(pInput));
-    sha1_end(&sha1ctx, hash_bytes);
-
-    bin2hex(hash_str, hash_bytes, SHA1_RESULT_LEN)[0] = '\0';
-    //log("hash:%s str:'%s'", hash_str, pInput);
-}
-
 static void trim_unstrip_output(char *result, const char *unstrip_n_output)
 {
     // lines look like this:
@@ -144,7 +132,7 @@ int main(int argc, char **argv)
     /*free(unstrip_n_output);*/
 
     char hash_str[SHA1_RESULT_LEN*2 + 1];
-    create_hash(hash_str, string_to_hash);
+    str_to_sha1str(hash_str, string_to_hash);
 
     dd_save_text(dd, FILENAME_UUID, hash_str);
     dd_close(dd);
diff --git a/src/plugins/abrt-action-analyze-python.c b/src/plugins/abrt-action-analyze-python.c
index f9b2105..b7ad1a6 100644
--- a/src/plugins/abrt-action-analyze-python.c
+++ b/src/plugins/abrt-action-analyze-python.c
@@ -59,16 +59,11 @@ int main(int argc, char **argv)
     /* Hash 1st line of backtrace and save it as UUID and DUPHASH */
     /* "example.py:1:<module>:ZeroDivisionError: integer division or modulo by zero" */
 
-    char hash_bytes[SHA1_RESULT_LEN];
-    sha1_ctx_t sha1ctx;
-    sha1_begin(&sha1ctx);
-    const char *bt_end = strchrnul(bt, '\n');
-    sha1_hash(&sha1ctx, bt, bt_end - bt);
-    sha1_end(&sha1ctx, hash_bytes);
-    free(bt);
-
+    char *bt_end = strchrnul(bt, '\n');
+    *bt_end = '\0';
     char hash_str[SHA1_RESULT_LEN*2 + 1];
-    bin2hex(hash_str, hash_bytes, SHA1_RESULT_LEN)[0] = '\0';
+    str_to_sha1str(hash_str, bt);
+    free(bt);
 
     dd_save_text(dd, FILENAME_UUID, hash_str);
     dd_save_text(dd, FILENAME_DUPHASH, hash_str);
-- 
1.8.1.4



More information about the Crash-catcher mailing list