diff options
author | Andreas Baumann <abaumann@yahoo.com> | 2010-05-17 22:13:52 +0200 |
---|---|---|
committer | Andreas Baumann <abaumann@yahoo.com> | 2010-05-17 22:13:52 +0200 |
commit | 09f417b341229af5137586718440820614f35665 (patch) | |
tree | 7104bd2332f4f28aa565c4c7b22ed2f05f6b3499 | |
parent | fcb0704b0f88583e89023a55d2a8964742b93852 (diff) | |
download | wolfbones-09f417b341229af5137586718440820614f35665.tar.gz wolfbones-09f417b341229af5137586718440820614f35665.tar.bz2 |
started to add a dynamic library loader, interface and Linux/DLFCN for now
-rw-r--r-- | include/wolf/library/loader.h | 82 | ||||
-rw-r--r-- | src/GNUmakefile | 6 | ||||
-rw-r--r-- | src/library/loader.c | 35 | ||||
-rw-r--r-- | src/port/sys_internal.h | 1 | ||||
-rw-r--r-- | tests/GNUmakefile | 2 | ||||
-rw-r--r-- | tests/library/GNUmakefile | 22 | ||||
-rw-r--r-- | tests/library/test_loader.c | 32 |
7 files changed, 178 insertions, 2 deletions
diff --git a/include/wolf/library/loader.h b/include/wolf/library/loader.h new file mode 100644 index 0000000..233cd8c --- /dev/null +++ b/include/wolf/library/loader.h @@ -0,0 +1,82 @@ +/* + Copyright (C) 2010 Andreas Baumann <abaumann@yahoo.com> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef WOLF_LOADER_H +#define WOLF_LOADER_H + +/** + * @addtogroup wolf_library Loadable library support + * @{ + */ + +/** + * @file loader.h + * @brief Portable library loading functions + * @author Andreas Baumann <abaumann@yahoo.com> + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "port/sys.h" + +#include "errors.h" + +/* @brief handle representing a shared library + */ +typedef struct wolf_library_t *wolf_library_p; + +/** + * Loads a shared library. + * + * @param error indicates errors while loading the library + * + * @return the libary object + */ +wolf_library_p wolf_library_load( const char *name, wolf_error_t *error ); + +/** + * Free up resources used by the library object. + * + * @param demon the library object to free + */ +void wolf_library_unload( wolf_library_p library ); + +#if 0 + +#if !defined _WIN32 + +#include <dlfcn.h> /* for dlxxx functions */ + + +#else + +#define WIN32_MEAN_AND_LEAN +#include <windows.h> + +#endif /* !defined _WIN32 */ + +#endif + +#ifdef __cplusplus +} +#endif + +/** @} */ /* @addtogroup wolf_library */ + +#endif /* ifndef WOLF_LOADER_H */ diff --git a/src/GNUmakefile b/src/GNUmakefile index 39add1c..43af0d5 100644 --- a/src/GNUmakefile +++ b/src/GNUmakefile @@ -33,12 +33,16 @@ SERVICE_OBJS = \ NETWORK_OBJS = \ network/network_unix.o +LIBRARY_OBJS = \ + library/loader.o + OBJS = \ $(THREADING_OBJS) \ $(PORT_OBJS) \ $(LOG_OBJS) \ $(DAEMON_OBJS) \ - $(NETWORK_OBJS) + $(NETWORK_OBJS) \ + $(LIBRARY_OBJS) CATALOG_NAME = libwolf diff --git a/src/library/loader.c b/src/library/loader.c new file mode 100644 index 0000000..e0bb055 --- /dev/null +++ b/src/library/loader.c @@ -0,0 +1,35 @@ +/* + Copyright (C) 2010 Andreas Baumann <abaumann@yahoo.com> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "library/loader.h" +#include "port/unused.h" + +#include "port/stdlib.h" /* for malloc, free */ + +struct wolf_library_t { + char dummy; /**< dummy */ +}; + +wolf_library_p wolf_library_load( const char *name, wolf_error_t *error ) { + WOLF_UNUSED( name ); + *error = WOLF_OK; + return NULL; +} + +void wolf_library_unload( wolf_library_p library ) { + WOLF_UNUSED( library ); +} diff --git a/src/port/sys_internal.h b/src/port/sys_internal.h index 0bab5fb..1eaaa4e 100644 --- a/src/port/sys_internal.h +++ b/src/port/sys_internal.h @@ -31,6 +31,7 @@ #if OS_MINOR_VERSION == 6 #define HAVE_LOCK_F #define HAVE_LOCALTIME_R +#define HAVE_DLFCN #else #error unknown platform #endif /* defined OS_MINOR_VERSION == 6 */ diff --git a/tests/GNUmakefile b/tests/GNUmakefile index b5a23cc..ba00e61 100644 --- a/tests/GNUmakefile +++ b/tests/GNUmakefile @@ -1,6 +1,6 @@ TOPDIR = .. -SUBDIRS = threads port log gettext network daemon service +SUBDIRS = threads port log gettext network daemon service library -include $(TOPDIR)/makefiles/gmake/sub.mk diff --git a/tests/library/GNUmakefile b/tests/library/GNUmakefile new file mode 100644 index 0000000..18ae8aa --- /dev/null +++ b/tests/library/GNUmakefile @@ -0,0 +1,22 @@ +TOPDIR = ../.. + +INCLUDE_DIRS = \ + -I$(TOPDIR)/include/wolf -I. -I$(TOPDIR)/src + +INCLUDE_LIBS = \ + $(TOPDIR)/src/libwolf.a + +TEST_BINS = \ + test_loader$(EXE) + +-include $(TOPDIR)/makefiles/gmake/sub.mk + +local_all: + +local_clean: + +local_distclean: + +local_test: + @echo "Testing loading of a library and executing a function therein.." + @./test_loader >/dev/null diff --git a/tests/library/test_loader.c b/tests/library/test_loader.c new file mode 100644 index 0000000..ac4f79c --- /dev/null +++ b/tests/library/test_loader.c @@ -0,0 +1,32 @@ +/* + Copyright (C) 2010 Andreas Baumann <abaumann@yahoo.com> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "library/loader.h" + +#include <stdlib.h> /* for EXIT_SUCCESS, EXIT_FAILURE */ +#include <stdio.h> /* for fprintf */ + +int main( void ) { + wolf_library_p library; + wolf_error_t error; + + library = wolf_library_load( "testlib.so", &error ); + + wolf_library_unload( library ); + + return EXIT_SUCCESS; +} |