Esempio n. 1
0
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;
	}
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
	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] );
		}
	}
Esempio n. 4
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);
}
Esempio n. 5
0
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);
}