//============================================================================== 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()); }
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); }