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

📄 kstddirs.cpp

📁 将konqueror浏览器移植到ARM9 2410中
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    return dirname;}QStringList KStandardDirs::resourceDirs(const char *type) const{    QStringList *candidates = dircache.find(type);    if (!candidates) { // filling cache        if (strcmp(type, "socket") == 0)        {          char hostname[256];          hostname[0] = 0;          gethostname(hostname, 255);          QString dir = QString("%1socket-%2").arg(localkdedir()).arg(hostname);          char link[1024];          link[1023] = 0;          int result = readlink(QFile::encodeName(dir).data(), link, 1023);          if ((result == -1) && (errno == ENOENT))          {             QString srv = findExe(QString::fromLatin1("lnusertemp"), KDEDIR+QString::fromLatin1("/bin"));             if (srv.isEmpty())                srv = findExe(QString::fromLatin1("lnusertemp"));             if (!srv.isEmpty())             {                system(QFile::encodeName(srv)+" socket");                result = readlink(QFile::encodeName(dir).data(), link, 1023);             }          }          if (result > 0)          {             link[result] = 0;             if (link[0] == '/')                dir = QFile::decodeName(link);             else                dir = QDir::cleanDirPath(dir+QFile::decodeName(link));          }          const_cast<KStandardDirs *>(this)->addResourceDir("socket", dir+'/');        }        QDir testdir;        candidates = new QStringList();        QStringList *dirs;        dirs = relatives.find(type);        if (dirs)        {            bool local = true;            for (QStringList::ConstIterator pit = prefixes.begin();                 pit != prefixes.end();                 pit++)            {                for (QStringList::ConstIterator it = dirs->begin();                     it != dirs->end(); ++it) {                    QString path = realPath(*pit + *it);                    testdir.setPath(path);                    if ((local || testdir.exists()) && !candidates->contains(path))                        candidates->append(path);                }                local = false;            }        }        dirs = absolutes.find(type);        if (dirs)            for (QStringList::ConstIterator it = dirs->begin();                 it != dirs->end(); ++it)            {                testdir.setPath(*it);                if (testdir.exists())                {                    QString filename = realPath(*it);                    if (!candidates->contains(filename))                        candidates->append(filename);                }            }        dircache.insert(type, candidates);    }#if 0    kdDebug() << "found dirs for resource " << type << ":" << endl;    for (QStringList::ConstIterator pit = candidates->begin();	 pit != candidates->end();	 pit++)    {	fprintf(stderr, "%s\n", (*pit).latin1());    }#endif  return *candidates;}QString KStandardDirs::findExe( const QString& appname,				const QString& pstr, bool ignore){    QFileInfo info;    // absolute path ?    if (appname.startsWith(QString::fromLatin1("/")))    {        info.setFile( appname );        if( info.exists() && ( ignore || info.isExecutable() )            && info.isFile() ) {            return appname;        }        return QString::null;    }    QStringList tokens;    QString p = pstr;    if( p == QString::null ) {	p = getenv( "PATH" );    }    tokenize( tokens, p, ":\b" );    // split path using : or \b as delimiters    for( unsigned i = 0; i < tokens.count(); i++ ) {	p = tokens[ i ];        if ( p[ 0 ] == '~' )        {            int len = p.find( '/' );            if ( len == -1 )                len = p.length();            if ( len == 1 )                p.replace( 0, 1, QDir::homeDirPath() );            else            {                QString user = p.mid( 1, len - 1 );                struct passwd *dir = getpwnam( user.local8Bit().data() );                if ( dir && strlen( dir->pw_dir ) )                    p.replace( 0, len, QString::fromLocal8Bit( dir->pw_dir ) );            }        }	p += "/";	p += appname;	// Check for executable in this tokenized path	info.setFile( p );	if( info.exists() && ( ignore || info.isExecutable() )	    && info.isFile() ) {	    return p;	}    }    // If we reach here, the executable wasn't found.    // So return empty string.    return QString::null;}int KStandardDirs::findAllExe( QStringList& list, const QString& appname,			const QString& pstr, bool ignore ){    QString p = pstr;    QFileInfo info;    QStringList tokens;    if( p == QString::null ) {	p = getenv( "PATH" );    }    list.clear();    tokenize( tokens, p, ":\b" );    for ( unsigned i = 0; i < tokens.count(); i++ ) {	p = tokens[ i ];	p += "/";	p += appname;	info.setFile( p );	if( info.exists() && (ignore || info.isExecutable())	    && info.isFile() ) {	    list.append( p );	}    }    return list.count();}static int tokenize( QStringList& tokens, const QString& str,		     const QString& delim ){    int len = str.length();    QString token = "";    for( int index = 0; index < len; index++)    {	if ( delim.find( str[ index ] ) >= 0 )	{	    tokens.append( token );	    token = "";	}	else	{	    token += str[ index ];	}    }    if ( token.length() > 0 )    {	tokens.append( token );    }    return tokens.count();}QString KStandardDirs::kde_default(const char *type) {    if (!strcmp(type, "data"))	return "share/apps/";    if (!strcmp(type, "html"))	return "share/doc/HTML/";    if (!strcmp(type, "icon"))	return "share/icons/";    if (!strcmp(type, "config"))	return "share/config/";    if (!strcmp(type, "pixmap"))	return "share/pixmaps/";    if (!strcmp(type, "apps"))	return "share/applnk/";    if (!strcmp(type, "sound"))	return "share/sounds/";    if (!strcmp(type, "locale"))	return "share/locale/";    if (!strcmp(type, "services"))	return "share/services/";    if (!strcmp(type, "servicetypes"))	return "share/servicetypes/";    if (!strcmp(type, "mime"))	return "share/mimelnk/";    if (!strcmp(type, "cgi"))	return "cgi-bin/";    if (!strcmp(type, "wallpaper"))	return "share/wallpapers/";    if (!strcmp(type, "templates"))	return "share/templates/";    if (!strcmp(type, "exe"))	return "bin/";    if (!strcmp(type, "lib"))	return "lib/";    if (!strcmp(type, "module"))	return "lib/kde2/";    qFatal("unknown resource type %s", type);    return QString::null;}QString KStandardDirs::saveLocation(const char *type,				    const QString& suffix,				    bool create) const{    QString fullPath;    checkConfig();    QStringList *dirs = relatives.find(type);    if (!dirs && (strcmp(type, "socket") == 0))    {        (void) resourceDirs(type); // Generate socket resource.        dirs = relatives.find(type); // Search again.    }    if (dirs)    {       // Check for existance of typed directory + suffix       fullPath = localkdedir() + dirs->last() + suffix;    }    else {       dirs = absolutes.find(type);       if (!dirs)          qFatal("KStandardDirs: The resource type %s is not registered", type);       fullPath = dirs->last() + suffix;    }    struct stat st;    if (stat(QFile::encodeName(fullPath), &st) != 0 || !(S_ISDIR(st.st_mode))) {	if(!create) {	    kdDebug() << "save location " << fullPath << " doesn't exist" << endl;	    return localkdedir()+suffix;	}	if(!makeDir(fullPath, 0700)) {	    kdDebug() << "failed to create " << fullPath << endl;	    return localkdedir()+suffix;	}        dircache.remove(type);    }    return fullPath;}bool KStandardDirs::makeDir(const QString& dir, int mode){    // we want an absolute path    if (dir.at(0) != '/')        return false;    QString target = dir;    uint len = target.length();    // append trailing slash if missing    if (dir.at(len - 1) != '/')        target += '/';    QString base("");    uint i = 1;    while( i < len )    {        struct stat st;        int pos = target.find('/', i);        base += target.mid(i - 1, pos - i + 1);        // bail out if we encountered a problem        if (stat(QFile::encodeName(base), &st) != 0)        {           // Directory does not exist....	  if ( mkdir(QFile::encodeName(base), (mode_t) mode) != 0) {	    perror("trying to create local folder");	    return false; // Couldn't create it :-(	  }        }        i = pos + 1;    }    return true;}static QString readEnvPath(const char *env){   QCString c_path = getenv(env);   if (c_path.isEmpty())      return QString::null;   return QFile::decodeName(c_path);}static void fixHomeDir(QString &dir){   if (dir[0] == '~')   {      dir = QDir::homeDirPath() + dir.mid(1);   }}void KStandardDirs::addKDEDefaults(){    QStringList kdedirList;    QString kdedirs = readEnvPath("KDEDIRS");    if (!kdedirs.isEmpty())    {	tokenize(kdedirList, kdedirs, ":");    }    else    {	QString kdedir = readEnvPath("KDEDIR");	if (!kdedir.isEmpty())        {           fixHomeDir(kdedir);	   kdedirList.append(kdedir);        }    }    kdedirList.append(KDEDIR);    QString localKdeDir = readEnvPath("KDEHOME");    if (!localKdeDir.isEmpty())    {       if (localKdeDir[localKdeDir.length()-1] != '/')          localKdeDir += '/';    }    else    {       localKdeDir =  QDir::homeDirPath() + "/.kde/";    }    fixHomeDir(localKdeDir);    addPrefix(localKdeDir);    for (QStringList::ConstIterator it = kdedirList.begin();	 it != kdedirList.end(); it++)    {        QString dir = *it;        fixHomeDir(dir);	addPrefix(dir);    }    uint index = 0;    while (types[index] != 0) {	addResourceType(types[index], kde_default(types[index]));	index++;    }    char hostname[256];    hostname[0] = 0;    gethostname(hostname, 255);    QString dir = QString("%1tmp-%2/").arg(localKdeDir).arg(hostname);    addResourceDir("tmp", dir);}void KStandardDirs::checkConfig() const{    if (!addedCustoms && KGlobal::_instance && KGlobal::_instance->_config)        const_cast<KStandardDirs*>(this)->addCustomized(KGlobal::_instance->_config);}bool KStandardDirs::addCustomized(KConfig *config){    if (addedCustoms) // there are already customized entries        return false; // we just quite and hope they are the right ones    // save the numbers of config directories. If this changes,    // we will return true to give KConfig a chance to reparse    uint configdirs = resourceDirs("config").count();    // reading the prefixes in    QString oldGroup = config->group();    config->setGroup("Directories");    QStringList list;    QStringList::ConstIterator it;    list = config->readListEntry("prefixes");    for (it = list.begin(); it != list.end(); it++)	addPrefix(*it);    // iterating over all entries in the group Directories    // to find entries that start with dir_$type    QMap<QString, QString> entries = config->entryMap("Directories");    QMap<QString, QString>::ConstIterator it2;    for (it2 = entries.begin(); it2 != entries.end(); it2++)    {	QString key = it2.key();	if (key.left(4) == "dir_") {	    // generate directory list, there may be more than 1.	    QStringList dirs = QStringList::split(',',						  *it2);	    QStringList::Iterator sIt(dirs.begin());	    QString resType = key.mid(4, key.length());	    for (; sIt != dirs.end(); ++sIt) {		addResourceDir(resType.latin1(), *sIt);	    }	}    }    // save it for future calls - that will return    addedCustoms = true;    config->setGroup(oldGroup);    // return true if the number of config dirs changed    return (resourceDirs("config").count() != configdirs);}QString KStandardDirs::localkdedir() const{    // Return the prefix to use for saving    return prefixes.first();}// just to make code more readable without macrosQString locate( const char *type,		const QString& filename, const KInstance* inst ){    return inst->dirs()->findResource(type, filename);}QString locateLocal( const char *type,	             const QString& filename, const KInstance* inst ){    // try to find slashes. If there are some, we have to    // create the subdir first    int slash = filename.findRev('/')+1;    if (!slash) // only one filename	return inst->dirs()->saveLocation(type) + filename;    // split path from filename    QString dir = filename.left(slash);    QString file = filename.mid(slash);    return inst->dirs()->saveLocation(type, dir) + file;}

⌨️ 快捷键说明

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