From bc98731f4c6dc8235230a2484f236654c79f19be Mon Sep 17 00:00:00 2001 From: Piotr Pawlow Date: Fri, 11 Aug 2017 13:46:32 +0200 Subject: [PATCH] btrfs-progs: image: move core find_collision code to a separate function Author: Piotr Pawlow Signed-off-by: David Sterba --- image/main.c | 75 +++++++++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 33 deletions(-) diff --git a/image/main.c b/image/main.c index e0c627b0..e59271eb 100644 --- a/image/main.c +++ b/image/main.c @@ -339,44 +339,12 @@ static u64 logical_to_physical(struct mdrestore_struct *mdres, u64 logical, } -static char *find_collision(struct metadump_struct *md, char *name, - u32 name_len) +static int find_collision_brute_force(struct name *val, u32 name_len) { - struct name *val; - struct rb_node *entry; - struct name tmp; unsigned long checksum; int found = 0; int i; - tmp.val = name; - tmp.len = name_len; - entry = tree_search(&md->name_tree, &tmp.n, name_cmp, 0); - if (entry) { - val = rb_entry(entry, struct name, n); - free(name); - return val->sub; - } - - val = malloc(sizeof(struct name)); - if (!val) { - error("cannot sanitize name, not enough memory"); - free(name); - return NULL; - } - - memset(val, 0, sizeof(*val)); - - val->val = name; - val->len = name_len; - val->sub = malloc(name_len); - if (!val->sub) { - error("cannot sanitize name, not enough memory"); - free(val); - free(name); - return NULL; - } - checksum = crc32c(~1, val->val, name_len); memset(val->sub, ' ', name_len); i = 0; @@ -408,6 +376,47 @@ static char *find_collision(struct metadump_struct *md, char *name, val->sub[i]++; } } + return found; +} + +static char *find_collision(struct metadump_struct *md, char *name, + u32 name_len) +{ + struct name *val; + struct rb_node *entry; + struct name tmp; + int found; + int i; + + tmp.val = name; + tmp.len = name_len; + entry = tree_search(&md->name_tree, &tmp.n, name_cmp, 0); + if (entry) { + val = rb_entry(entry, struct name, n); + free(name); + return val->sub; + } + + val = malloc(sizeof(struct name)); + if (!val) { + error("cannot sanitize name, not enough memory"); + free(name); + return NULL; + } + + memset(val, 0, sizeof(*val)); + + val->val = name; + val->len = name_len; + val->sub = malloc(name_len); + if (!val->sub) { + error("cannot sanitize name, not enough memory"); + free(val); + free(name); + return NULL; + } + + found = find_collision_brute_force(val, name_len); if (!found) { warning(