1 /***********************************************************************
3 * This software is part of the ast package *
4 * Copyright (c) 1997-2010 AT&T Intellectual Property *
5 * and is licensed under the *
6 * Common Public License, Version 1.0 *
7 * by AT&T Intellectual Property *
9 * A copy of the License is available at *
10 * http://www.opensource.org/licenses/cpl1.0.txt *
11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
13 * Information and Software Systems Research *
17 * Glenn Fowler <gsf@research.att.com> *
19 ***********************************************************************/
31 * find and load lib plugin/module library name with optional version ver and dlopen() flags
32 * at least one dlopen() is called to initialize dlerror()
33 * if path!=0 then library path up to size chars copied to path with trailing 0
34 * if name contains a directory prefix then library search is limited to the dir and siblings
38 dllplug(const char* lib
, const char* name
, const char* ver
, int flags
, char* path
, size_t size
)
48 if (dls
= dllsopen(lib
, name
, ver
))
50 while (dle
= dllsread(dls
))
53 if (dll
= dllopen(dle
->path
, flags
|RTLD_GLOBAL
|RTLD_PARENT
))
56 strncopy(path
, dle
->path
, size
);
60 errorf("dll", NiL
, 1, "%s: dlopen failed: %s", dle
->path
, dlerror());
70 if ((dll
= dllopen(name
, flags
)) && dll
&& path
&& size
)
71 strncopy(path
, name
, size
);