[Haiku-commits] r24315 - in haiku/trunk: headers/private/kernel src/system/kernel src/system/kernel/device_manager
axeld at BerliOS
axeld at mail.berlios.de
Sun Mar 9 00:12:47 CET 2008
Author: axeld
Date: 2008-03-09 00:12:46 +0100 (Sun, 09 Mar 2008)
New Revision: 24315
ViewCVS: http://svn.berlios.de/viewcvs/haiku?rev=24315&view=rev
Modified:
haiku/trunk/headers/private/kernel/safemode.h
haiku/trunk/src/system/kernel/device_manager/settings.cpp
haiku/trunk/src/system/kernel/module.cpp
Log:
* Added a get_safemode_boolean() function for easy access to the safemode
options.
* module_init() now sets sDisableUserAddOns to whatever the safemode settings
say, ie. the B_SAFEMODE_DISABLE_USER_ADD_ONS setting is now respected by
the module code.
* Minor cleanup.
Modified: haiku/trunk/headers/private/kernel/safemode.h
===================================================================
--- haiku/trunk/headers/private/kernel/safemode.h 2008-03-08 20:49:30 UTC (rev 24314)
+++ haiku/trunk/headers/private/kernel/safemode.h 2008-03-08 23:12:46 UTC (rev 24315)
@@ -1,5 +1,5 @@
/*
- * Copyright 2004-2007, Axel Dörfler, axeld at pinc-software.de. All rights reserved.
+ * Copyright 2004-2008, Axel Dörfler, axeld at pinc-software.de. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _KERNEL_SAFEMODE_H
@@ -25,6 +25,7 @@
#endif
status_t get_safemode_option(const char *parameter, char *buffer, size_t *_bufferSize);
+bool get_safemode_boolean(const char *parameter, bool defaultValue);
status_t _user_get_safemode_option(const char *parameter, char *buffer, size_t *_bufferSize);
#ifdef __cplusplus
Modified: haiku/trunk/src/system/kernel/device_manager/settings.cpp
===================================================================
--- haiku/trunk/src/system/kernel/device_manager/settings.cpp 2008-03-08 20:49:30 UTC (rev 24314)
+++ haiku/trunk/src/system/kernel/device_manager/settings.cpp 2008-03-08 23:12:46 UTC (rev 24315)
@@ -33,6 +33,20 @@
}
+extern "C" bool
+get_safemode_boolean(const char *parameter, bool defaultValue)
+{
+ char value[16];
+ size_t length = sizeof(value);
+
+ if (get_safemode_option(parameter, value, &length) != B_OK)
+ return defaultValue;
+
+ return !strcmp(value, "on") || !strcmp(value, "true") || !strcmp(value, "1")
+ || !strcmp(value, "yes") || !strcmp(value, "enabled");
+}
+
+
// #pragma mark -
Modified: haiku/trunk/src/system/kernel/module.cpp
===================================================================
--- haiku/trunk/src/system/kernel/module.cpp 2008-03-08 20:49:30 UTC (rev 24314)
+++ haiku/trunk/src/system/kernel/module.cpp 2008-03-08 23:12:46 UTC (rev 24315)
@@ -1,12 +1,12 @@
/*
- * Copyright 2002-2007, Haiku Inc. All rights reserved.
+ * Copyright 2002-2008, Haiku Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Copyright 2001, Thomas Kurschel. All rights reserved.
* Distributed under the terms of the NewOS License.
*/
-/** Manages kernel add-ons and their exported modules. */
+/*! Manages kernel add-ons and their exported modules. */
#include <kmodule.h>
@@ -22,6 +22,7 @@
#include <vfs.h>
#include <boot/elf.h>
#include <fs/KPath.h>
+#include <safemode.h>
#include <util/AutoLock.h>
#include <util/khash.h>
@@ -37,10 +38,9 @@
#define MODULE_HASH_SIZE 16
-/** The modules referenced by this structure are built-in
- * modules that can't be loaded from disk.
- */
-
+/*! The modules referenced by this structure are built-in
+ modules that can't be loaded from disk.
+*/
extern module_info gDeviceManagerModule;
extern module_info gDeviceRootModule;
extern module_info gDeviceForDriversModule;
@@ -157,15 +157,14 @@
#define NUM_MODULE_PATHS (sizeof(sModulePaths) / sizeof(sModulePaths[0]))
#define FIRST_USER_MODULE_PATH (NUM_MODULE_PATHS - 1) /* first user path */
-/* we store the loaded modules by directory path, and all known modules by module name
- * in a hash table for quick access
+/* We store the loaded modules by directory path, and all known modules
+ * by module name in a hash table for quick access
*/
static hash_table *sModuleImagesHash;
static hash_table *sModulesHash;
-/** calculates hash for a module using its name */
-
+/*! Calculates hash for a module using its name */
static uint32
module_hash(void *_module, const void *_key, uint32 range)
{
@@ -182,8 +181,7 @@
}
-/** compares a module to a given name */
-
+/*! Compares a module to a given name */
static int
module_compare(void *_module, const void *_key)
{
@@ -196,8 +194,7 @@
}
-/** calculates the hash of a module image using its path */
-
+/*! Calculates the hash of a module image using its path */
static uint32
module_image_hash(void *_module, const void *_key, uint32 range)
{
@@ -214,8 +211,7 @@
}
-/** compares a module image to a path */
-
+/*! Compares a module image to a path */
static int
module_image_compare(void *_module, const void *_key)
{
@@ -228,11 +224,10 @@
}
-/** Try to load the module image at the specified location.
- * If it could be loaded, it returns B_OK, and stores a pointer
- * to the module_image object in "_moduleImage".
- */
-
+/*! Try to load the module image at the specified location.
+ If it could be loaded, it returns B_OK, and stores a pointer
+ to the module_image object in "_moduleImage".
+*/
static status_t
load_module_image(const char *path, module_image **_moduleImage)
{
@@ -361,10 +356,9 @@
}
-/** Extract the information from the module_info structure pointed at
- * by "info" and create the entries required for access to it's details.
- */
-
+/*! Extract the information from the module_info structure pointed at
+ by "info" and create the entries required for access to it's details.
+*/
static status_t
create_module(module_info *info, const char *file, int offset, module **_module)
{
@@ -419,13 +413,12 @@
}
-/** Loads the file at "path" and scans all modules contained therein.
- * Returns B_OK if "searchedName" could be found under those modules,
- * B_ENTRY_NOT_FOUND if not.
- * Must only be called for files that haven't been scanned yet.
- * "searchedName" is allowed to be NULL (if all modules should be scanned)
- */
-
+/*! Loads the file at "path" and scans all modules contained therein.
+ Returns B_OK if "searchedName" could be found under those modules,
+ B_ENTRY_NOT_FOUND if not.
+ Must only be called for files that haven't been scanned yet.
+ "searchedName" is allowed to be NULL (if all modules should be scanned)
+*/
static status_t
check_module_image(const char *path, const char *searchedName)
{
@@ -463,10 +456,9 @@
}
-/** This is only called if we fail to find a module already in our cache...
- * saves us some extra checking here :)
- */
-
+/*! This is only called if we fail to find a module already in our cache...
+ saves us some extra checking here :)
+*/
static module *
search_module(const char *name)
{
@@ -546,8 +538,7 @@
}
-/** Initializes a loaded module depending on its state */
-
+/*! Initializes a loaded module depending on its state */
static inline status_t
init_module(module *module)
{
@@ -604,8 +595,7 @@
}
-/** Uninitializes a module depeding on its state */
-
+/*! Uninitializes a module depeding on its state */
static inline int
uninit_module(module *module)
{
@@ -999,14 +989,12 @@
}
-// #pragma mark -
-// Exported Kernel API (private part)
+// #pragma mark - Exported Kernel API (private part)
-/** Unloads a module in case it's not in use. This is the counterpart
- * to load_module().
- */
-
+/*! Unloads a module in case it's not in use. This is the counterpart
+ to load_module().
+*/
status_t
unload_module(const char *path)
{
@@ -1024,15 +1012,14 @@
}
-/** Unlike get_module(), this function lets you specify the add-on to
- * be loaded by path.
- * However, you must not use the exported modules without having called
- * get_module() on them. When you're done with the NULL terminated
- * \a modules array, you have to call unload_module(), no matter if
- * you're actually using any of the modules or not - of course, the
- * add-on won't be unloaded until the last put_module().
- */
-
+/*! Unlike get_module(), this function lets you specify the add-on to
+ be loaded by path.
+ However, you must not use the exported modules without having called
+ get_module() on them. When you're done with the NULL terminated
+ \a modules array, you have to call unload_module(), no matter if
+ you're actually using any of the modules or not - of course, the
+ add-on won't be unloaded until the last put_module().
+*/
status_t
load_module(const char *path, module_info ***_modules)
{
@@ -1046,10 +1033,9 @@
}
-/** Setup the module structures and data for use - must be called
- * before any other module call.
- */
-
+/*! Setup the module structures and data for use - must be called
+ before any other module call.
+*/
status_t
module_init(kernel_args *args)
{
@@ -1081,7 +1067,8 @@
}
}
- // ToDo: set sDisableUserAddOns from kernel_args!
+ sDisableUserAddOns = get_safemode_boolean(B_SAFEMODE_DISABLE_USER_ADD_ONS,
+ false);
add_debugger_command("modules", &dump_modules,
"list all known & loaded modules");
@@ -1090,19 +1077,17 @@
}
-// #pragma mark -
-// Exported Kernel API (public part)
+// #pragma mark - Exported Kernel API (public part)
-/** This returns a pointer to a structure that can be used to
- * iterate through a list of all modules available under
- * a given prefix.
- * All paths will be searched and the returned list will
- * contain all modules available under the prefix.
- * The structure is then used by read_next_module_name(), and
- * must be freed by calling close_module_list().
- */
-
+/*! This returns a pointer to a structure that can be used to
+ iterate through a list of all modules available under
+ a given prefix.
+ All paths will be searched and the returned list will
+ contain all modules available under the prefix.
+ The structure is then used by read_next_module_name(), and
+ must be freed by calling close_module_list().
+*/
void *
open_module_list(const char *prefix)
{
@@ -1180,9 +1165,7 @@
}
-/** Frees the cookie allocated by open_module_list()
- */
-
+/*! Frees the cookie allocated by open_module_list() */
status_t
close_module_list(void *cookie)
{
@@ -1216,12 +1199,11 @@
}
-/** Return the next module name from the available list, using
- * a structure previously created by a call to open_module_list().
- * Returns B_OK as long as it found another module, B_ENTRY_NOT_FOUND
- * when done.
- */
-
+/*! Return the next module name from the available list, using
+ a structure previously created by a call to open_module_list().
+ Returns B_OK as long as it found another module, B_ENTRY_NOT_FOUND
+ when done.
+*/
status_t
read_next_module_name(void *cookie, char *buffer, size_t *_bufferSize)
{
@@ -1250,12 +1232,11 @@
}
-/** Iterates through all loaded modules, and stores its path in "buffer".
- * ToDo: check if the function in BeOS really does that (could also mean:
- * iterate through all modules that are currently loaded; have a valid
- * module_image pointer, which would be hard to test for)
- */
-
+/*! Iterates through all loaded modules, and stores its path in "buffer".
+ ToDo: check if the function in BeOS really does that (could also mean:
+ iterate through all modules that are currently loaded; have a valid
+ module_image pointer, which would be hard to test for)
+*/
status_t
get_next_loaded_module_name(uint32 *_cookie, char *buffer, size_t *_bufferSize)
{
More information about the Haiku-commits
mailing list