Index: Makefile.inc
===================================================================
--- Makefile.inc	(revision 3195)
+++ Makefile.inc	(revision 3297)
@@ -9,5 +9,5 @@
 LIBROAR_V       = $(COMMON_VERSION)
 NETLIBS         = $(lib_dnet) $(lib_wsock32) $(lib_ws2_32)
-AUXLIBS         = $(lib_slp) $(lib_ssl) $(lib_sendfile)
+AUXLIBS         = $(lib_slp) $(lib_ssl) $(lib_sendfile) $(lib_dl)
 LIBROAR_NS      = $(AUXLIBS) $(NETLIBS)
 LIBROAR         = -lroar $(LIBROAR_NS)
Index: include/libroar/libroar.h
===================================================================
--- include/libroar/libroar.h	(revision 3272)
+++ include/libroar/libroar.h	(revision 3297)
@@ -90,6 +90,11 @@
 #endif
 
+#if defined(ROAR_HAVE_LIBDL)
+#include <dlfcn.h>
+#endif
+
 #include "error.h"
 #include "config.h"
+#include "roardl.h"
 #include "debug.h"
 #include "memmgr.h"
Index: include/libroar/roardl.h
===================================================================
--- include/libroar/roardl.h	(revision 3297)
+++ include/libroar/roardl.h	(revision 3297)
@@ -0,0 +1,70 @@
+//roardl.h:
+
+/*
+ *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2010
+ *
+ *  This file is part of libroar a part of RoarAudio,
+ *  a cross-platform sound system for both, home and professional use.
+ *  See README for details.
+ *
+ *  This file is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 3
+ *  as published by the Free Software Foundation.
+ *
+ *  libroar 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 software; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  NOTE for everyone want's to change something and send patches:
+ *  read README and HACKING! There a addition information on
+ *  the license of this document you need to read before you send
+ *  any patches.
+ *
+ *  NOTE for uses of non-GPL (LGPL,...) software using libesd, libartsc
+ *  or libpulse*:
+ *  The libs libroaresd, libroararts and libroarpulse link this lib
+ *  and are therefore GPL. Because of this it may be illigal to use
+ *  them with any software that uses libesd, libartsc or libpulse*.
+ */
+
+#ifndef _LIBROARROARDL_H_
+#define _LIBROARROARDL_H_
+
+#include "libroar.h"
+
+#define ROAR_DL_HANDLE_DEFAULT          ((struct roar_dl_lhandle*)(void*)0)
+#define ROAR_DL_HANDLE_NEXT             ((struct roar_dl_lhandle*)(void*)1)
+
+struct roar_dl_lhandle {
+#if defined(ROAR_HAVE_LIBDL)
+ void * handle;
+#else
+ char dummy[8];
+#endif
+};
+
+struct roar_dl_librarypara {
+ int version;
+ size_t len;
+};
+
+struct roar_dl_libraryinst {
+ int version;
+ size_t len;
+};
+
+struct roar_dl_lhandle * roar_dl_open(const char * filename, int flags, int ra_init);
+int                      roar_dl_close(struct roar_dl_lhandle * lhandle);
+
+void                   * roar_dl_getsym(struct roar_dl_lhandle * lhandle, const char * sym, int type);
+
+int                      roar_dl_ra_init(struct roar_dl_lhandle * lhandle, const char * prefix);
+
+#endif
+
+//ll
Index: libroar/Makefile
===================================================================
--- libroar/Makefile	(revision 3295)
+++ libroar/Makefile	(revision 3297)
@@ -8,5 +8,5 @@
 VIO_BRIDGE=vio_bio.o vio_stdio.o
 VIO=$(VIO_META) $(VIO_BRIDGE) vio_cmd.o vio_magic.o vio_pipe.o vio_socket.o vio_stack.o vio_jumbo.o vio_proto.o vio_dstr.o vio_tantalos.o vio_rtp.o
-OBJS=libroar.o config.o debug.o basic.o stream.o simple.o auth.o socket.o ctl.o buffer.o meta.o file.o acl.o cdrom.o pinentry.o sshaskpass.o $(VIO) stack.o slp.o nnode.o
+OBJS=libroar.o config.o debug.o basic.o stream.o simple.o auth.o socket.o ctl.o buffer.o meta.o file.o acl.o cdrom.o pinentry.o sshaskpass.o $(VIO) stack.o slp.o nnode.o roardl.o
 
 #DEFINES        = -DDEBUG
Index: libroar/roardl.c
===================================================================
--- libroar/roardl.c	(revision 3297)
+++ libroar/roardl.c	(revision 3297)
@@ -0,0 +1,98 @@
+//roardl.c:
+
+/*
+ *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2010
+ *
+ *  This file is part of libroar a part of RoarAudio,
+ *  a cross-platform sound system for both, home and professional use.
+ *  See README for details.
+ *
+ *  This file is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 3
+ *  as published by the Free Software Foundation.
+ *
+ *  libroar 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 software; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  NOTE for everyone want's to change something and send patches:
+ *  read README and HACKING! There a addition information on
+ *  the license of this document you need to read before you send
+ *  any patches.
+ *
+ *  NOTE for uses of non-GPL (LGPL,...) software using libesd, libartsc
+ *  or libpulse*:
+ *  The libs libroaresd, libroararts and libroarpulse link this lib
+ *  and are therefore GPL. Because of this it may be illigal to use
+ *  them with any software that uses libesd, libartsc or libpulse*.
+ */
+
+#include "libroar.h"
+
+#if defined(ROAR_HAVE_LIBDL)
+static void * _roardl2ldl (struct roar_dl_lhandle * lhandle) {
+ if ( lhandle == ROAR_DL_HANDLE_DEFAULT )
+  return RTLD_DEFAULT;
+
+ if ( lhandle == ROAR_DL_HANDLE_NEXT )
+  return RTLD_NEXT;
+
+ return lhandle->handle;
+}
+#endif
+
+struct roar_dl_lhandle * roar_dl_open(const char * filename, int flags, int ra_init) {
+ return NULL;
+}
+
+int                      roar_dl_close(struct roar_dl_lhandle * lhandle) {
+#if defined(ROAR_HAVE_LIBDL)
+ return dlclose(_roardl2ldl(lhandle));
+#else
+ return -1;
+#endif
+}
+
+void                   * roar_dl_getsym(struct roar_dl_lhandle * lhandle, const char * sym, int type) {
+#if defined(ROAR_HAVE_LIBDL)
+ return dlsym(_roardl2ldl(lhandle), sym);
+#else
+ return NULL;
+#endif
+}
+
+int                      roar_dl_ra_init(struct roar_dl_lhandle * lhandle, const char * prefix) {
+#define _SUFFIX "_roaraudio_library_init"
+ char name[80] = _SUFFIX;
+ struct roar_dl_libraryinst * (*func)(struct roar_dl_librarypara * para);
+ struct roar_dl_libraryinst * lib;
+
+ if ( (void*)lhandle < (void*)128 && prefix == NULL )
+  return -1;
+
+ if ( prefix != NULL ) {
+  strcpy(name, "_");
+  strcat(name, prefix);
+  strcat(name, "_");
+  strcat(name, _SUFFIX);
+ }
+
+ if ( (func = roar_dl_getsym(lhandle, name, -1)) == NULL )
+  return -1;
+
+ lib = func(NULL);
+
+ if ( lib == NULL )
+  return -1;
+
+ // do something with lib here.
+
+ return -1;
+}
+
+//ll
