OpenCores
URL https://opencores.org/ocsvn/bw_tiff_compression/bw_tiff_compression/trunk

Subversion Repositories bw_tiff_compression

[/] [bw_tiff_compression/] [trunk/] [client_application/] [src/] [Libs/] [CPathLib.cpp] - Rev 16

Compare with Previous | Blame | View Log

/*
 * @file     PathLib.cpp
 * @date     May 14, 2012
 * @author   Aart Mulder
 */
 
/* System includes */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fstream>
#include <iostream>
#include <dirent.h>
#include <sys/stat.h>
#include <sys/types.h>
 
#ifdef linux
#include <unistd.h>
#else
//#include <direct.h>
#include <stdarg.h>
#include <windef.h>
#include <WinBase.h>
#endif
 
#ifdef QT
#include <QRegExp>
#include <QFile>
#include <QDir>
#endif
 
/* Own includes */
#include "CPathLib.h"
#include "stddefs.h"
 
CPathLib::CPathLib()
{
 
}
 
char* CPathLib::CompletePath(char* pcPath)
{
	char aCurrentDir[FILENAME_MAX], *pResult;
#ifdef linux
    char szTmp[32];
#endif
    int bytes;
 
	pResult = (char*)malloc(sizeof(char) * FILENAME_MAX);
 
	if( (pcPath[0] == '.') && (pcPath[1] == '/') )
	{
#ifdef linux
        sprintf(szTmp, "/proc/%d/exe", getpid());
        aCurrentDir[0] = '\0';
        bytes = MIN(readlink(szTmp, aCurrentDir, FILENAME_MAX), FILENAME_MAX - 1);
        if(bytes >= 0)
            aCurrentDir[bytes] = '\0';
#else
        bytes = GetModuleFileNameA(NULL, aCurrentDir, FILENAME_MAX);
        if(bytes == 0)
            return NULL;
#endif
 
		strcpy(pResult, aCurrentDir);
		strcat(pResult, pcPath+1);
	}
	else
	{
		strcpy(pResult, pcPath);
	}
 
	return pResult;
}
 
std::string CPathLib::CompletePath(std::string sPath)
{
	char aCurrentDir[FILENAME_MAX];
	std::string sResult;
#ifdef linux
    char szTmp[32];
#endif
    int bytes;
 
	if( (sPath.at(0) == '.') && (sPath.at(1) == '/') )
	{
#ifdef linux
        sprintf(szTmp, "/proc/%d/exe", getpid());
        aCurrentDir[0] = '\0';
        bytes = MIN(readlink(szTmp, aCurrentDir, FILENAME_MAX), FILENAME_MAX - 1);
        if(bytes >= 0)
            aCurrentDir[bytes] = '\0';
#else
        bytes = GetModuleFileNameA(NULL, aCurrentDir, FILENAME_MAX);
        if(bytes == 0)
            return sResult;
#endif
		sResult.assign(aCurrentDir);
		sResult.append(sPath.substr(1, sPath.length()-1));
	}
	else
	{
		sResult = sPath;
	}
 
	return sResult;
}
 
#ifdef QT
QString CPathLib::CompletePath(QString sPath)
{
	char aCurrentDir[FILENAME_MAX];
	QString sResult;
#ifdef linux
    char szTmp[32];
#endif
    int bytes;
 
	if( (sPath.at(0) == '.') && (sPath.at(1) == '/') )
	{
#ifdef linux
        sprintf(szTmp, "/proc/%d/exe", getpid());
        aCurrentDir[0] = '\0';
        bytes = MIN(readlink(szTmp, aCurrentDir, FILENAME_MAX), FILENAME_MAX - 1);
        if(bytes >= 0)
            aCurrentDir[bytes] = '\0';
#else
        bytes = GetModuleFileNameA(NULL, aCurrentDir, FILENAME_MAX);
        if(bytes == 0)
            return sResult;
#endif
        sResult.fromAscii(aCurrentDir);
		sResult.append(sPath.right(sPath.length()-1));
	}
	else
	{
		sResult = sPath;
	}
 
	return sResult;
}
#endif
 
#ifdef QT
void CPathLib::DeleteFiles(QList<QString> *pFiles, QList<bool> *pResults)
#else
void CPathLib::DeleteFiles(std::list<std::string> *pFiles, std::list<bool> *pResults)
#endif
{
#ifdef QT
	QList<QString>::iterator itFiles;
	QString sFilename;
#else
	std::list<std::string>::iterator itFiles;
	std::string sFilename;
#endif
 
	if(pFiles == NULL)
		return;
 
	if(pResults == NULL)
		return;
 
	pResults->clear();
 
	for(itFiles = pFiles->begin(); itFiles != pFiles->end(); itFiles++)
	{
		sFilename = CompletePath(*itFiles);
 
#ifdef QT
		if(remove(sFilename.toStdString().c_str()) != 0)
#else
		if(remove(sFilename.c_str()) != 0)
#endif
		{
			pResults->push_back(false);
		}
		else
		{
			pResults->push_back(true);
		}
	}
}
 
#ifdef QT
QList<QString> CPathLib::ReadDir(QString sDir)
{
	QList<QString> aFiles;
 
	ReadDir(sDir, &aFiles);
 
	return aFiles;
}
#endif
 
#ifdef QT
bool CPathLib::ReadDir(QString sDir, QList<QString> *paFiles, QString sFilter)
{
	return ReadDir(sDir, paFiles, NULL, &sFilter);
}
#endif
 
#ifdef QT
bool CPathLib::ReadDir(QString sDir, QList<QString> *paFiles, QList<quint32> *paFileSizes, QString *sFilter)
{
	QString filepath;
	DIR *dp;
	struct dirent *dirp;
	struct stat filestat;
 
	if(paFiles == NULL)
		return false;
 
	paFiles->clear();
 
	if(paFileSizes != NULL)
		paFileSizes->clear();
 
    sDir = CPathLib::CompletePath(sDir);
 
	dp = opendir(sDir.toStdString().c_str());
	if(dp == NULL)
		return false;
 
	while( (dirp = readdir(dp)) )
	{
		filepath = sDir + QString("/") + QString("%1").arg(dirp->d_name);
 
		if(stat(filepath.toStdString().c_str(), &filestat)) continue;
		if( S_ISDIR(filestat.st_mode)) continue;
 
		/*
		 * Do the filter operation.
		 */
		if(sFilter != NULL)
		{
			if(sFilter->length() > 0)
			{
				QString sFileName(dirp->d_name);
				QRegExp oRegExp(sFilter->toStdString().c_str());
				if( oRegExp.indexIn(sFileName) == 0)
				{
					paFiles->push_back(QString(dirp->d_name));
				}
			}
			else
			{
				paFiles->push_back(QString(dirp->d_name));
			}
		}
		else
		{
			paFiles->push_back(QString(dirp->d_name));
		}
 
		if(paFileSizes != NULL)
			paFileSizes->push_back(filestat.st_size);
	}
 
	return true;
}
#endif
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.