diff options
author | Bernard Normier <bernard@zeroc.com> | 2009-01-23 17:07:21 -0500 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2009-01-23 17:07:21 -0500 |
commit | 2380e089401d048490da23bc6d71e5687bafbe47 (patch) | |
tree | 6d97052d1f93bc2bafcd7fd1a9ebe103544b6cad /cpp/src/Slice/FileTracker.cpp | |
parent | Fixed permissions (diff) | |
parent | 3.3.1 third-party updates (diff) | |
download | ice-2380e089401d048490da23bc6d71e5687bafbe47.tar.bz2 ice-2380e089401d048490da23bc6d71e5687bafbe47.tar.xz ice-2380e089401d048490da23bc6d71e5687bafbe47.zip |
Merge branch 'R3_3_branch' of cvs:/home/git/ice into R3_3_branch
Conflicts:
java/resources/IceGridAdmin/icegridadmin_content_dyn.html
java/resources/IceGridAdmin/icegridadmin_content_static.html
Diffstat (limited to 'cpp/src/Slice/FileTracker.cpp')
-rw-r--r-- | cpp/src/Slice/FileTracker.cpp | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/cpp/src/Slice/FileTracker.cpp b/cpp/src/Slice/FileTracker.cpp new file mode 100644 index 00000000000..438670cf2f8 --- /dev/null +++ b/cpp/src/Slice/FileTracker.cpp @@ -0,0 +1,117 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#include <Slice/FileTracker.h> + +#ifdef _WIN32 +# include <direct.h> +#endif + +using namespace std; + +Slice::FileException::FileException(const char* file, int line, const string& r) : + Exception(file, line), + _reason(r) +{ +} + +Slice::FileException::~FileException() throw() +{ +} + +const char* Slice::FileException::_name = "Slice::FileException"; + +string +Slice::FileException::ice_name() const +{ + return _name; +} + +void +Slice::FileException::ice_print(ostream& out) const +{ + Exception::ice_print(out); + out << ": " << _reason; +} + +IceUtil::Exception* +Slice::FileException::ice_clone() const +{ + return new FileException(*this); +} + +void +Slice::FileException::ice_throw() const +{ + throw *this; +} + +string +Slice::FileException::reason() const +{ + return _reason; +} + + +static Slice::FileTrackerPtr Instance; + +Slice::FileTracker::FileTracker() +{ +} + +Slice::FileTracker::~FileTracker() +{ +} + +// The file tracker is not supposed to be thread safe. +Slice::FileTrackerPtr +Slice::FileTracker::instance() +{ + if(!Instance) + { + Instance = new FileTracker(); + } + return Instance; +} + +void +Slice::FileTracker::addFile(const string& file) +{ + _files.push_front(make_pair(file, false)); +} + +void +Slice::FileTracker::addDirectory(const string& dir) +{ + _files.push_front(make_pair(dir, true)); +} + +void +Slice::FileTracker::cleanup() +{ + for(list<pair<string, bool> >::const_iterator p = _files.begin(); p != _files.end(); ++p) + { + if(!p->second) + { +#ifdef _WIN32 + _unlink(p->first.c_str()); +#else + unlink(p->first.c_str()); +#endif + } + else + { +#ifdef _WIN32 + _rmdir(p->first.c_str()); +#else + rmdir(p->first.c_str()); +#endif + } + } +} |