/** * There might be a "better" way of doing this, but I don't know it, * but I do know that this does work. :) Feel free to improve the loading system, * there isn't much code anyway. */ void AudioCDEncoder::findAllPlugins(KIO::SlaveBase *slave, QList<AudioCDEncoder *>&encoders) { QString foundEncoders; KStandardDirs standardDirs; QStringList dirs = standardDirs.findDirs("module", QLatin1String( "" )); for (QStringList::const_iterator it = dirs.constBegin(); it != dirs.constEnd(); ++it) { QDir dir(*it); if (!dir.exists()) { kDebug(7117) << "Directory given by KStandardDirs: " << dir.path() << " doesn't exists!"; continue; } dir.setFilter(QDir::Files | QDir::Hidden); const QFileInfoList files = dir.entryInfoList(); for (int i = 0; i < files.count(); ++i) { QFileInfo fi(files.at(i)); if (0 < fi.fileName().count(QRegExp( QLatin1String( "^libaudiocd_encoder_.*.so$" )))) { QString fileName = (fi.fileName().mid(0, fi.fileName().indexOf(QLatin1Char( '.' )))); if (foundEncoders.contains(fileName)) { kDebug(7117) << "Warning, encoder has been found twice!"; continue; } foundEncoders.append(fileName); KLibrary::void_function_ptr function = loadPlugin(fileName); if (function) { void (*functionPointer) (KIO::SlaveBase *, QList<AudioCDEncoder*>&) = (void (*)(KIO::SlaveBase *slave, QList<AudioCDEncoder *>&encoders)) function; functionPointer(slave, encoders); } } } } }
/** * There might be a "better" way of doing this, but I don't know it, * but I do know that this does work. :) Feel free to improve the loading system, * there isn't much code anyway. */ void AudioCDEncoder::findAllPlugins(KIO::SlaveBase *slave, QPtrList<AudioCDEncoder> &encoders){ QString foundEncoders; KStandardDirs standardDirs; QStringList dirs = standardDirs.findDirs("module", ""); for (QStringList::Iterator it = dirs.begin(); it != dirs.end(); ++it) { QDir dir(*it); if (!dir.exists()) { kdDebug(7117) << "Directory given by KStandardDirs: " << dir.path() << " doesn't exists!" << endl; continue; } dir.setFilter(QDir::Files | QDir::Hidden); QStringList list = dir.entryList( "libaudiocd_encoder_*.so"); kdDebug() << "list " << list << endl; for (QStringList::ConstIterator it2 = list.begin(); it2 != list.end(); ++it2) { QString fileName = *it2; kdDebug() << fileName << endl; if (foundEncoders.contains(fileName)) { kdDebug(7117) << "Warning, encoder has been found twice!" << endl; continue; } foundEncoders.append(fileName); fileName = fileName.mid(0, fileName.find('.')); void *function = loadPlugin(fileName); if(function){ void (*functionPointer)(KIO::SlaveBase *, QPtrList<AudioCDEncoder> &) = (void (*)(KIO::SlaveBase *slave, QPtrList<AudioCDEncoder> &encoders)) function; functionPointer(slave, encoders); } } } }
jint JNI_GetCreatedJavaVMs(JavaVM **vmBuf, jsize bufLen, jsize *nVMs) { static const struct mach_header *header = 0; if (!header) { header = loadFramework("/System/Library/Frameworks/JavaVM.framework/JavaVM"); } static jint(*functionPointer)(JavaVM **, jsize, jsize *) = 0; if (!functionPointer) { functionPointer = getFunctionPointer(header, "_JNI_GetCreatedJavaVMs"); } return functionPointer(vmBuf, bufLen, nVMs); }
static jint KJS_GetCreatedJavaVMs(JavaVM** vmBuf, jsize bufLen, jsize* nVMs) { static void* javaVMFramework = 0; if (!javaVMFramework) javaVMFramework = dlopen("/System/Library/Frameworks/JavaVM.framework/JavaVM", RTLD_LAZY); if (!javaVMFramework) return JNI_ERR; static jint(*functionPointer)(JavaVM**, jsize, jsize *) = 0; if (!functionPointer) functionPointer = (jint(*)(JavaVM**, jsize, jsize *))dlsym(javaVMFramework, "JNI_GetCreatedJavaVMs"); if (!functionPointer) return JNI_ERR; return functionPointer(vmBuf, bufLen, nVMs); }