Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
K
KWSys
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Martin Willers
KWSys
Commits
771e0f22
Commit
771e0f22
authored
10 years ago
by
Ben Boeckel
Browse files
Options
Downloads
Patches
Plain Diff
DynamicLoader: use strings for arguments
Change-Id: Ie6769cd4f5afe6c21fac2de157ea5a767ed7bb1f
parent
9bf03363
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
DynamicLoader.cxx
+33
-33
33 additions, 33 deletions
DynamicLoader.cxx
DynamicLoader.hxx.in
+13
-2
13 additions, 2 deletions
DynamicLoader.hxx.in
with
46 additions
and
35 deletions
DynamicLoader.cxx
+
33
−
33
View file @
771e0f22
...
...
@@ -40,9 +40,9 @@ namespace KWSYS_NAMESPACE
{
//----------------------------------------------------------------------------
DynamicLoader
::
LibraryHandle
DynamicLoader
::
OpenLibrary
(
const
char
*
libname
)
DynamicLoader
::
LibraryHandle
DynamicLoader
::
OpenLibrary
(
const
kwsys_stl
::
string
&
libname
)
{
return
shl_load
(
libname
,
BIND_DEFERRED
|
DYNAMIC_PATH
,
0L
);
return
shl_load
(
libname
.
c_str
()
,
BIND_DEFERRED
|
DYNAMIC_PATH
,
0L
);
}
//----------------------------------------------------------------------------
...
...
@@ -53,7 +53,7 @@ int DynamicLoader::CloseLibrary(DynamicLoader::LibraryHandle lib)
//----------------------------------------------------------------------------
DynamicLoader
::
SymbolPointer
DynamicLoader
::
GetSymbolAddress
(
DynamicLoader
::
LibraryHandle
lib
,
const
char
*
sym
)
DynamicLoader
::
GetSymbolAddress
(
DynamicLoader
::
LibraryHandle
lib
,
const
kwsys_stl
::
string
&
sym
)
{
void
*
addr
;
int
status
;
...
...
@@ -62,7 +62,7 @@ DynamicLoader::GetSymbolAddress(DynamicLoader::LibraryHandle lib, const char* sy
* TYPE_DATA Look for a symbol in the data segment (for example, variables).
* TYPE_UNDEFINED Look for any symbol.
*/
status
=
shl_findsym
(
&
lib
,
sym
,
TYPE_UNDEFINED
,
&
addr
);
status
=
shl_findsym
(
&
lib
,
sym
.
c_str
()
,
TYPE_UNDEFINED
,
&
addr
);
void
*
result
=
(
status
<
0
)
?
(
void
*
)
0
:
addr
;
// Hack to cast pointer-to-data to pointer-to-function.
...
...
@@ -111,18 +111,18 @@ namespace KWSYS_NAMESPACE
{
//----------------------------------------------------------------------------
DynamicLoader
::
LibraryHandle
DynamicLoader
::
OpenLibrary
(
const
char
*
libname
)
DynamicLoader
::
LibraryHandle
DynamicLoader
::
OpenLibrary
(
const
kwsys_stl
::
string
&
libname
)
{
NSObjectFileImageReturnCode
rc
;
NSObjectFileImage
image
=
0
;
rc
=
NSCreateObjectFileImageFromFile
(
libname
,
&
image
);
rc
=
NSCreateObjectFileImageFromFile
(
libname
.
c_str
()
,
&
image
);
// rc == NSObjectFileImageInappropriateFile when trying to load a dylib file
if
(
rc
!=
NSObjectFileImageSuccess
)
{
return
0
;
}
NSModule
handle
=
NSLinkModule
(
image
,
libname
,
NSModule
handle
=
NSLinkModule
(
image
,
libname
.
c_str
()
,
NSLINKMODULE_OPTION_BINDNOW
|
NSLINKMODULE_OPTION_RETURN_ON_ERROR
);
NSDestroyObjectFileImage
(
image
);
return
handle
;
...
...
@@ -142,14 +142,14 @@ int DynamicLoader::CloseLibrary( DynamicLoader::LibraryHandle lib)
//----------------------------------------------------------------------------
DynamicLoader
::
SymbolPointer
DynamicLoader
::
GetSymbolAddress
(
DynamicLoader
::
LibraryHandle
lib
,
const
char
*
sym
)
DynamicLoader
::
LibraryHandle
lib
,
const
kwsys_stl
::
string
&
sym
)
{
void
*
result
=
0
;
// Need to prepend symbols with '_' on Apple-gcc compilers
size_t
len
=
s
trlen
(
sym
);
size_t
len
=
s
ym
.
size
(
);
char
*
rsym
=
new
char
[
len
+
1
+
1
];
strcpy
(
rsym
,
"_"
);
strcat
(
rsym
+
1
,
sym
);
strcat
(
rsym
+
1
,
sym
.
c_str
()
);
NSSymbol
symbol
=
NSLookupSymbolInModule
(
lib
,
rsym
);
if
(
symbol
)
...
...
@@ -183,13 +183,13 @@ namespace KWSYS_NAMESPACE
{
//----------------------------------------------------------------------------
DynamicLoader
::
LibraryHandle
DynamicLoader
::
OpenLibrary
(
const
char
*
libname
)
DynamicLoader
::
LibraryHandle
DynamicLoader
::
OpenLibrary
(
const
kwsys_stl
::
string
&
libname
)
{
DynamicLoader
::
LibraryHandle
lh
;
int
length
=
MultiByteToWideChar
(
CP_UTF8
,
0
,
libname
,
-
1
,
NULL
,
0
);
int
length
=
MultiByteToWideChar
(
CP_UTF8
,
0
,
libname
.
c_str
()
,
-
1
,
NULL
,
0
);
wchar_t
*
wchars
=
new
wchar_t
[
length
+
1
];
wchars
[
0
]
=
'\0'
;
MultiByteToWideChar
(
CP_UTF8
,
0
,
libname
,
-
1
,
wchars
,
length
);
MultiByteToWideChar
(
CP_UTF8
,
0
,
libname
.
c_str
()
,
-
1
,
wchars
,
length
);
lh
=
LoadLibraryW
(
wchars
);
delete
[]
wchars
;
return
lh
;
...
...
@@ -203,7 +203,7 @@ int DynamicLoader::CloseLibrary(DynamicLoader::LibraryHandle lib)
//----------------------------------------------------------------------------
DynamicLoader
::
SymbolPointer
DynamicLoader
::
GetSymbolAddress
(
DynamicLoader
::
LibraryHandle
lib
,
const
char
*
sym
)
DynamicLoader
::
LibraryHandle
lib
,
const
kwsys_stl
::
string
&
sym
)
{
// TODO: The calling convention affects the name of the symbol. We
// should have a tool to help get the symbol with the desired
...
...
@@ -230,12 +230,12 @@ DynamicLoader::SymbolPointer DynamicLoader::GetSymbolAddress(
void
*
result
;
#if defined(__BORLANDC__) || defined(__WATCOMC__)
// Need to prepend symbols with '_'
size_t
len
=
s
trlen
(
sym
);
size_t
len
=
s
ym
.
size
(
);
char
*
rsym
=
new
char
[
len
+
1
+
1
];
strcpy
(
rsym
,
"_"
);
strcat
(
rsym
,
sym
);
strcat
(
rsym
,
sym
.
c_str
()
);
#else
const
char
*
rsym
=
sym
;
const
char
*
rsym
=
sym
.
c_str
()
;
#endif
result
=
(
void
*
)
GetProcAddress
(
lib
,
rsym
);
#if defined(__BORLANDC__) || defined(__WATCOMC__)
...
...
@@ -298,11 +298,11 @@ namespace KWSYS_NAMESPACE
static
image_id
last_dynamic_err
=
B_OK
;
//----------------------------------------------------------------------------
DynamicLoader
::
LibraryHandle
DynamicLoader
::
OpenLibrary
(
const
char
*
libname
)
DynamicLoader
::
LibraryHandle
DynamicLoader
::
OpenLibrary
(
const
kwsys_stl
::
string
&
libname
)
{
// image_id's are integers, errors are negative. Add one just in case we
// get a valid image_id of zero (is that even possible?).
image_id
rc
=
load_add_on
(
libname
);
image_id
rc
=
load_add_on
(
libname
.
c_str
()
);
if
(
rc
<
0
)
{
last_dynamic_err
=
rc
;
...
...
@@ -336,7 +336,7 @@ int DynamicLoader::CloseLibrary(DynamicLoader::LibraryHandle lib)
//----------------------------------------------------------------------------
DynamicLoader
::
SymbolPointer
DynamicLoader
::
GetSymbolAddress
(
DynamicLoader
::
LibraryHandle
lib
,
const
char
*
sym
)
DynamicLoader
::
LibraryHandle
lib
,
const
kwsys_stl
::
string
&
sym
)
{
// Hack to cast pointer-to-data to pointer-to-function.
union
...
...
@@ -356,7 +356,7 @@ DynamicLoader::SymbolPointer DynamicLoader::GetSymbolAddress(
// !!! FIXME: BeOS can do function-only lookups...does this ever
// !!! FIXME: actually _want_ a data symbol lookup, or was this union
// !!! FIXME: a leftover of dlsym()? (s/ANY/TEXT for functions only).
status_t
rc
=
get_image_symbol
(
lib
-
1
,
sym
,
B_SYMBOL_TYPE_ANY
,
&
result
.
pvoid
);
status_t
rc
=
get_image_symbol
(
lib
-
1
,
sym
.
c_str
()
,
B_SYMBOL_TYPE_ANY
,
&
result
.
pvoid
);
if
(
rc
!=
B_OK
)
{
last_dynamic_err
=
rc
;
...
...
@@ -389,7 +389,7 @@ namespace KWSYS_NAMESPACE
{
//----------------------------------------------------------------------------
DynamicLoader
::
LibraryHandle
DynamicLoader
::
OpenLibrary
(
const
char
*
libname
)
DynamicLoader
::
LibraryHandle
DynamicLoader
::
OpenLibrary
(
const
kwsys_stl
::
string
&
libname
)
{
return
0
;
}
...
...
@@ -407,7 +407,7 @@ int DynamicLoader::CloseLibrary(DynamicLoader::LibraryHandle lib)
//----------------------------------------------------------------------------
DynamicLoader
::
SymbolPointer
DynamicLoader
::
GetSymbolAddress
(
DynamicLoader
::
LibraryHandle
lib
,
const
char
*
sym
)
DynamicLoader
::
LibraryHandle
lib
,
const
kwsys_stl
::
string
&
sym
)
{
return
0
;
}
...
...
@@ -433,12 +433,12 @@ namespace KWSYS_NAMESPACE
{
//----------------------------------------------------------------------------
DynamicLoader
::
LibraryHandle
DynamicLoader
::
OpenLibrary
(
const
char
*
libname
)
DynamicLoader
::
LibraryHandle
DynamicLoader
::
OpenLibrary
(
const
kwsys_stl
::
string
&
libname
)
{
char
*
name
=
(
char
*
)
calloc
(
1
,
strlen
(
libname
)
+
1
);
char
*
name
=
(
char
*
)
calloc
(
1
,
libname
.
size
(
)
+
1
);
dld_init
(
program_invocation_name
);
strncpy
(
name
,
libname
,
strlen
(
libname
));
dld_link
(
libname
);
strncpy
(
name
,
libname
.
c_str
(),
libname
.
size
(
));
dld_link
(
libname
.
c_str
()
);
return
(
void
*
)
name
;
}
...
...
@@ -452,7 +452,7 @@ int DynamicLoader::CloseLibrary(DynamicLoader::LibraryHandle lib)
//----------------------------------------------------------------------------
DynamicLoader
::
SymbolPointer
DynamicLoader
::
GetSymbolAddress
(
DynamicLoader
::
LibraryHandle
lib
,
const
char
*
sym
)
DynamicLoader
::
LibraryHandle
lib
,
const
kwsys_stl
::
string
&
sym
)
{
// Hack to cast pointer-to-data to pointer-to-function.
union
...
...
@@ -460,7 +460,7 @@ DynamicLoader::SymbolPointer DynamicLoader::GetSymbolAddress(
void
*
pvoid
;
DynamicLoader
::
SymbolPointer
psym
;
}
result
;
result
.
pvoid
=
dld_get_symbol
(
sym
);
result
.
pvoid
=
dld_get_symbol
(
sym
.
c_str
()
);
return
result
.
psym
;
}
...
...
@@ -485,9 +485,9 @@ namespace KWSYS_NAMESPACE
{
//----------------------------------------------------------------------------
DynamicLoader
::
LibraryHandle
DynamicLoader
::
OpenLibrary
(
const
char
*
libname
)
DynamicLoader
::
LibraryHandle
DynamicLoader
::
OpenLibrary
(
const
kwsys_stl
::
string
&
libname
)
{
return
dlopen
(
libname
,
RTLD_LAZY
);
return
dlopen
(
libname
.
c_str
()
,
RTLD_LAZY
);
}
//----------------------------------------------------------------------------
...
...
@@ -504,7 +504,7 @@ int DynamicLoader::CloseLibrary(DynamicLoader::LibraryHandle lib)
//----------------------------------------------------------------------------
DynamicLoader
::
SymbolPointer
DynamicLoader
::
GetSymbolAddress
(
DynamicLoader
::
LibraryHandle
lib
,
const
char
*
sym
)
DynamicLoader
::
LibraryHandle
lib
,
const
kwsys_stl
::
string
&
sym
)
{
// Hack to cast pointer-to-data to pointer-to-function.
union
...
...
@@ -512,7 +512,7 @@ DynamicLoader::SymbolPointer DynamicLoader::GetSymbolAddress(
void
*
pvoid
;
DynamicLoader
::
SymbolPointer
psym
;
}
result
;
result
.
pvoid
=
dlsym
(
lib
,
sym
);
result
.
pvoid
=
dlsym
(
lib
,
sym
.
c_str
()
);
return
result
.
psym
;
}
...
...
This diff is collapsed.
Click to expand it.
DynamicLoader.hxx.in
+
13
−
2
View file @
771e0f22
...
...
@@ -13,6 +13,7 @@
#define @KWSYS_NAMESPACE@_DynamicLoader_hxx
#include <@KWSYS_NAMESPACE@/Configure.h>
#include <@KWSYS_NAMESPACE@/stl/string>
#if defined(__hpux)
#include <dl.h>
...
...
@@ -27,6 +28,11 @@
#include <be/kernel/image.h>
#endif
/* Define these macros temporarily to keep the code readable. */
#if !defined (KWSYS_NAMESPACE) && !@KWSYS_NAMESPACE@_NAME_IS_KWSYS
# define kwsys_stl @KWSYS_NAMESPACE@_stl
#endif
namespace @KWSYS_NAMESPACE@
{
/** \class DynamicLoader
...
...
@@ -77,14 +83,14 @@ public:
/** Load a dynamic library into the current process.
* The returned LibraryHandle can be used to access the symbols in the
* library. */
static LibraryHandle OpenLibrary(const
char*
);
static LibraryHandle OpenLibrary(const
kwsys_stl::string&
);
/** Attempt to detach a dynamic library from the
* process. A value of true is returned if it is sucessful. */
static int CloseLibrary(LibraryHandle);
/** Find the address of the symbol in the given library. */
static SymbolPointer GetSymbolAddress(LibraryHandle, const
char*
);
static SymbolPointer GetSymbolAddress(LibraryHandle, const
kwsys_stl::string&
);
/** Return the default module prefix for the current platform. */
static const char* LibPrefix() { return "@KWSYS_DynamicLoader_PREFIX@"; }
...
...
@@ -98,4 +104,9 @@ public:
} // namespace @KWSYS_NAMESPACE@
/* Undefine temporary macros. */
#if !defined (KWSYS_NAMESPACE) && !@KWSYS_NAMESPACE@_NAME_IS_KWSYS
# undef kwsys_stl
#endif
#endif
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment