示例#1
0
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;
}
示例#2
0
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;
}
示例#3
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;
}