librostlab
1.0.20
Toggle main menu visibility
Loading...
Searching...
No Matches
rostlab
cwd_resource.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2011 Laszlo Kajan, Technical University of Munich, Germany
3
4
This file is part of librostlab.
5
6
librostlab is free software: you can redistribute it and/or modify
7
it under the terms of the GNU Lesser General Public License as published by
8
the Free Software Foundation, either version 3 of the License, or
9
(at your option) any later version.
10
11
This program 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
14
GNU Lesser General Public License for more details.
15
16
You should have received a copy of the GNU Lesser General Public License
17
along with this program. If not, see <http://www.gnu.org/licenses/>.
18
*/
19
#ifndef ROSTLAB_CWD_RESOURCE
20
#define ROSTLAB_CWD_RESOURCE
21
22
#include <errno.h>
23
#include <stdexcept>
24
#include <unistd.h>
25
#include <string.h>
26
27
namespace
rostlab
{
28
29
class
cwd_resource
30
{
31
private
:
32
string
_olddir;
33
// this is a resource - disable copy contructor and copy assignment
34
cwd_resource
(
const
cwd_resource& ){};
35
cwd_resource&
36
operator=(
const
cwd_resource&){
return
*
this
;};
37
public
:
38
cwd_resource
() : _olddir(
""
) {};
39
40
cwd_resource
(
const
string
& __dirname ) : _olddir(
""
)
41
{
42
acquire
( __dirname );
43
}
44
45
inline
void
acquire
(
const
string
& __dirname )
throw
(
runtime_error
)
46
{
47
release
();
48
//
49
char
*buf = NULL;
50
if
( ( buf = getcwd( NULL, 0 ) ) == NULL )
throw
runtime_error
(
string
(
"failed to get working directory: "
) + strerror( errno ) );
51
string
cwd = buf; free( buf ); buf = NULL;
52
53
if
( chdir( __dirname.c_str() ) )
throw
runtime_error
(
"failed to chdir to '"
+ __dirname +
"': "
+ strerror( errno ) );
54
_olddir = cwd;
55
}
56
57
inline
void
release
() throw (
runtime_error
)
58
{
59
if
( _olddir !=
""
)
60
{
61
if
( chdir( _olddir.c_str() ) )
throw
runtime_error
(
"failed to chdir to '"
+ _olddir +
"': "
+ strerror( errno ) );
62
_olddir =
""
;
63
}
64
}
65
66
virtual
~cwd_resource
()
67
{
68
release
();
69
}
70
};
71
72
};
73
74
#endif
// ROSTLAB_CWD_RESOURCE
75
// vim:et:ts=2:ai:
rostlab::cwd_resource::~cwd_resource
virtual ~cwd_resource()
Definition
cwd_resource.h:66
rostlab::cwd_resource::cwd_resource
cwd_resource(const string &__dirname)
Definition
cwd_resource.h:40
rostlab::cwd_resource::release
void release()
Definition
cwd_resource.h:57
rostlab::cwd_resource::acquire
void acquire(const string &__dirname)
Definition
cwd_resource.h:45
rostlab::cwd_resource::cwd_resource
cwd_resource()
Definition
cwd_resource.h:38
rostlab::runtime_error
Definition
rostlab_stdexcept.h:69
rostlab
Definition
aux_functions.h:27
Generated on
for librostlab by
1.17.0