KMFolderDir* KMFolder::createChildFolder() { if ( mChild ) { return mChild; } QString childName = '.' + fileName() + ".directory"; QString childDir = path() + '/' + childName; if ( access( QFile::encodeName( childDir ), W_OK ) != 0 ) { // childDir does not exist or is not writable, so create it. if ( KDE_mkdir( QFile::encodeName(childDir), S_IRWXU ) != 0 && chmod( QFile::encodeName(childDir), S_IRWXU) != 0 ) { QString wmsg = QString( " '%1': %2" ).arg( childDir ).arg( strerror( errno ) ); KMessageBox::information( 0, i18n( "Failed to create folder" ) + wmsg ); return 0; } } KMFolderDirType newType = KMStandardDir; if ( folderType() == KMFolderTypeCachedImap ) { newType = KMDImapDir; } else if ( folderType() == KMFolderTypeImap ) { newType = KMImapDir; } mChild = new KMFolderDir( this, parent(), childName, newType ); if( !mChild ) return 0; mChild->reload(); parent()->append( mChild ); return mChild; }
KDECORE_EXPORT char* mkdtemp (char* _template) { static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; char *XXXXXX; int len; int count; int value; len = strlen (_template); if ((int) len < 6 || strncmp (&_template[len - 6], "XXXXXX", 6)) return 0; XXXXXX = &_template[len - 6]; value = rand(); for (count = 0; count < 256; ++count) { int v = value; /* Fill in the random bits. */ XXXXXX[0] = letters[v % 62]; v /= 62; XXXXXX[1] = letters[v % 62]; v /= 62; XXXXXX[2] = letters[v % 62]; v /= 62; XXXXXX[3] = letters[v % 62]; v /= 62; XXXXXX[4] = letters[v % 62]; v /= 62; XXXXXX[5] = letters[v % 62]; /* This is a random value. It is only necessary that the next TMP_MAX values generated by adding 7777 to VALUE are different with (module 2^32). */ value += 7777; if (!KDE_mkdir(_template,0700)) return _template; } return 0; }
bool KStandardDirs::makeDir(const QString &dir, int mode) { // we want an absolute path if(QDir::isRelativePath(dir)) 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) { KDE_struct_stat st; int pos = target.find('/', i); base += target.mid(i - 1, pos - i + 1); QCString baseEncoded = QFile::encodeName(base); // bail out if we encountered a problem if(KDE_stat(baseEncoded, &st) != 0) { // Directory does not exist.... // Or maybe a dangling symlink ? if(KDE_lstat(baseEncoded, &st) == 0) (void)unlink(baseEncoded); // try removing if(KDE_mkdir(baseEncoded, (mode_t)mode) != 0) { baseEncoded.prepend("trying to create local folder "); perror(baseEncoded.data()); return false; // Couldn't create it :-( } } i = pos + 1; } return true; }