Changeset 99

Show
Ignore:
Timestamp:
03/10/05 05:24:04 (4 years ago)
Author:
aldacron
Message:

[DerelictUtil?]
* added a callback mechanism to allow apps to ignore missing library symbols

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/DerelictUtil/derelict/util/exception.d

    r91 r99  
    6464    char[] _procName; 
    6565} 
     66 
     67//****************************************************************************** 
     68 
     69/** 
     70* The MissingProcCallback allows the app to handle the case of missing symbols. By default, 
     71* a SharedLibProcLoadException is thrown. However, if a the app determines that 
     72* particular symbol is not needed, the callback can return true. This will cause 
     73* the shared library to continue loading. Returning false will cause the exception 
     74* to be thrown. 
     75*/ 
     76typedef bool function(char[] libName, char[] procName) MissingProcCallback; 
     77 
     78private MissingProcCallback missingProcCallback; 
     79 
     80package void Derelict_HandleMissingProc(char[] libName, char[] procName) 
     81{ 
     82    bool result = false; 
     83    if(missingProcCallback !== null) 
     84        result = missingProcCallback(libName, procName); 
     85    if(!result) 
     86        throw new SharedLibProcLoadException(libName, procName); 
     87} 
     88 
     89void Derelict_SetMissingProcCallback(MissingProcCallback callback) 
     90{ 
     91    missingProcCallback = callback; 
     92} 
  • trunk/DerelictUtil/derelict/util/loader.d

    r95 r99  
    5757        void* proc = GetProcAddress(lib._handle, toStringz(procName)); 
    5858        if(null is proc) 
    59             throw new SharedLibProcLoadException(lib._name, procName); 
     59            Derelict_HandleMissingProc(lib._name, procName); 
     60             
    6061        return proc; 
    6162    } 
     
    120121        void* proc = dlsym(lib._handle, toStringz(procName)); 
    121122        if(null is proc) 
    122             throw new SharedLibProcLoadException(lib._name, procName); 
     123            Derelict_HandleMissingProc(lib._name, procName); 
     124             
    123125        return proc; 
    124126    }