Skip to content
Snippets Groups Projects
Commit fe52ad39 authored by Emmanuel Milou's avatar Emmanuel Milou
Browse files

Checj if the shared library looks valid before loadind

parent c35159a6
Branches
Tags
No related merge requests found
...@@ -62,7 +62,6 @@ CodecDescriptor::init() ...@@ -62,7 +62,6 @@ CodecDescriptor::init()
int i; int i;
for( i = 0 ; i < _nbCodecs ; i++ ) { for( i = 0 ; i < _nbCodecs ; i++ ) {
_CodecsMap[(CodecType)CodecDynamicList[i]->getPayload()] = CodecDynamicList[i]; _CodecsMap[(CodecType)CodecDynamicList[i]->getPayload()] = CodecDynamicList[i];
_debug("Dynamic codec = %s\n" , CodecDynamicList[i]->getCodecName().c_str());
} }
} }
...@@ -206,6 +205,8 @@ CodecDescriptor::scanCodecDirectory( void ) ...@@ -206,6 +205,8 @@ CodecDescriptor::scanCodecDirectory( void )
tmp = dirStruct -> d_name ; tmp = dirStruct -> d_name ;
if( tmp == current || tmp == previous){} if( tmp == current || tmp == previous){}
else{ else{
if( seemsValid( tmp ) )
{
_debug("Codec : %s\n", tmp.c_str()); _debug("Codec : %s\n", tmp.c_str());
audioCodec = loadCodec( codecDir.append(tmp) ); audioCodec = loadCodec( codecDir.append(tmp) );
codecs.push_back( audioCodec ); codecs.push_back( audioCodec );
...@@ -214,20 +215,15 @@ CodecDescriptor::scanCodecDirectory( void ) ...@@ -214,20 +215,15 @@ CodecDescriptor::scanCodecDirectory( void )
} }
} }
} }
}
closedir( dir ); closedir( dir );
return codecs; return codecs;
} }
/*CodecDescriptor::getDescription( std::string fileName )
{
int pos = fileName.length() - 12 ;
return fileName.substr(9, pos);
}
*/
AudioCodec* AudioCodec*
CodecDescriptor::loadCodec( std::string path ) CodecDescriptor::loadCodec( std::string path )
{ {
_debug("Load path %s\n", path.c_str()); //_debug("Load path %s\n", path.c_str());
CodecHandlePointer p; CodecHandlePointer p;
using std::cerr; using std::cerr;
void * codecHandle = dlopen( path.c_str() , RTLD_LAZY ); void * codecHandle = dlopen( path.c_str() , RTLD_LAZY );
...@@ -239,7 +235,6 @@ CodecDescriptor::loadCodec( std::string path ) ...@@ -239,7 +235,6 @@ CodecDescriptor::loadCodec( std::string path )
cerr << dlerror() << '\n'; cerr << dlerror() << '\n';
AudioCodec* a = createCodec(); AudioCodec* a = createCodec();
p = CodecHandlePointer( a, codecHandle ); p = CodecHandlePointer( a, codecHandle );
//_debug("Add %s in the list.\n" , a->getCodecName().c_str());
_CodecInMemory.push_back(p); _CodecInMemory.push_back(p);
return a; return a;
...@@ -268,4 +263,19 @@ CodecDescriptor::getFirstCodecAvailable( void ) ...@@ -268,4 +263,19 @@ CodecDescriptor::getFirstCodecAvailable( void )
return NULL; return NULL;
} }
bool
CodecDescriptor::seemsValid( std::string lib)
{
// The name of the shared library seems valid <==> it looks like libcodec_xxx.so
// We check this
std::string begin = "libcodec_";
std::string end = ".so";
if(lib.substr(0, begin.length()) == begin)
if(lib.substr(lib.length() - end.length() , end.length() ) == end)
return true;
else
return false;
else
return false;
}
...@@ -202,6 +202,8 @@ private: ...@@ -202,6 +202,8 @@ private:
*/ */
void unloadCodec( CodecHandlePointer ); void unloadCodec( CodecHandlePointer );
bool seemsValid( std::string );
/* /*
* Map the payload of a codec and its name * Map the payload of a codec and its name
*/ */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment