Forgot to report some bugs in this userland_modules.cpp. Should switch to
use the libkernelland_emul.so one day... Oh, and I change net_server into net_stack_tester, which is what it's really... just a network stack tester host app. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@5114 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -3,12 +3,12 @@ SubDir OBOS_TOP src tests servers net net_server ;
|
|||||||
UsePrivateHeaders net ;
|
UsePrivateHeaders net ;
|
||||||
|
|
||||||
AddResources
|
AddResources
|
||||||
net_server
|
net_stack_tester
|
||||||
:
|
:
|
||||||
net_server.rsrc
|
net_server.rsrc
|
||||||
;
|
;
|
||||||
|
|
||||||
SimpleTest net_server :
|
SimpleTest net_stack_tester :
|
||||||
userland_modules.cpp
|
userland_modules.cpp
|
||||||
userland_ipc.c
|
userland_ipc.c
|
||||||
net_server.cpp
|
net_server.cpp
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
#include <drivers/KernelExport.h>
|
#include <drivers/KernelExport.h>
|
||||||
#include <drivers/module.h>
|
#include <drivers/module.h>
|
||||||
@@ -86,12 +87,14 @@ static int32 g_next_module_id = 1;
|
|||||||
// Public routines
|
// Public routines
|
||||||
// ---------------
|
// ---------------
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
_EXPORT status_t get_module(const char * name, module_info ** mi)
|
_EXPORT status_t get_module(const char * name, module_info ** mi)
|
||||||
{
|
{
|
||||||
status_t status;
|
status_t status;
|
||||||
module * m;
|
module * m;
|
||||||
|
|
||||||
printf("get_module(%s)\n", name);
|
// printf("get_module(%s)\n", name);
|
||||||
|
|
||||||
m = find_loaded_module_by_name(name);
|
m = find_loaded_module_by_name(name);
|
||||||
if (!m)
|
if (!m)
|
||||||
@@ -123,7 +126,7 @@ _EXPORT status_t put_module(const char * name)
|
|||||||
{
|
{
|
||||||
module * m;
|
module * m;
|
||||||
|
|
||||||
printf("put_module(%s)\n", name);
|
// printf("put_module(%s)\n", name);
|
||||||
|
|
||||||
m = find_loaded_module_by_name(name);
|
m = find_loaded_module_by_name(name);
|
||||||
if (!m)
|
if (!m)
|
||||||
@@ -207,6 +210,7 @@ _EXPORT void * open_module_list(const char *prefix)
|
|||||||
mlc->search_paths = (addon_path ? strdup(addon_path) : NULL);
|
mlc->search_paths = (addon_path ? strdup(addon_path) : NULL);
|
||||||
mlc->search_path = strtok_r(mlc->search_paths, ":", &mlc->next_path_token);
|
mlc->search_path = strtok_r(mlc->search_paths, ":", &mlc->next_path_token);
|
||||||
mlc->dir_stack = new BList();
|
mlc->dir_stack = new BList();
|
||||||
|
|
||||||
mlc->ma = NULL;
|
mlc->ma = NULL;
|
||||||
mlc->mi = NULL;
|
mlc->mi = NULL;
|
||||||
|
|
||||||
@@ -250,6 +254,7 @@ _EXPORT status_t read_next_module_name(void *cookie, char *buf, size_t *bufsize)
|
|||||||
};
|
};
|
||||||
|
|
||||||
// We've iterate all module names of this module addon. Find another one...
|
// We've iterate all module names of this module addon. Find another one...
|
||||||
|
atomic_add(&mlc->ma->ref_count, -1);
|
||||||
unload_module_addon(mlc->ma);
|
unload_module_addon(mlc->ma);
|
||||||
mlc->ma = NULL;
|
mlc->ma = NULL;
|
||||||
mlc->mi = NULL;
|
mlc->mi = NULL;
|
||||||
@@ -314,6 +319,7 @@ _EXPORT status_t read_next_module_name(void *cookie, char *buf, size_t *bufsize)
|
|||||||
// WTF it's doing there?!?
|
// WTF it's doing there?!?
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
atomic_add(&mlc->ma->ref_count, 1);
|
||||||
// call ourself to enter the module names list iteration at
|
// call ourself to enter the module names list iteration at
|
||||||
// function begining code...
|
// function begining code...
|
||||||
mlc->mi = mlc->ma->infos;
|
mlc->mi = mlc->ma->infos;
|
||||||
@@ -346,8 +352,10 @@ _EXPORT status_t close_module_list(void *cookie)
|
|||||||
ASSERT(mlc);
|
ASSERT(mlc);
|
||||||
ASSERT(mlc->prefix);
|
ASSERT(mlc->prefix);
|
||||||
|
|
||||||
if (mlc->ma)
|
if (mlc->ma) {
|
||||||
|
atomic_add(&mlc->ma->ref_count, -1);
|
||||||
unload_module_addon(mlc->ma);
|
unload_module_addon(mlc->ma);
|
||||||
|
};
|
||||||
|
|
||||||
while((dir = (BDirectory *) mlc->dir_stack->FirstItem())) {
|
while((dir = (BDirectory *) mlc->dir_stack->FirstItem())) {
|
||||||
mlc->dir_stack->RemoveItem(dir);
|
mlc->dir_stack->RemoveItem(dir);
|
||||||
@@ -399,6 +407,16 @@ _EXPORT thread_id spawn_kernel_thread(thread_entry func, const char *name, long
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_EXPORT int send_signal_etc(pid_t thid, uint sig, uint32 flags)
|
||||||
|
{
|
||||||
|
return send_signal(thid, sig);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // extern "C"
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
// Private routines
|
// Private routines
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user