Welcome to mirror list, hosted at ThFree Co, Russian Federation.

temporarydir.cpp « mirall « src - github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 07caef19dc512c917b71c66a8a64708579b999aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
 * Copyright (C) by Duncan Mac-Vicar P. <duncan@kde.org>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program 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 General Public License
 * for more details.
 */

#include "mirall/temporarydir.h"
#include "mirall/fileutils.h"

#include <cstdlib>
#include <cerrno>
#include <cstring>

#include <QDebug>
#include <QDir>
#include <QDateTime>

namespace Mirall
{

static const QString dirTemplate = QDir::tempPath() + "/mirall-XXXXXX";

/*
 * This class creates a temporary directory as Qt 4.x does not provide an
 * implementation yet. It will come with Qt5, don't forget to PORT
 *
 * This class is only used in the test suite of mirall.
 * As the mkdtemp function is problematic on non linux platforms, I change
 * the filename generation to something more predictable using the timestamp.
 *
 * Note: This is not allowed for cases where the dir name needs to be
 * unpredictable for security reasons.
 */

TemporaryDir::TemporaryDir()
{
#ifdef Q_WS_WIN
  QDateTime dt = QDateTime::currentDateTime();
  QString p( QDir::tempPath() + "/mirall-" + dt.toString( Qt::ISODate ) );
  QDir dir( p );
  if( dir.mkpath( p ) ) {
    _path = p;
  }
#else
    char *buff = ::strdup(dirTemplate.toLocal8Bit().data());
    char *tmp = ::mkdtemp(buff);
    _path = QString((const char *) tmp);
    ::free(buff);
#endif
}

TemporaryDir::~TemporaryDir()
{
    FileUtils::removeDir(_path);
}

QString TemporaryDir::path() const
{
    return _path;
}

}