CARMA C++
ScopedUmask.h
1 #ifndef CARMA_UTIL_SCOPEDUMASK_H
2 #define CARMA_UTIL_SCOPEDUMASK_H
3 
4 
5 #include <sys/types.h>
6 #include <sys/stat.h>
7 
8 
9 namespace carma {
10 namespace util {
11 
12 
13 class ScopedUmask {
14  public:
15  explicit ScopedUmask( ::mode_t cmask );
16 
17  /* virtual */ ~ScopedUmask( );
18 
19  private:
20  // No copying
21  ScopedUmask( const ScopedUmask & rhs );
22  ScopedUmask & operator=( const ScopedUmask & rhs );
23 
24  const ::mode_t oldCmask_;
25 };
26 
27 
28 } // namespace carma::util
29 } // namespace carma
30 
31 
32 inline
33 carma::util::ScopedUmask::ScopedUmask( const ::mode_t cmask ) :
34 oldCmask_( ::umask( cmask ) )
35 {
36 }
37 
38 
39 inline
40 carma::util::ScopedUmask::~ScopedUmask( )
41 try {
42  ::umask( oldCmask_ );
43 } catch ( ... ) {
44  // Just stifle any exceptions
45 
46  return;
47 }
48 
49 
50 #endif