lib: added warning checks for unsupported recursion fields in vevent.cc
[barry/progweb.git] / desktop / src / tempdir.cc
blob43b5172499acb03d8b23f94f789ccf734e5a0089
1 ///
2 /// \file tempdir.cc
3 /// Temp directory & file wrapper class
4 ///
6 /*
7 Copyright (C) 2009-2012, Chris Frey <cdfrey@foursquare.net>
8 The idea to use glib's g_get_tmp_dir() came from opensync's osynctool.
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19 See the GNU General Public License in the COPYING file at the
20 root directory of this project for more details.
23 #include "tempdir.h"
24 #include <errno.h>
25 #include <stdlib.h>
26 #include <unistd.h>
27 #include <string.h>
28 #include <glib.h>
29 #include <sstream>
30 #include <stdexcept>
32 TempDir::TempDir(const char *basename)
33 : m_template(0)
34 , m_files(0)
36 m_template = g_strdup_printf("%s/%s-XXXXXX", g_get_tmp_dir(), basename);
37 if( mkdtemp(m_template) == NULL ) {
38 g_free(m_template);
39 throw std::runtime_error(std::string("Cannot create temp directory: ") + strerror(errno));
43 TempDir::~TempDir()
45 // delete all files
46 for( int i = 0; i < m_files; i++ ) {
47 unlink(MakeFilename(i).c_str());
50 // delete directory
51 rmdir(m_template);
53 // cleanup memory
54 g_free(m_template);
57 std::string TempDir::MakeFilename(int file_id) const
59 std::ostringstream oss;
60 oss << m_template << "/" << file_id;
61 return oss.str();
64 std::string TempDir::GetNewFilename()
66 return MakeFilename(m_files++);