summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLucas De Marchi <lucas.demarchi@intel.com>2013-08-13 10:31:11 -0300
committerLucas De Marchi <lucas.demarchi@intel.com>2013-09-20 14:33:38 -0500
commit54ea7920b24c7717a5d97089385661291737155f (patch)
tree5db6c53a48e8e54cc3451422245af0e20b35c71f
parent05f7fdacf572321564b6fe8d1f9b262737e1b6ec (diff)
downloadkmod-54ea7920b24c7717a5d97089385661291737155f.tar.gz
Dump hashes
-rw-r--r--libkmod/libkmod-hash.c31
-rw-r--r--libkmod/libkmod-hash.h3
-rw-r--r--tools/depmod.c4
3 files changed, 38 insertions, 0 deletions
diff --git a/libkmod/libkmod-hash.c b/libkmod/libkmod-hash.c
index dfe596f..58918b4 100644
--- a/libkmod/libkmod-hash.c
+++ b/libkmod/libkmod-hash.c
@@ -330,6 +330,37 @@ int hash_add(struct hash *hash, const char *key, const void *value)
return 0;
}
+void hash_dump(struct hash *hash)
+{
+ unsigned int i _unused_;
+
+ fprintf(stderr, "#####\n");
+ fprintf(stderr, "%p %d %u\n", hash, hash->count, hash->n_buckets);
+ fprintf(stderr, "#####\n");
+ for (i = 0; i < hash->n_buckets; i++) {
+ struct hash_bucket *bucket = hash->buckets + i;
+ fprintf(stderr, "%u %d\n", i, bucket->used);
+ }
+ fprintf(stderr, "#####\n");
+ hash_dump_keys(hash);
+ fprintf(stderr, "#####\n");
+}
+
+void hash_dump_keys(struct hash *hash)
+{
+ unsigned int i;
+
+ for (i = 0; i < hash->n_buckets; i++) {
+ struct hash_bucket *bucket = hash->buckets + i;
+ struct hash_entry *entry, *entry_end;
+
+ entry = bucket->entries;
+ entry_end = entry + bucket->used;
+ for (; entry < entry_end; entry++)
+ fprintf(stderr, "%s\n", entry->key);
+ }
+}
+
/* similar to hash_add(), but fails if key already exists */
int hash_add_unique(struct hash *hash, const char *key, const void *value)
{
diff --git a/libkmod/libkmod-hash.h b/libkmod/libkmod-hash.h
index ca0af05..09c536c 100644
--- a/libkmod/libkmod-hash.h
+++ b/libkmod/libkmod-hash.h
@@ -20,3 +20,6 @@ unsigned int hash_get_count(const struct hash *hash);
void hash_iter_init(const struct hash *hash, struct hash_iter *iter);
bool hash_iter_next(struct hash_iter *iter, const char **key,
const void **value);
+
+void hash_dump(struct hash *hash);
+void hash_dump_keys(struct hash *hash);
diff --git a/tools/depmod.c b/tools/depmod.c
index b1b5874..4b6ca5b 100644
--- a/tools/depmod.c
+++ b/tools/depmod.c
@@ -1032,6 +1032,10 @@ static void depmod_shutdown(struct depmod *depmod)
{
size_t i;
+ hash_dump(depmod->symbols);
+ hash_dump(depmod->modules_by_name);
+ hash_dump(depmod->modules_by_uncrelpath);
+
hash_free(depmod->symbols);
hash_free(depmod->modules_by_uncrelpath);