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.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Sep 23 17:11:38 2004 by
doxygen 1.3.8-20040913 written by
Dimitri van Heesch, © 1997-2003