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(180) << "KTempDir: Temporary directory created :" << mTmpName << endl;
00091 mode_t tmp = 0;
00092 mode_t umsk = umask(tmp);
00093 umask(umsk);
00094 chmod(nme, mode&(~umsk));
00095
00096
00097 bExisting = true;
00098
00099
00100 chown(nme, getuid(), getgid());
00101 return true;
00102 }
00103
00104 KTempDir::~KTempDir()
00105 {
00106 if (bAutoDelete)
00107 unlink();
00108 }
00109
00110 int
00111 KTempDir::status() const
00112 {
00113 return mError;
00114 }
00115
00116 QString
00117 KTempDir::name() const
00118 {
00119 return mTmpName;
00120 }
00121
00122 bool
00123 KTempDir::existing() const
00124 {
00125 return bExisting;
00126 }
00127
00128 QDir *
00129 KTempDir::qDir()
00130 {
00131 if (bExisting) return new QDir(mTmpName);
00132 return 0;
00133 }
00134
00135 void
00136 KTempDir::unlink()
00137 {
00138 if (!bExisting) return;
00139 QString rmstr("/bin/rm -rf ");
00140 rmstr += KProcess::quote(mTmpName);
00141 ::system( QFile::encodeName(rmstr) );
00142
00143 bExisting=false;
00144 mError=0;
00145 }
00146
00147
This file is part of the documentation for kdecore Library Version 3.4.0.