ktempdir.cpp
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 #include <config.h>
00024 
00025 #include <sys/types.h>
00026 
00027 #ifdef HAVE_SYS_STAT_H
00028 #include <sys/stat.h>
00029 #endif
00030 
00031 #include <fcntl.h>
00032 #include <stdlib.h>
00033 #include <unistd.h>
00034 
00035 #ifdef HAVE_TEST
00036 #include <test.h>
00037 #endif
00038 #ifdef HAVE_PATHS_H
00039 #include <paths.h>
00040 #endif
00041 
00042 #ifndef _PATH_TMP
00043 #define _PATH_TMP "/tmp"
00044 #endif
00045 
00046 #include <qdatetime.h>
00047 #include <qdir.h>
00048 
00049 #include "kglobal.h"
00050 #include "kapplication.h"
00051 #include "kinstance.h"
00052 #include "ktempdir.h"
00053 #include "kstandarddirs.h"
00054 #include "kprocess.h"
00055 #include <kdebug.h>
00056 
00057 KTempDir::KTempDir(QString directoryPrefix, int mode)
00058 {
00059    bAutoDelete = false;
00060    bExisting = false;
00061    mError=0;
00062    if (directoryPrefix.isEmpty())
00063    {
00064       directoryPrefix = locateLocal("tmp", KGlobal::instance()->instanceName());
00065    }
00066    (void) create(directoryPrefix , mode);
00067 }
00068 
00069 bool
00070 KTempDir::create(const QString &directoryPrefix, int mode)
00071 {
00072    
00073    (void) KApplication::random();
00074 
00075    QCString nme = QFile::encodeName(directoryPrefix) + "XXXXXX";
00076    char *realName;
00077    if((realName=mkdtemp(nme.data())) == 0)
00078    {
00079        
00080        QCString nme = QFile::encodeName(directoryPrefix) + "XXXXXX";
00081        qWarning("KTempDir: Error trying to create %s: %s", nme.data(), strerror(errno));
00082        mError = errno;
00083        mTmpName = QString::null;
00084        return false;
00085    }
00086 
00087    
00088    QCString realNameStr(realName);
00089    mTmpName = QFile::decodeName(realNameStr)+"/";
00090    kdDebug()<<"KTempDir: Temporary directory created :"<<realNameStr<<endl;
00091    kdDebug()<<"KTempDir: Temporary directory created :"<<mTmpName<<endl;
00092    mode_t tmp = 0;
00093    mode_t umsk = umask(tmp);
00094    umask(umsk);
00095    chmod(nme, mode&(~umsk));
00096 
00097    
00098    bExisting = true;
00099 
00100    
00101    chown(nme, getuid(), getgid());
00102    return true;
00103 }
00104 
00105 KTempDir::~KTempDir()
00106 {
00107    if (bAutoDelete)
00108       unlink();
00109 }
00110 
00111 int
00112 KTempDir::status() const
00113 {
00114    return mError;
00115 }
00116 
00117 QString
00118 KTempDir::name() const
00119 {
00120    return mTmpName;
00121 }
00122 
00123 bool
00124 KTempDir::existing() const
00125 {
00126    return bExisting;
00127 }
00128 
00129 QDir *
00130 KTempDir::qDir()
00131 {
00132    if (bExisting) return new QDir(mTmpName);
00133    return 0;
00134 }
00135 
00136 void
00137 KTempDir::unlink()
00138 {
00139    if (!bExisting) return;
00140    QString rmstr("/bin/rm -rf ");
00141    rmstr += KProcess::quote(mTmpName);
00142    ::system( QFile::encodeName(rmstr) );
00143 
00144    bExisting=false;
00145    mError=0;
00146 }
00147 
00148 
 
This file is part of the documentation for kdecore Library Version 3.2.0.