Bug#475601: Simple test case
    Jurij Smakov 
    jurij at wooyd.org
       
    Tue Aug 12 15:04:54 UTC 2008
    
    
  
Here's a simple test case, which fails on sparc (compile with 
g++ test.cxx -lpt):
---------8<----------
#include <stdio.h>
#include <ptlib.h>
int main() {
  PDynaLink *dll = new 
PDynaLink("/usr/lib/pwlib/1.11.2/device/videoinput/v4l_pwplugin.so");
  unsigned (*GetAPIVersion)();
  if (dll->GetFunction("PWLibPlugin_GetAPIVersion", 
(PDynaLink::Function &)GetAPIVersion)) {
    printf("TRUE GetAPIVersion=%p\n", GetAPIVersion);
  } else {
    printf("FALSE GetAPIVersion=%p\n", GetAPIVersion);
  }
}
---------8<----------
When run on sparc, it gives:
TRUE GetAPIVersion=(nil)
which is pretty surprising, given that the code of GetFunction reads:
BOOL PDynaLink::GetFunction(const PString & fn, Function & func) 
{ 
  if (dllHandle == NULL) 
    return FALSE; 
 
#if defined(P_OPENBSD) 
  void * p = dlsym(dllHandle, (char *)(const char *)fn); 
#else 
  void * p = dlsym(dllHandle, (const char *)fn); 
#endif 
 
  if (p == NULL) 
    return FALSE; 
 
  func = (Function &)p; 
  return TRUE; 
}
i.e. there appears to be no way for it to return TRUE and set the 
function pointer to NULL simultaneously. For comparison, on my 386 box 
it returns
TRUE GetAPIVersion=0xb72eecec
as expected.
Cheers.
-- 
Jurij Smakov                                           jurij at wooyd.org
Key: http://www.wooyd.org/pgpkey/                      KeyID: C99E03CC
    
    
More information about the Pkg-voip-maintainers
mailing list