Commit Graph

1008 Commits

Author SHA1 Message Date
Gustavo Sverzut Barbieri 405f614af9 index: improve buffer management and reduce mallocs.
Grow buffer based on a step, avoiding hitting the system over and over
again.

Do not allocate the 'struct buffer' as in all cases the lifetime is
known and the pattern was allocate then free in every call site.
2011-12-08 14:38:22 -02:00
Gustavo Sverzut Barbieri e18ad35c64 fix path handling at dependencies parsing.
paths come relative to dirname, make them absolute to avoid confusion
later.
2011-12-08 14:12:39 -02:00
Gustavo Sverzut Barbieri e5c60f1c28 NULL safety in public places, allows disable logging. 2011-12-08 14:07:13 -02:00
Gustavo Sverzut Barbieri 1bdd951ee2 log: give log function its data instead of kmod_ctx.
This will be the most common use case for logging, also changed
log_stderr() to log_filep() with data being stderr to test it.
2011-12-08 14:06:50 -02:00
Gustavo Sverzut Barbieri e1a6b30dc4 modname_normalize: fix const and buffer overflow.
"buf[NAME_MAX] = value" is invalid since it would access the byte
right after the array.

Also fix the const of modname, do not mess with it to avoid mistakes.
2011-12-08 13:33:25 -02:00
Lucas De Marchi 8fc83fe1de kmod_loaded: document exported function 2011-12-08 12:59:16 -02:00
Lucas De Marchi 7e1b3ae2b9 kmod_list: document exported functions 2011-12-08 12:25:36 -02:00
Gustavo Sverzut Barbieri f1fb6f8525 kmod_module: Remove const from path
It's an ugly hack. This is an internal variable, we know we shouldn't
change it everywhere.
2011-12-08 11:37:03 -02:00
Gustavo Sverzut Barbieri 1487a64ffa add kmod_module_get_filtered_blacklist()
This function will filter the given list against the known blacklist,
returning a new list with remaining modules with the reference
incremented.
2011-12-08 11:17:16 -02:00
Lucas De Marchi e005facdb9 Only search path in moddep if it's not already set
rmmod/insmod should be able to operate directly on files, not relying on
indexes and configuration.

The following test was not working and now it is:

$ # go to a dir != mod->dirname
$ cd /lib/modules/$(uname -r)/kernel
$ # try to insert module giving a relative path
$ insmod drivers/acpi/ac.ko
2011-12-08 11:15:24 -02:00
Lucas De Marchi 4eb2c0fca1 Fix abs path helper function 2011-12-08 11:15:24 -02:00
Lucas De Marchi ac9f8761fe test-insmod: show the path libkmod is using 2011-12-08 11:15:24 -02:00
Gustavo Sverzut Barbieri 97a3ea9e9d test-insmod: print name to test modname_normalize(). 2011-12-08 11:15:24 -02:00
Lucas De Marchi 6bd0b8d01d kmod_module: treat module creation by path with same names
If a module with the same name already exists, try to reference it if
paths are the same. Otherwise fail.
2011-12-07 14:15:49 -02:00
Lucas De Marchi 71e975cd4d kmod_module: store absolute path when creating module from path 2011-12-07 13:53:53 -02:00
Lucas De Marchi 06363cc126 Add helper path_make_absolute_cwd() 2011-12-07 13:51:40 -02:00
Lucas De Marchi 3a468809b8 Add helper path_is_absolute() 2011-12-07 13:50:52 -02:00
Lucas De Marchi a5cce6d6ef kmod_config: parse install and remove commands 2011-12-07 11:31:28 -02:00
Lucas De Marchi 615c42be5c kmod_config: parse module options 2011-12-07 10:59:44 -02:00
Lucas De Marchi afca78015b Add helper strchr_replace() 2011-12-07 10:59:44 -02:00
Lucas De Marchi 877e80cd93 Use streq() when possible 2011-12-07 02:32:28 -02:00
Lucas De Marchi 6c343b1aee Split function so we don't call basename() unnecessarily 2011-12-06 09:02:13 -02:00
Lucas De Marchi fab4978ac1 test: add test for modules' hash 2011-12-06 03:49:30 -02:00
Lucas De Marchi fd186ae996 Maintain a pool of modules alive
Based on previous implementation by
	Gustavo Sverzut Barbieri <barbieri@profusion.mobi>
2011-12-06 03:49:07 -02:00
Lucas De Marchi b7b7ac298f kmod_config: optimize config files handling
1) Allocate less by not sorting the result with qsort. Instead,
    insert the nodes in the correct order;
 2) Do not maintain the whole path in memory, but rely on openat()
2011-12-06 03:34:51 -02:00
Lucas De Marchi e16e27f4a4 kmod_list: remove nodes in order 2011-12-06 03:34:51 -02:00
Lucas De Marchi 1965029cb0 kmod_list: add helper function to merge two lists
This helper function will append the second list in the first one, so
they become one single list.
2011-12-06 03:34:51 -02:00
Lucas De Marchi b91a1c6d3d kmod_list: add helper kmod_list_insert_before() 2011-12-06 03:34:51 -02:00
Lucas De Marchi 86e8788572 kmod_list: add helper kmod_list_insert_after() 2011-12-06 03:34:51 -02:00
Lucas De Marchi 1843b153b4 test: add test to get dependencies of a module 2011-12-06 03:34:51 -02:00
Lucas De Marchi c5b5ea9c7c test: add test to convert name to path
If we create a kmod_module from a name, the path returned is relative to
the module dirname, as passed during kmod_ctx creation. Note that if
kmod_ctx is created with kmod_new(NULL), the dir used is the one
returned by uname.
2011-12-06 03:34:51 -02:00
Lucas De Marchi 4f2bb7cdd4 kmod_module: normalize module name 2011-12-06 03:34:51 -02:00
Lucas De Marchi c5e7b1f7ef kmod_module: get path on demand 2011-12-06 02:48:04 -02:00
Lucas De Marchi 671d489424 kmod_module: parse dependencies on demand 2011-12-06 02:48:04 -02:00
Lucas De Marchi 1eb2ef694c Split function to search moddep file 2011-12-06 02:48:04 -02:00
Lucas De Marchi f1cd799fb0 kmod_module: return a new list and increase ref of dependencies
kmod_module_get_dependency is renamed to kmod_module_get_dependencies
since it's returning a list. To match other APIs, now it returns a new
list that user must free with kmod_module_unref_list().
2011-12-06 02:48:03 -02:00
Lucas De Marchi d2d648dfaf Fix missing parenthesis in macro 2011-12-06 02:48:03 -02:00
Gustavo Sverzut Barbieri 7db08652cd Add simple hash implementation 2011-12-05 19:24:06 -02:00
Lucas De Marchi d753b8ca35 kmod_module: inline name and make it always available 2011-12-05 18:14:51 -02:00
Gustavo Sverzut Barbieri 43c29d10ff kmod_alias: reduce from 3 mallocs to a single one. 2011-12-05 13:42:13 -02:00
Lucas De Marchi 40923bdb64 Use readdir_r in kmod_module_get_sections()
readdir() is not thread-safe. Use readdir_r instead.
2011-12-05 13:41:10 -02:00
Lucas De Marchi 53886ddd87 Use readdir_r in kmod_module_get_holders()
readdir() is not thread-safe. Use readdir_r instead.
2011-12-05 13:29:46 -02:00
Lucas De Marchi 49b741d0b0 Add padding to enum to make sure it's an int 2011-12-05 11:42:12 -02:00
Lucas De Marchi cf91579b8d Inline foreach macro for internal usage
Avoid calling _next() function because it's an exported function and
linker can not optimize it.

Thanks to "Gustavo Sverzut Barbieri <barbieri@profusion.mobi>" for
suggestion.
2011-12-05 11:33:15 -02:00
Gustavo Sverzut Barbieri 8226058343 tests: release memory before error exits.
this makes it easier to valgrind the error cases as well.
2011-12-05 01:45:21 -02:00
Gustavo Sverzut Barbieri 69f9dd4369 no more kmod_loaded and kmod_loaded_module.
kmod_loaded_get_list() now returns a regular list of kmod_modules, use
kmod_module_get_module(), kmod_module_unref() and
kmod_module_unref_list() to operate on it.
2011-12-04 17:24:08 -02:00
Gustavo Sverzut Barbieri f12ae3c438 kmod_module: extended information gathering.
provide means to get:
 * refcount
 * initstate
 * holders
 * sections

this can be used to individually query properties from modules,
similar to /proc/modules (kmod_loaded / kmod_loaded_module).
2011-12-04 17:24:08 -02:00
Gustavo Sverzut Barbieri ad4d1ae565 kmod_module_get_module: safety against NULL pointers 2011-12-04 17:24:08 -02:00
Gustavo Sverzut Barbieri 87ca03bd07 module refcount should start at 1.
the current way was having the referenced modules to be released given
the unref comparison checking for "> 0".
2011-12-04 17:24:08 -02:00
Gustavo Sverzut Barbieri 32c328d28e fix missing ")". 2011-12-04 15:34:43 -02:00