Ejemplo n.º 1
0
ExternFilter::ExternFilter(const QString& nm, const QString& optional)
  : filt(0)
  , handle(0)
{
#ifdef USEQPE
#ifdef OPIE
  QString filterpath(getenv("OPIEDIR"));
#else
  QString filterpath(getenv("QTDIR"));
#endif
  filterpath += "/plugins/reader/filters/lib";
#else
  QString filterpath(getenv("READERDIR"));
  filterpath += "/filters/lib";
#endif
  filterpath += nm;
  filterpath += ".so";
  if (QFile::exists(filterpath))
    {
      qDebug("Filter:%s", (const char*)filterpath);
      handle = dlopen(filterpath, RTLD_LAZY);
      if (handle == 0)
	{
	  qDebug("Can't find filter:%s", dlerror());
	  //	  status = -10;
	  filt = new ErrorFilter(QString("Can't find plugin:")+nm);
	  return;
	}
      CFilter* (*newfilter)(const QString&);
      newfilter = (CFilter* (*)(const QString&))dlsym(handle, "newfilter");
      if (newfilter == NULL)
	{
	  qDebug("Can't find newfilter");
	  filt = new ErrorFilter(QString("Can't find entry point in plugin:")+nm);
	  return;
	}
      filt = (*newfilter)(optional);
    }
  else
    {
      qDebug("No filter path:%s", (const char*)filterpath);
      filt = new ErrorFilter(QString("No filter plugins installed:")+nm);
    }
  if (filt == NULL)
    {
      qDebug("Can't do newfilter");
      filt = new ErrorFilter(QString("Filter creation failed:")+nm);
      return;
    }
}
Ejemplo n.º 2
0
Archivo: sys.c Proyecto: icanhas/yantar
/*
 * Sys_ListFilteredFiles
 */
void
Sys_ListFilteredFiles(const char *basedir, char *subdirs, char *filter,
		      char **list,
		      int *numfiles)
{
	char	search[MAX_OSPATH], newsubdirs[MAX_OSPATH];
	char	filename[MAX_OSPATH];
	DIR	*fdir;
	struct dirent	*d;
	struct stat	st;

	if(*numfiles >= MAX_FOUND_FILES - 1)
		return;

	if(strlen(subdirs))
		Q_sprintf(search, sizeof(search), "%s/%s", basedir, subdirs);
	else
		Q_sprintf(search, sizeof(search), "%s", basedir);

	if((fdir = opendir(search)) == NULL)
		return;

	while((d = readdir(fdir)) != NULL){
		Q_sprintf(filename, sizeof(filename), "%s/%s", search,
			d->d_name);
		if(stat(filename, &st) == -1)
			continue;

		if(st.st_mode & S_IFDIR)
			if(Q_stricmp(d->d_name,
				   ".") && Q_stricmp(d->d_name, "..")){
				if(strlen(subdirs))
					Q_sprintf(newsubdirs,
						sizeof(newsubdirs), "%s/%s",
						subdirs,
						d->d_name);
				else
					Q_sprintf(newsubdirs,
						sizeof(newsubdirs), "%s",
						d->d_name);
				Sys_ListFilteredFiles(basedir, newsubdirs,
					filter, list,
					numfiles);
			}
		if(*numfiles >= MAX_FOUND_FILES - 1)
			break;
		Q_sprintf(filename, sizeof(filename), "%s/%s", subdirs,
			d->d_name);
		if(!filterpath(filter, filename, qfalse))
			continue;
		list[ *numfiles ] = copystr(filename);
		(*numfiles)++;
	}

	closedir(fdir);
}