]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
libkmod-module: add visited field
authorLucas De Marchi <lucas.demarchi@profusion.mobi>
Wed, 18 Jan 2012 03:26:44 +0000 (01:26 -0200)
committerLucas De Marchi <lucas.demarchi@profusion.mobi>
Mon, 30 Jan 2012 15:52:22 +0000 (13:52 -0200)
This field can be used to iterate the modules, controlling whether we
are revisiting a certain module. A function to clear the values in all
modules is needed since when we are iterating, we don't know if the
module is created anew or if it's picked from the pool. Therefore we
can't know if the field is true because of a previous iteration or if
the module was indeed already visited.

libkmod/libkmod-module.c
libkmod/libkmod-private.h
libkmod/libkmod.c

index 983deef1d9da66b04d7dfca44668cfb85c5523a5..e4adcc6419acebf008caa30acf32a79c97a15a49 100644 (file)
@@ -68,6 +68,7 @@ struct kmod_module {
                bool install_commands : 1;
                bool remove_commands : 1;
        } init;
+       bool visited : 1;
 };
 
 static inline const char *path_join(const char *path, size_t prefixlen,
@@ -163,6 +164,11 @@ fail:
        return err;
 }
 
+void kmod_module_set_visited(struct kmod_module *mod, bool visited)
+{
+       mod->visited = visited;
+}
+
 /**
  * kmod_module_new_from_name:
  * @ctx: kmod library context
index 274cb1d08ca6e1a2d740ae3e1f97731ef7a1f08c..0ee37d4987605e648fd04bdb097cd3c127079579 100644 (file)
@@ -82,6 +82,7 @@ int kmod_lookup_alias_from_symbols_file(struct kmod_ctx *ctx, const char *name,
 int kmod_lookup_alias_from_aliases_file(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3)));
 int kmod_lookup_alias_from_moddep_file(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3)));
 int kmod_lookup_alias_from_commands(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3)));
+void kmod_set_modules_visited(struct kmod_ctx *ctx, bool visited) __attribute__((nonnull((1))));
 
 char *kmod_search_moddep(struct kmod_ctx *ctx, const char *name) __attribute__((nonnull(1,2)));
 
@@ -135,6 +136,7 @@ int kmod_module_new_from_alias(struct kmod_ctx *ctx, const char *alias, const ch
 int kmod_module_parse_depline(struct kmod_module *mod, char *line) __attribute__((nonnull(1, 2)));
 void kmod_module_set_install_commands(struct kmod_module *mod, const char *cmd) __attribute__((nonnull(1)));
 void kmod_module_set_remove_commands(struct kmod_module *mod, const char *cmd) __attribute__((nonnull(1)));
+void kmod_module_set_visited(struct kmod_module *mod, bool visited) __attribute__((nonnull(1)));
 
 /* libkmod-hash.c */
 
index 5edd594e33e3956e4a969d4e1b0345610ae6dd05..d5bcab1af8552dfcb71eb8a1cdecaf01ec07851b 100644 (file)
@@ -613,6 +613,16 @@ int kmod_lookup_alias_from_commands(struct kmod_ctx *ctx, const char *name,
        return nmatch;
 }
 
+void kmod_set_modules_visited(struct kmod_ctx *ctx, bool visited)
+{
+       struct hash_iter iter;
+       const void *v;
+
+       hash_iter_init(ctx->modules_by_name, &iter);
+       while (hash_iter_next(&iter, NULL, &v))
+               kmod_module_set_visited((struct kmod_module *)v, visited);
+}
+
 static bool is_cache_invalid(const char *path, unsigned long long stamp)
 {
        struct stat st;