summaryrefslogtreecommitdiffstats
path: root/tdecore/ktempfile.h
diff options
context:
space:
mode:
authorTimothy Pearson <[email protected]>2011-11-06 15:56:40 -0600
committerTimothy Pearson <[email protected]>2011-11-06 15:56:40 -0600
commite16866e072f94410321d70daedbcb855ea878cac (patch)
treeee3f52eabde7da1a0e6ca845fb9c2813cf1558cf /tdecore/ktempfile.h
parenta58c20c1a7593631a1b50213c805507ebc16adaf (diff)
downloadtdelibs-e16866e072f94410321d70daedbcb855ea878cac.tar.gz
tdelibs-e16866e072f94410321d70daedbcb855ea878cac.zip
Actually move the kde files that were renamed in the last commit
Diffstat (limited to 'tdecore/ktempfile.h')
-rw-r--r--tdecore/ktempfile.h213
1 files changed, 213 insertions, 0 deletions
diff --git a/tdecore/ktempfile.h b/tdecore/ktempfile.h
new file mode 100644
index 000000000..5b18bf779
--- /dev/null
+++ b/tdecore/ktempfile.h
@@ -0,0 +1,213 @@
+/*
+ This file is part of the KDE libraries
+ Copyright (c) 1999 Waldo Bastian <[email protected]>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef _KTEMPFILE_H_
+#define _KTEMPFILE_H_
+
+#include <tqstring.h>
+#include <stdio.h>
+#include <errno.h>
+#include "kdelibs_export.h"
+
+class TQFile;
+class TQTextStream;
+class TQDataStream;
+class KSaveFile;
+class KTempFilePrivate;
+
+/**
+ * The KTempFile class creates and opens a unique file for temporary use.
+ *
+ * This is especially useful if you need to create a file in a world
+ * writable directory like /tmp without being vulnerable to so called
+ * symlink attacks.
+ *
+ * KDE applications, however, shouldn't create files in /tmp in the first
+ * place but use the "tmp" resource instead. The standard KTempFile
+ * constructor will do that by default.
+ *
+ * To create a temporary file that starts with a certain name
+ * in the "tmp" resource, one should use:
+ * KTempFile(locateLocal("tmp", prefix), extension);
+ *
+ * KTempFile does not create any missing directories, but locateLocal() does.
+ *
+ * See also KStandardDirs
+ *
+ * @author Waldo Bastian <[email protected]>
+ */
+class KDECORE_EXPORT KTempFile
+{
+ friend class KSaveFile;
+public:
+ /**
+ * Creates a temporary file with the name:
+ * \<filePrefix>\<six letters>\<fileExtension>
+ *
+ * The default @p filePrefix is "$KDEHOME/tmp-$HOST/appname/"
+ * The default @p fileExtension is ".tmp"
+ * @param filePrefix the prefix of the file name, or TQString::null
+ * for the default value
+ * @param fileExtension the extension of the prefix, or TQString::null for the
+ * default value
+ * @param mode the file permissions
+ **/
+ KTempFile(TQString filePrefix=TQString::null,
+ TQString fileExtension=TQString::null,
+ int mode = 0600 );
+
+
+ /**
+ * The destructor closes the file.
+ * If autoDelete is enabled the file gets unlinked as well.
+ **/
+ ~KTempFile();
+
+ /**
+ * Turn automatic deletion on or off.
+ * Automatic deletion is off by default.
+ * @param autoDelete true to turn automatic deletion on
+ **/
+ void setAutoDelete(bool autoDelete) { bAutoDelete = autoDelete; }
+
+ /**
+ * Returns the status of the file based on errno. (see errno.h)
+ * 0 means OK.
+ *
+ * You should check the status after object creation to check
+ * whether a file could be created in the first place.
+ *
+ * You may check the status after closing the file to verify that
+ * the file has indeed been written correctly.
+ * @return the errno status, 0 means ok
+ **/
+ int status() const;
+
+ /**
+ * Returns the full path and name of the file.
+ *
+ * Note that in most circumstances the file needs to be closed
+ * before you use it by name.
+ *
+ * In particular, if another process or software part needs to write data
+ * to the file based on the filename, the file should be closed before doing
+ * so. Otherwise the act of closing the file later on may cause the file to
+ * get truncated to a zero-size, resulting in an unexpected loss of the data.
+ *
+ * In some cases there is only interest in the filename itself but where the
+ * actual presence of a file with such name is a problem. In that case the
+ * file should first be both closed and unlinked. Such usage is not recommended
+ * since it may lead to the kind of symlink vulnerabilities that the KTempFile
+ * design attempts to prevent.
+ *
+ * @return The name of the file, or TQString::null if opening the
+ * file has failed or the file has been unlinked already.
+ **/
+ TQString name() const;
+
+ /**
+ * An integer file descriptor open for writing to the file
+ * @return The file descriptor, or a negative number if opening
+ * the file failed
+ **/
+ int handle() const;
+
+ /**
+ * Returns the FILE* of the temporary file.
+ * @return FILE* stream open for writing to the file, or 0
+ * if opening the file failed
+ **/
+ FILE *fstream();
+
+ /**
+ * Returns the TQTextStream for writing.
+ * @return TQTextStream open for writing to the file, or 0
+ * if opening the file failed
+ **/
+ TQTextStream *textStream();
+
+ /**
+ * Returns a TQDataStream for writing.
+ * @return TQDataStream open for writing to the file, or 0
+ * if opening the file failed
+ **/
+ TQDataStream *dataStream();
+
+ /**
+ * Returns a TQFile.
+ * @return A TQFile open for writing to the file, or 0 if
+ * opening the file failed.
+ **/
+ TQFile *file();
+
+ /**
+ * Unlinks the file from the directory. The file is
+ * deleted once the last reader/writer closes it.
+ **/
+ void unlink();
+
+ /**
+ * Flushes file to disk (fsync).
+ *
+ * If you want to be as sure as possible that the file data has
+ * actually been physically stored on disk you need to call sync().
+ *
+ * See status() for details about errors.
+ * @return true if successful, or false if an error has occurred.
+ * @since 3.3
+ **/
+ bool sync();
+
+ /**
+ * Closes the file.
+ *
+ * See status() for details about errors.
+ * @return true if successful, or false if an error has occurred.
+ **/
+ bool close();
+
+protected:
+ /**
+ * Constructor used by KSaveFile
+ **/
+ KTempFile(bool);
+
+ /**
+ * @internal
+ * Create function used internally by KTempFile and KSaveFile
+ **/
+ bool create(const TQString &filePrefix,
+ const TQString &fileExtension, int mode);
+
+ void setError(int error) { mError = error; }
+private:
+ int mError;
+ TQString mTmpName;
+ int mFd;
+ FILE *mStream;
+ TQFile *mFile;
+ TQTextStream *mTextStream;
+ TQDataStream *mDataStream;
+ bool bOpen;
+ bool bAutoDelete;
+
+ KTempFilePrivate *d;
+};
+
+#endif