⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000-2005 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.** ** This program is free software; you can redistribute it and/or modify it** under the terms of the GNU General Public License as published by the** Free Software Foundation; either version 2 of the License, or (at your** option) any later version.** ** A copy of the GNU GPL license version 2 is included in this package as ** LICENSE.GPL.**** This program is distributed in the hope that it will be useful, but** WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ** See the GNU General Public License for more details.**** In addition, as a special exception Trolltech gives permission to link** the code of this program with Qtopia applications copyrighted, developed** and distributed by Trolltech under the terms of the Qtopia Personal Use** License Agreement. You must comply with the GNU General Public License** in all respects for all of the code used other than the applications** licensed under the Qtopia Personal Use License Agreement. If you modify** this file, you may extend this exception to your version of the file,** but you are not obligated to do so. If you do not wish to do so, delete** this exception statement from your version.** ** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include <qtopia/qpeapplication.h>#include <qfile.h>#include <qfileinfo.h>#include <qdir.h>#include <qtextstream.h>#include <qstringlist.h>#include <stdlib.h>#include <unistd.h> //symlink() #include <sys/stat.h> // mkdir()#include <sys/vfs.h>#include <mntent.h>//#define IPKGSIM#ifdef IPKGSIMstatic const char *mainDir = QPEApplication::qpeDir() + "/usr/lib/ipkg";static const char *infoDir = QPEApplication::qpeDir() + "/usr/lib/ipkg/info/";static const char *listDir = QPEApplication::qpeDir() + "/usr/lib/ipkg/externinfo/";#elsestatic const char *mainDir = "/usr/lib/ipkg";static const char *infoDir = "/usr/lib/ipkg/info/";static const char *listDir = "/usr/lib/ipkg/externinfo/";#endifstatic void createSymlinks( const QString &location, const QString &package ){    QFile inFile( location + infoDir + package + ".list" );    mkdir( mainDir, 0777 );    mkdir( listDir, 0777 );    QFile outFile( listDir + package + ".list");    //qDebug( "createSymlinks %s -> %s", inFile.name().ascii(), outFile.name().ascii() );            if ( inFile.open(IO_ReadOnly) && outFile.open(IO_WriteOnly)) {   	QTextStream in(&inFile);	QTextStream out(&outFile);	QString s;	while ( !in.eof() ) {        // until end of file...	    s = in.readLine();       // line of text excluding '\n'	    //qDebug( "Read: %s", s.ascii() );	    // for s, do link/mkdir.	    if ( s.right(1) == "/" ) {		//qDebug("do mkdir for %s", s.ascii());		mkdir( s.ascii(), 0777 );		//possible optimization: symlink directories		//that don't exist already. -- Risky.	    } else {		//qDebug("do symlink for %s", s.ascii());		QFileInfo ffi( s ); 		//Don't try to symlink if a regular file already exists.		if ( !ffi.exists() || ffi.isSymLink() ) {		    symlink( QDir::cleanDirPath(location+s).ascii(), s.ascii() );		    out << s << "\n";		} else {		    qDebug( "%s  exists already, not symlinked", s.ascii() );		}	    }	}	inFile.close();	outFile.close();    }}static void removeSymlinks( const QString &package ){    QFile inFile( listDir + package + ".list" );    if ( inFile.open(IO_ReadOnly) ) {   	QTextStream in(&inFile);	QString s;	while ( !in.eof() ) {        // until end of file...	    s = in.readLine();       // line of text excluding '\n'	    //qDebug("remove symlink %s", s.ascii());	    QFileInfo ffi( s ); 	    //Confirm that it's still a symlink.	    if ( ffi.isSymLink() )		unlink( s.ascii() );	    else		qDebug( "Not removed %d", s.ascii() );	}	inFile.close();	inFile.remove();    }}/*  Slightly hacky: we can't use StorageInfo, since we don't have a  QApplication. We look for filesystems that have the directory  /usr/lib/ipkg/info, and assume that they are removable media  with packages installed. This is safe even if eg. /usr is on a   separate filesystem, since then we would be testing for  /usr/usr/lib/ipkg/info, which should not exist.  */static void updateSymlinks(){    QDir lists( listDir );    QStringList knownPackages = lists.entryList( "*.list" ); // No tr        struct mntent *me;    FILE *mntfp = setmntent( "/etc/mtab", "r" );    if ( mntfp ) {	while ( (me = getmntent( mntfp )) != 0 ) {	    QString root = me->mnt_dir;	    if ( root == "/" ) 		continue;	    QString info = root + infoDir;	    QDir infoDir( info );	    //qDebug( "looking at %s", info.ascii() );	    if ( infoDir.isReadable() ) {		const QFileInfoList *packages = infoDir.entryInfoList( "*.list" ); // No tr		QFileInfoListIterator it( *packages );		QFileInfo *fi;		while (( fi = *it )) {		    ++it;		    if ( knownPackages.contains( fi->fileName() ) ) {			//qDebug( "found %s and we've seen it before", fi->fileName().latin1() );			knownPackages.remove( fi->fileName() );		    } else {			//it's a new one			createSymlinks( root + "/", fi->baseName() );		    }		    		}					    }	}	endmntent( mntfp );    }        for ( QStringList::Iterator it = knownPackages.begin(); 	  it != knownPackages.end(); ++it ) {	// strip ".info" off the end.	removeSymlinks( (*it).left((*it).length()-5) );    }}int main( int argc, char *argv[] ){    QApplication a( argc, argv, QApplication::Tty );    QString command = argc > 1 ? argv[1] : "update"; // No tr        if ( command == "update" ) // No tr	updateSymlinks();    else if ( command == "create" && argc > 3 ) // No tr	createSymlinks( argv[2], argv[3] );    else if ( command == "remove"  && argc > 2 ) // No tr	removeSymlinks( argv[2] );    else	qWarning( "Argument error" );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -