functions that do not modify their parameters get them as const pointers.
special cases:
* kmod_get_userdata/kmod_set_userdata: return as void* for user convenience.
* kmod_list_append/kmod_list_prepend: take const void* for user convenience.
};
const char *kmod_alias_get_name(const struct kmod_list *l) {
- struct kmod_alias *alias = l->data;
+ const struct kmod_alias *alias = l->data;
return alias->name;
}
const char *kmod_alias_get_modname(const struct kmod_list *l) {
- struct kmod_alias *alias = l->data;
+ const struct kmod_alias *alias = l->data;
return alias->modname;
}
{
size_t i, n = 0;
- char **files = NULL;
+ const char **files;
int err = 0;
struct kmod_list *list = NULL, *l;
return node;
}
-static inline struct list_node *list_node_next(struct list_node *node)
+static inline struct list_node *list_node_next(const struct list_node *node)
{
if (node == NULL)
return NULL;
return node->next;
}
-static inline struct list_node *list_node_prev(struct list_node *node)
+static inline struct list_node *list_node_prev(const struct list_node *node)
{
if (node == NULL)
return NULL;
return node->prev;
}
-struct kmod_list *kmod_list_append(struct kmod_list *list, void *data)
+struct kmod_list *kmod_list_append(struct kmod_list *list, const void *data)
{
struct kmod_list *new;
if (new == NULL)
return NULL;
- new->data = data;
+ new->data = (void *)data;
list_node_append(list ? &list->node : NULL, &new->node);
return list ? list : new;
}
-struct kmod_list *kmod_list_prepend(struct kmod_list *list, void *data)
+struct kmod_list *kmod_list_prepend(struct kmod_list *list, const void *data)
{
struct kmod_list *new;
if (new == NULL)
return NULL;
- new->data = data;
+ new->data = (void *)data;
list_node_append(list ? &list->node : NULL, &new->node);
return new;
return list;
}
-KMOD_EXPORT struct kmod_list *kmod_list_prev(struct kmod_list *list,
- struct kmod_list *curr)
+KMOD_EXPORT struct kmod_list *kmod_list_prev(const struct kmod_list *list,
+ const struct kmod_list *curr)
{
if (list == NULL || curr == NULL)
return NULL;
return container_of(curr->node.prev, struct kmod_list, node);
}
-KMOD_EXPORT struct kmod_list *kmod_list_next(struct kmod_list *list,
- struct kmod_list *curr)
+KMOD_EXPORT struct kmod_list *kmod_list_next(const struct kmod_list *list,
+ const struct kmod_list *curr)
{
if (list == NULL || curr == NULL)
return NULL;
const char **deps,
uintptr_t *addr)
{
- struct kmod_loaded_module *m;
+ const struct kmod_loaded_module *m;
if (entry == NULL)
return -ENOENT;
/*
* We don't increase the refcount. Maybe we should.
*/
-KMOD_EXPORT struct kmod_list *kmod_module_get_dependency(struct kmod_module *mod)
+KMOD_EXPORT struct kmod_list *kmod_module_get_dependency(const struct kmod_module *mod)
{
// FIXME calculate dependency if it's not initialized
return mod->dep;
}
-KMOD_EXPORT struct kmod_module *kmod_module_get_module(struct kmod_list *l)
+KMOD_EXPORT struct kmod_module *kmod_module_get_module(const struct kmod_list *l)
{
struct kmod_module *mod = l->data;
return kmod_module_ref(mod);
}
-KMOD_EXPORT const char *kmod_module_get_name(struct kmod_module *mod)
+KMOD_EXPORT const char *kmod_module_get_name(const struct kmod_module *mod)
{
// FIXME calculate name if name == NULL
return mod->name;
}
-KMOD_EXPORT const char *kmod_module_get_path(struct kmod_module *mod)
+KMOD_EXPORT const char *kmod_module_get_path(const struct kmod_module *mod)
{
// FIXME calculate path if path == NULL
return mod->path;
void *data;
};
-struct kmod_list *kmod_list_append(struct kmod_list *list, void *data) __must_check;
-struct kmod_list *kmod_list_prepend(struct kmod_list *list, void *data) __must_check;
+struct kmod_list *kmod_list_append(struct kmod_list *list, const void *data) __must_check;
+struct kmod_list *kmod_list_prepend(struct kmod_list *list, const void *data) __must_check;
struct kmod_list *kmod_list_remove(struct kmod_list *list);
struct kmod_list *kmod_list_remove_data(struct kmod_list *list,
const void *data) __must_check;
unsigned int n) __must_check;
/* libkmod.c */
-const char *kmod_get_dirname(struct kmod_ctx *ctx) __attribute__((nonnull(1)));
+const char *kmod_get_dirname(const struct kmod_ctx *ctx) __attribute__((nonnull(1)));
int kmod_lookup_alias_from_config(struct kmod_ctx *ctx, const char *name, struct kmod_list **list);
int kmod_lookup_alias_from_symbols_file(struct kmod_ctx *ctx, const char *name, struct kmod_list **list);
int kmod_lookup_alias_from_aliases_file(struct kmod_ctx *ctx, const char *name, struct kmod_list **list);
void (*log_fn)(struct kmod_ctx *ctx,
int priority, const char *file, int line,
const char *fn, const char *format, va_list args);
- void *userdata;
- const char *dirname;
+ const void *userdata;
+ char *dirname;
int log_priority;
struct kmod_config config;
};
vfprintf(stderr, format, args);
}
-const char *kmod_get_dirname(struct kmod_ctx *ctx)
+const char *kmod_get_dirname(const struct kmod_ctx *ctx)
{
return ctx->dirname;
}
{
if (ctx == NULL)
return NULL;
- return ctx->userdata;
+ return (void *)ctx->userdata;
}
/**
*
* Store custom @userdata in the library context.
**/
-KMOD_EXPORT void kmod_set_userdata(struct kmod_ctx *ctx, void *userdata)
+KMOD_EXPORT void kmod_set_userdata(struct kmod_ctx *ctx, const void *userdata)
{
if (ctx == NULL)
return;
static const char *dirname_default_prefix = "/lib/modules";
-static const char *get_kernel_release(const char *dirname)
+static char *get_kernel_release(const char *dirname)
{
struct utsname u;
char *p;
if (--ctx->refcount > 0)
return ctx;
INFO(ctx, "context %p released\n", ctx);
- free((char *)ctx->dirname);
+ free(ctx->dirname);
kmod_free_config(ctx, &ctx->config);
free(ctx);
return NULL;
int kmod_get_log_priority(const struct kmod_ctx *ctx);
void kmod_set_log_priority(struct kmod_ctx *ctx, int priority);
void *kmod_get_userdata(const struct kmod_ctx *ctx);
-void kmod_set_userdata(struct kmod_ctx *ctx, void *userdata);
+void kmod_set_userdata(struct kmod_ctx *ctx, const void *userdata);
/*
* kmod_list
* access to kmod generated lists
*/
struct kmod_list;
-struct kmod_list *kmod_list_next(struct kmod_list *first_entry,
- struct kmod_list *list_entry);
-struct kmod_list *kmod_list_prev(struct kmod_list *first_entry,
- struct kmod_list *list_entry);
+struct kmod_list *kmod_list_next(const struct kmod_list *first_entry,
+ const struct kmod_list *list_entry);
+struct kmod_list *kmod_list_prev(const struct kmod_list *first_entry,
+ const struct kmod_list *list_entry);
#define kmod_list_foreach(list_entry, first_entry) \
for (list_entry = first_entry; \
list_entry != NULL; \
struct kmod_module *kmod_module_ref(struct kmod_module *mod);
struct kmod_module *kmod_module_unref(struct kmod_module *mod);
int kmod_module_unref_list(struct kmod_list *list);
-struct kmod_module *kmod_module_get_module(struct kmod_list *l);
-struct kmod_list *kmod_module_get_dependency(struct kmod_module *mod);
+struct kmod_module *kmod_module_get_module(const struct kmod_list *l);
+struct kmod_list *kmod_module_get_dependency(const struct kmod_module *mod);
int kmod_module_remove_module(struct kmod_module *mod, unsigned int flags);
int kmod_module_insert_module(struct kmod_module *mod, unsigned int flags);
-const char *kmod_module_get_name(struct kmod_module *mod);
-const char *kmod_module_get_path(struct kmod_module *mod);
+const char *kmod_module_get_name(const struct kmod_module *mod);
+const char *kmod_module_get_path(const struct kmod_module *mod);
#ifdef __cplusplus
} /* extern "C" */