//==============================================================================
Error createDirectory(const CString& dir)
{
	Error err = ErrorCode::NONE;
	if(CreateDirectory(dir.get(), NULL) == 0)
	{
		ANKI_LOGE("Failed to create directory %s", dir.get());
		err = ErrorCode::FUNCTION_FAILED;
	}

	return err;
}
//==============================================================================
void createDirectory(const CString& dir)
{
	if(directoryExists(dir))
	{
		return;
	}

	if(mkdir(dir.get(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH))
	{
		throw ANKI_EXCEPTION("%s : %s", strerror(errno), dir.get());
	}
}
//==============================================================================
Bool directoryExists(const CString& filename)
{
	DWORD dwAttrib = GetFileAttributes(filename.get());

	return dwAttrib != INVALID_FILE_ATTRIBUTES 
		&& (dwAttrib & FILE_ATTRIBUTE_DIRECTORY);
}
//==============================================================================
Error removeDirectory(const CString& dirname)
{
	Error err = ErrorCode::NONE;
	SHFILEOPSTRUCTA fileOperation;
	fileOperation.wFunc = FO_DELETE;
	fileOperation.pFrom = dirname.get();
	fileOperation.fFlags = FOF_NO_UI | FOF_NOCONFIRMATION;

	I result = SHFileOperationA(&fileOperation);
	if(result != 0) 
	{
		ANKI_LOGE("Could not delete directory %s", dirname.get());
		err = ErrorCode::FUNCTION_FAILED;
	}

	return err;
}
//==============================================================================
Bool directoryExists(const CString& filename)
{
	struct stat s;
	if(stat(filename.get(), &s) == 0)
	{
		return S_ISDIR(s.st_mode);
	}
	else
	{
		return false;
	}
}
//==============================================================================
Bool fileExists(const CString& filename)
{
	struct stat s;
	if(stat(filename.get(), &s) == 0)
	{
		return S_ISREG(s.st_mode);
	}
	else
	{
		return false;
	}
}
//==============================================================================
void removeDirectory(const CString& dirname)
{
	DIR* dir;
	struct dirent* entry;
	char path[PATH_MAX];

	if(path == nullptr) 
	{
		throw ANKI_EXCEPTION("Out of memory error");
	}

	dir = opendir(dirname.get());
	if(dir == nullptr) 
	{
		throw ANKI_EXCEPTION("opendir() failed");
	}

	while((entry = readdir(dir)) != nullptr) 
	{
		if(strcmp(entry->d_name, ".") && strcmp(entry->d_name, "..")) 
		{
			std::snprintf(
				path, (size_t)PATH_MAX, "%s/%s", dirname.get(), entry->d_name);

			if(entry->d_type == DT_DIR) 
			{
				removeDirectory(CString(path));
			}
			else
			{
				remove(path);
			}
		}

	}

	closedir(dir);
	remove(dirname.get());
}
Example #8
0
void System::unhandeledException(Exception& ex)
{
	QDateTime dt = QDateTime::currentDateTime();

	QString logfileName(QString("exception-%1.log").arg(dt.toTime_t()));
	CString bt = ex.getBacktrace();
	QFile logfile(logfileName);
	logfile.open(QFile::WriteOnly);

	printf("%s\n%s\n", ex.what(), bt.get());

	logfile.write("UNHANDELED EXCEPTION REPORT ");
	logfile.write(dt.toString(Qt::ISODate).toLocal8Bit().constData());
	logfile.write(" gtatools version ");
	logfile.write(GTATOOLS_VERSION);
	logfile.write("\n\n");
	logfile.write("Unhandeled exception caught:\n\n");
	logfile.write(ex.what());
	logfile.write("\n\nBacktrace:\n\n");

	if (!bt.isNull()) {
		logfile.write(bt.get());
	} else {
		logfile.write("[Backtrace not supported on this system]");
	}

	logfile.flush();

	QString exText = tr("Unhandeled Exception %1%2").arg(ex.what()).arg(logfileName);

	if (QThread::currentThread() == qApp->thread()) {
		QMessageBox::critical(NULL, tr("Unhandeled Exception"), exText);
	} else {
		fprintf(stderr, "### Unhandeled exception caught ###\n");
		fprintf(stderr, "%s\n", exText.toLocal8Bit().constData());
	}
}
void IFPAnimationViewerWidget::reloadAnimationFile()
{
	if (currentAnim) {
		currentAnim = NULL;
	}
	if (anpk) {
		delete anpk;
		anpk = NULL;
	}

	ui.animSlider->setEnabled(false);

	ui.animList->clear();

	QString fname = ui.animField->text();
	File file(fname.toLocal8Bit().constData());

	if (!file.exists()) {
		Engine::StringResourceCache::Entry* entry = Engine::getInstance()->getAnimationCache()
				->getEntryPointer(fname.toLocal8Bit().constData()).getEntry();

		if (!entry)
			return;

		anpk = ((AnimationCacheEntry*) entry)->getPackage();
	} else {
		anpk = new AnimationPackage;

		IFPLoader ifp(file);

		IFPAnimation* ianim;
		while ((ianim = ifp.readAnimation())  !=  NULL) {
			Animation* anim = new Animation(ianim);
			anpk->addAnimation(CString(ianim->getName()).lower(), anim);
			delete ianim;
		}
	}

	for (AnimationPackage::AnimIterator it = anpk->getAnimationBegin() ; it != anpk->getAnimationEnd() ; it++) {
		Animation* anim = it->second;
		CString animName = it->first;
		ui.animList->addItem(animName.get());
	}

	StaticAnimationPackagePointer* anpkPtr = new StaticAnimationPackagePointer(anpk);
	renderWidget->setAnimationPackagePointer(anpkPtr);
}