Added mount protector component.
[harmattan/cameraplus] / src / mountprotector.cpp
1 /*!
2  * This file is part of CameraPlus.
3  *
4  * Copyright (C) 2012 Mohammed Sameer <msameer@foolab.org>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
19  */
20
21 #include "mountprotector.h"
22 #include <QDir>
23 #include <QDebug>
24
25 MountProtector::MountProtector(QObject *parent) :
26   QObject(parent), m_fd(-1) {
27
28 }
29
30 MountProtector::~MountProtector() {
31   unlock();
32 }
33
34 QString MountProtector::path() const {
35   return m_path;
36 }
37
38 void MountProtector::setPath(const QString& path) {
39   if (m_path != path) {
40     m_path = path;
41     emit pathChanged();
42   }
43 }
44
45 bool MountProtector::lock() {
46   if (m_fd != -1) {
47     return true;
48   }
49
50   if (m_path.isEmpty()) {
51     return false;
52   }
53
54   QString path = QString("%1%2.cameraplus_tmp_XXXXXX").arg(m_path).arg(QDir::separator());
55
56   m_fd = mkstemp(path.toLocal8Bit().data());
57
58   if (m_fd == -1) {
59     perror("mkstemp");
60     return false;
61   }
62
63   return true;
64 }
65
66 void MountProtector::unlock() {
67   if (m_fd != -1) {
68     close(m_fd);
69     m_fd = -1;
70   }
71 }