diff options
Diffstat (limited to 'cpp/src/slice2cs')
-rw-r--r-- | cpp/src/slice2cs/.depend | 4 | ||||
-rw-r--r-- | cpp/src/slice2cs/Gen.cpp | 22 | ||||
-rw-r--r-- | cpp/src/slice2cs/Main.cpp | 28 |
3 files changed, 28 insertions, 26 deletions
diff --git a/cpp/src/slice2cs/.depend b/cpp/src/slice2cs/.depend index 5e88d13cee9..3681dd8ef03 100644 --- a/cpp/src/slice2cs/.depend +++ b/cpp/src/slice2cs/.depend @@ -1,2 +1,2 @@ -Gen$(OBJEXT): Gen.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Config.h ./Gen.h $(includedir)/Slice/CsUtil.h $(includedir)/Slice/Parser.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/OutputUtil.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/UUID.h $(includedir)/Slice/Checksum.h $(includedir)/Slice/DotNetNames.h $(includedir)/Slice/SignalHandler.h -Main$(OBJEXT): Main.cpp $(includedir)/IceUtil/Options.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Handle.h $(includedir)/Slice/Preprocessor.h $(includedir)/Slice/SignalHandler.h ./Gen.h $(includedir)/Slice/CsUtil.h $(includedir)/Slice/Parser.h $(includedir)/IceUtil/OutputUtil.h +Gen$(OBJEXT): Gen.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Config.h ./Gen.h $(includedir)/Slice/CsUtil.h $(includedir)/Slice/Parser.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/OutputUtil.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/UUID.h $(includedir)/Slice/Checksum.h $(includedir)/Slice/DotNetNames.h +Main$(OBJEXT): Main.cpp $(includedir)/IceUtil/Options.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/Slice/Preprocessor.h ./Gen.h $(includedir)/Slice/CsUtil.h $(includedir)/Slice/Parser.h $(includedir)/IceUtil/OutputUtil.h diff --git a/cpp/src/slice2cs/Gen.cpp b/cpp/src/slice2cs/Gen.cpp index 77736cad662..44be51b65ae 100644 --- a/cpp/src/slice2cs/Gen.cpp +++ b/cpp/src/slice2cs/Gen.cpp @@ -21,7 +21,6 @@ #include <IceUtil/UUID.h> #include <Slice/Checksum.h> #include <Slice/DotNetNames.h> -#include <Slice/SignalHandler.h> using namespace std; using namespace Slice; @@ -39,19 +38,6 @@ using IceUtilInternal::eb; using IceUtilInternal::spar; using IceUtilInternal::epar; -// -// Callback for Crtl-C signal handling -// -static Gen* _gen = 0; - -static void closeCallback() -{ - if(_gen != 0) - { - _gen->closeOutput(); - } -} - static string // Should be an anonymous namespace, but VC++ 6 can't handle that. sliceModeToIceMode(Operation::Mode opMode) { @@ -1072,9 +1058,6 @@ Slice::Gen::Gen(const string& name, const string& base, const vector<string>& in : _includePaths(includePaths), _stream(stream) { - _gen = this; - SignalHandler::setCallback(closeCallback); - string fileBase = base; string::size_type pos = base.find_last_of("/\\"); if(pos != string::npos) @@ -1089,8 +1072,6 @@ Slice::Gen::Gen(const string& name, const string& base, const vector<string>& in file = dir + '/' + file; fileImpl = dir + '/' + fileImpl; } - SignalHandler::addFile(file); - SignalHandler::addFile(fileImpl); _out.open(file.c_str()); if(!_out) @@ -1127,6 +1108,7 @@ Slice::Gen::Gen(const string& name, const string& base, const vector<string>& in cerr << name << ": `" << fileImpl << "' already exists--will not overwrite" << endl; return; } + _impl.open(fileImpl.c_str()); if(!_impl) { @@ -1146,8 +1128,6 @@ Slice::Gen::~Gen() { _impl << '\n'; } - - SignalHandler::setCallback(0); } bool diff --git a/cpp/src/slice2cs/Main.cpp b/cpp/src/slice2cs/Main.cpp index 770ee8b5ea4..6ec7e7d8c6a 100644 --- a/cpp/src/slice2cs/Main.cpp +++ b/cpp/src/slice2cs/Main.cpp @@ -8,13 +8,25 @@ // ********************************************************************** #include <IceUtil/Options.h> +#include <IceUtil/CtrlCHandler.h> +#include <IceUtil/StaticMutex.h> #include <Slice/Preprocessor.h> -#include <Slice/SignalHandler.h> #include <Gen.h> using namespace std; using namespace Slice; +static IceUtil::StaticMutex _mutex = ICE_STATIC_MUTEX_INITIALIZER; +static bool _interrupted = false; + +void +interruptedCallback(int signal) +{ + IceUtil::StaticMutex::Lock lock(_mutex); + + _interrupted = true; +} + void usage(const char* n) { @@ -144,10 +156,11 @@ main(int argc, char* argv[]) int status = EXIT_SUCCESS; + IceUtil::CtrlCHandler ctrlCHandler; + ctrlCHandler.setCallback(interruptedCallback); + for(i = args.begin(); i != args.end(); ++i) { - SignalHandler sigHandler; - if(depend) { Preprocessor icecpp(argv[0], *i, cppArgs); @@ -222,6 +235,15 @@ main(int argc, char* argv[]) p->destroy(); } } + + { + IceUtil::StaticMutex::Lock lock(_mutex); + + if(_interrupted) + { + return EXIT_FAILURE; + } + } } return status; |