void GFolderSerializer::continueDir() { GDirList* pDL = m_dirStack.top(); if(pDL->m_folders.size() > 0) { startDir(pDL->m_folders.back().c_str()); pDL->m_folders.pop_back(); } else if(pDL->m_files.size() > 0) { startFile(pDL->m_files.back().c_str()); pDL->m_files.pop_back(); } else { // End of dir indicator *m_pPos = 'e'; m_pPos++; m_size--; // Move out of the dir delete(pDL); m_dirStack.pop(); if(chdir("..") != 0) throw Ex("Failed to chdir to .."); m_state = 1; } }
char* GFolderSerializer::nextPiece(size_t* pOutSize) { switch(m_state) { case 0: // uncompressed header memcpy(m_pPos, "ugfs", 4); m_pPos += 4; m_size -= 4; m_state = 4; break; case 1: // figure out what to do next if(m_dirStack.size() > 0) continueDir(); else return NULL; break; case 2: // continue reading file continueFile(); break; case 3: // continue reading dir continueDir(); break; case 4: // get started { // Change to the directory with the file or folder string sPath = m_szPath; if(sPath.length() > 0 && (sPath[sPath.length() - 1] == '/' || sPath[sPath.length() - 1] == '\\')) sPath.erase(sPath.length() - 1); PathData pd; GFile::parsePath(sPath.c_str(), &pd); if(pd.fileStart > 0) { string s; s.assign(m_szPath, pd.fileStart); if(chdir(s.c_str()) != 0) throw Ex("Failed to change dir to ", s.c_str()); } // Add the file or folder if(access(m_szPath, 0) != 0) throw Ex("The file or folder ", m_szPath, " does not seem to exist"); struct stat status; stat(m_szPath, &status); if(status.st_mode & S_IFDIR) startDir(m_szPath + pd.fileStart); else startFile(m_szPath + pd.fileStart); } break; default: throw Ex("Unexpected state"); } *pOutSize = (m_pPos - m_pBuf); m_pPos = m_pBuf; m_size = BUF_SIZE; return m_pBuf; }
void ConfigureDlg::browseSourceButtonClicked() { QString startDir( m_ui.m_sourceDirLineEdit->text() ); QFileDialog dialog(this, tr("Select a directory"), startDir); dialog.setFileMode( QFileDialog::Directory ); dialog.setAcceptMode( QFileDialog::AcceptOpen ); if ( dialog.exec() ) { QStringList filenames = dialog.selectedFiles(); m_ui.m_sourceDirLineEdit->setText( filenames[0] ); } }
BFilePanel::BFilePanel(file_panel_mode mode, BMessenger *target, const entry_ref *ref, uint32 nodeFlavors, bool multipleSelection, BMessage *message, BRefFilter *filter, bool modal, bool hideWhenDone) { // boost file descriptor limit so file panels in other apps don't have // problems struct rlimit rl; rl.rlim_cur = 512; rl.rlim_max = RLIM_SAVED_MAX; setrlimit(RLIMIT_NOFILE, &rl); BEntry startDir(ref); fWindow = new TFilePanel(mode, target, &startDir, nodeFlavors, multipleSelection, message, filter, 0, B_DOCUMENT_WINDOW_LOOK, modal ? B_MODAL_APP_WINDOW_FEEL : B_NORMAL_WINDOW_FEEL, hideWhenDone); static_cast<TFilePanel *>(fWindow)->SetClientObject(this); fWindow->SetIsFilePanel(true); }
bool FinishPage::validatePage () { qApp->setOverrideCursor(Qt::WaitCursor); QFileInfo fi(hns_.exePath); QString cannyFolder = fi.baseName(); QString pFolder = fi.absolutePath(); wchar_t sPath[MAX_PATH] = {'\0'}; LPWSTR wStartPath = (LPWSTR) sPath; SHGetFolderPath(0, CSIDL_COMMON_PROGRAMS, 0, SHGFP_TYPE_CURRENT, wStartPath); wchar_t dPath[MAX_PATH] = {'\0'}; LPWSTR wDeskPath = (LPWSTR) dPath; SHGetFolderPath(0, CSIDL_COMMON_DESKTOPDIRECTORY, 0, SHGFP_TYPE_CURRENT, wDeskPath); if (checkDesk_->isChecked()) { //создать ярлык на рабочем столе QString linkName = cannyFolder + ".lnk"; //путь до рабочего стола //QString deskPath = QDesktopServices::storageLocation( // QDesktopServices::DesktopLocation); QString deskPath = QString::fromWCharArray(dPath); if (!((deskPath.right(1) == "\\") || (deskPath.right(1) == "/"))) { deskPath += "\\"; } linkName = deskPath + linkName; QFile::link(hns_.exePath, linkName); } //if (checkStart_->isChecked()) { //создать папку в меню пусг //QString appPath = QDesktopServices::storageLocation( // QDesktopServices::ApplicationsLocation); QString appPath = QString::fromWCharArray(sPath); QDir startDir(appPath); startDir.mkdir(cannyFolder); startDir.cd(cannyFolder); QString linkApp = startDir.absolutePath() + "/" + cannyFolder + ".lnk"; QFile::link(hns_.exePath, linkApp); linkApp = startDir.absolutePath() + "/Uninstall.lnk"; QFile::link(hns_.uninstall, linkApp); LPCTSTR lAgent = ConvertToLPCTSTR(hns_.agent); QString sDesc = "Run Agent"; LPCTSTR lDesc = ConvertToLPCTSTR(sDesc); LPCTSTR lWdir = ConvertToLPCTSTR(hns_.path); if (!hns_.acad.isEmpty()) { QFileInfo fi(hns_.acad); QString sAcad = "-\"" + fi.baseName() + "\""; LPCTSTR lAcad = ConvertToLPCTSTR(sAcad); linkApp = startDir.absolutePath() + "/Agent for Poker Academy.lnk"; LPCTSTR lApp = ConvertToLPCTSTR(linkApp); CreateLink(lAgent, lApp, lAcad, lDesc, lWdir); } if (!hns_.rsp1.isEmpty()) { QFileInfo fi(hns_.rsp1); QString sRsp1 = "-\"" + fi.baseName() + "\""; LPCTSTR lRsp1 = ConvertToLPCTSTR(sRsp1); linkApp = startDir.absolutePath() + "/Agent for Red Star Poker.lnk"; LPCTSTR lApp = ConvertToLPCTSTR(linkApp); CreateLink(lAgent, lApp, lRsp1, lDesc, lWdir); } } if (checkCanny_->isChecked()) { //QProcess * proc = new QProcess(this); qApp->processEvents(); if (QFile::exists(hns_.exePath)) { QFileInfo fi(hns_.exePath); QDir::setCurrent(fi.absoluteDir().absolutePath()); QProcess::startDetached("\"" + hns_.exePath + "\""); } qApp->processEvents(); //proc->waitForStarted(); } if (checkRemove_->isChecked()) { //удалить себя selfDel(); } qApp->restoreOverrideCursor(); return true; }
static PRL_RESULT GetEntryLists( const QString & aVmHomeDir, QList<QPair<QFileInfo, QString> > & dirList, QList<QPair<QFileInfo, QString> > & fileList) { QString VmHomeDir = QFileInfo(aVmHomeDir).absoluteFilePath(); QFileInfo dirInfo; QFileInfoList entryList; QDir dir; QDir startDir(VmHomeDir); int i, j; QFileInfo config, config_backup, log, statlog; config.setFile(VmHomeDir, VMDIR_DEFAULT_VM_CONFIG_FILE); config_backup.setFile(VmHomeDir, VMDIR_DEFAULT_VM_CONFIG_FILE VMDIR_DEFAULT_VM_BACKUP_SUFFIX); log.setFile(VmHomeDir, "parallels.log"); statlog.setFile(VmHomeDir, PRL_VMTIMING_LOGFILENAME); dirInfo.setFile(VmHomeDir); if (!dirInfo.exists()) { WRITE_TRACE(DBG_FATAL, "Directory %s does not exist", QSTR2UTF8(VmHomeDir)); return (PRL_ERR_VMDIR_INVALID_PATH); } dirList.append(qMakePair(dirInfo, QString("."))); for (i = 0; i < dirList.size(); ++i) { /* CDir::absoluteDir() is equal CDir::dir() : return parent directory */ dir.setPath(dirList.at(i).first.absoluteFilePath()); entryList = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs | QDir::Hidden); WRITE_TRACE(DBG_DEBUG, "Directory %s", QSTR2UTF8(dirList.at(i).first.absoluteFilePath())); for (j = 0; j < entryList.size(); ++j) { const QFileInfo& fileInfo = entryList.at(j); if (dirInfo == fileInfo) { WRITE_TRACE(DBG_FATAL, "Infinite recursion in : %s", QSTR2UTF8(dirInfo.absoluteFilePath())); return (PRL_ERR_FAILURE); } if (!fileInfo.absoluteFilePath().startsWith(VmHomeDir)) { WRITE_TRACE(DBG_FATAL, "Path %s does not starts from VM home dir (%s)", QSTR2UTF8(fileInfo.absoluteFilePath()), QSTR2UTF8(VmHomeDir)); return PRL_ERR_FAILURE; } ; if (fileInfo.isDir()) { dirList.append(qMakePair( fileInfo, startDir.relativeFilePath(fileInfo.absoluteFilePath()))); } else { /* skip config & config backup */ if (fileInfo.absoluteFilePath() == config.absoluteFilePath()) continue; if (fileInfo.absoluteFilePath() == config_backup.absoluteFilePath()) continue; /* skip parallels.log */ if (fileInfo.absoluteFilePath() == log.absoluteFilePath()) continue; if (fileInfo.absoluteFilePath() == statlog.absoluteFilePath()) /* will save statistic.log to temporary file */ fileList.append(qMakePair(statlog, QString(PRL_VMTIMING_LOGFILENAME VMDIR_DEFAULT_VM_MIGRATE_SUFFIX))); else fileList.append(qMakePair( fileInfo, startDir.relativeFilePath(fileInfo.absoluteFilePath()))); } WRITE_TRACE(DBG_DEBUG, "%x\t%s.%s\t%s", int(fileInfo.permissions()), QSTR2UTF8(fileInfo.owner()), QSTR2UTF8(fileInfo.group()), QSTR2UTF8(fileInfo.absoluteFilePath())); } entryList.clear(); } /* remove VM home directory */ dirList.removeFirst(); return (PRL_ERR_SUCCESS); }