comparison base/src/java/nonstandard/SharedLib.d @ 47:65761bc28ab2

swt linux again compilable for d1.
author Frank Benoit <benoit@tionex.de>
date Fri, 27 Mar 2009 11:43:53 +0100
parents 17310ba3c1bc
children 8a5386b204bb
comparison
equal deleted inserted replaced
46:17310ba3c1bc 47:65761bc28ab2
1 module java.nonstandard.SharedLib; 1 module java.nonstandard.SharedLib;
2 2
3 import java.lang.all; 3 import java.lang.all;
4 version(Tango){
5 static import tango.sys.SharedLib;
6 static import tango.stdc.stringz;
7 }
4 8
5 struct Symbol { 9 struct Symbol {
6 String name; 10 String name;
7 void** symbol; 11 void** symbol;
8 } 12 }
19 version(Tango){ 23 version(Tango){
20 if (auto lib = tango.sys.SharedLib.SharedLib.load(libname)) { 24 if (auto lib = tango.sys.SharedLib.SharedLib.load(libname)) {
21 foreach( inout s; symbols ){ 25 foreach( inout s; symbols ){
22 if( s.major < major ) continue; 26 if( s.major < major ) continue;
23 if( s.major == major && s.minor > minor ) continue; 27 if( s.major == major && s.minor > minor ) continue;
24 *s.symbol = lib.getSymbol( s.name.ptr ); 28 *s.symbol = lib.getSymbol( tango.stdc.stringz.toStringz(s.name ) );
25 if( s.symbol is null ){ 29 if( s.symbol is null ){
26 getDwtLogger.error( __FILE__, __LINE__, "{}: Symbol '{}' not found", libname, s.name ); 30 getDwtLogger.error( __FILE__, __LINE__, "{}: Symbol '{}' not found", libname, s.name );
27 } 31 }
28 } 32 }
29 } else { 33 } else {
35 } 39 }
36 static void loadLibSymbols( Symbol[] symbols, String libname ){ 40 static void loadLibSymbols( Symbol[] symbols, String libname ){
37 version(Tango){ 41 version(Tango){
38 if (auto lib = tango.sys.SharedLib.SharedLib.load(libname)) { 42 if (auto lib = tango.sys.SharedLib.SharedLib.load(libname)) {
39 foreach( inout s; symbols ){ 43 foreach( inout s; symbols ){
40 *s.symbol = lib.getSymbol( s.name.ptr ); 44 *s.symbol = lib.getSymbol( tango.stdc.stringz.toStringz(s.name ) );
41 if( s.symbol is null ){ 45 if( s.symbol is null ){
42 getDwtLogger.error( __FILE__, __LINE__, "{}: Symbol '{}' not found", libname, s.name ); 46 getDwtLogger.error( __FILE__, __LINE__, "{}: Symbol '{}' not found", libname, s.name );
43 } 47 }
44 } 48 }
45 } else { 49 } else {
51 } 55 }
52 static bool tryUseSymbol( String symbolname, String libname, void delegate( void*) dg ){ 56 static bool tryUseSymbol( String symbolname, String libname, void delegate( void*) dg ){
53 bool result = false; 57 bool result = false;
54 version(Tango){ 58 version(Tango){
55 if (auto lib = tango.sys.SharedLib.SharedLib.load( libname ) ) { 59 if (auto lib = tango.sys.SharedLib.SharedLib.load( libname ) ) {
56 void* ptr = lib.getSymbol(symbolname); 60 void* ptr = lib.getSymbol( tango.stdc.stringz.toStringz(symbolname));
57 if (ptr !is null){ 61 if (ptr !is null){
58 dg(ptr); 62 dg(ptr);
59 result = true; 63 result = true;
60 } 64 }
61 lib.unload(); 65 lib.unload();