diff options
author | Jose <jose@zeroc.com> | 2016-09-17 00:28:00 +0200 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2016-09-17 00:28:00 +0200 |
commit | 47c3b5d2b03d3286cba2a3b4890e57fdd6135132 (patch) | |
tree | 40e05ffec6df92a5b88fdb675d775580f41547c1 /ruby/src | |
parent | 3.6.3 version fixes (diff) | |
download | ice-47c3b5d2b03d3286cba2a3b4890e57fdd6135132.tar.bz2 ice-47c3b5d2b03d3286cba2a3b4890e57fdd6135132.tar.xz ice-47c3b5d2b03d3286cba2a3b4890e57fdd6135132.zip |
Fix ICE-4787 - slice compilers and unicode paths
Diffstat (limited to 'ruby/src')
-rw-r--r-- | ruby/src/IceRuby/Slice.cpp | 71 |
1 files changed, 32 insertions, 39 deletions
diff --git a/ruby/src/IceRuby/Slice.cpp b/ruby/src/IceRuby/Slice.cpp index 27ff4d465b0..c868920c298 100644 --- a/ruby/src/IceRuby/Slice.cpp +++ b/ruby/src/IceRuby/Slice.cpp @@ -173,45 +173,38 @@ IceRuby_compile(int argc, VALUE* argv, VALUE self) } vector<string> argSeq; - if(!arrayToStringSeq(argv[0], argSeq)) - { - throw RubyException(rb_eTypeError, "argument is not an array"); - } - char** argv = new char*[argSeq.size()+1]; - // Manufacture a fake argv[0]. - argv[0] = const_cast<char*>("slice2rb"); - for(size_t i = 0; i < argSeq.size(); ++i) - { - argv[i+1] = const_cast<char*>(argSeq[i].c_str()); - } - - int rc; - try - { - rc = Slice::Ruby::compile(argSeq.size()+1, argv); - } - catch(const std::exception& ex) - { - getErrorStream() << argv[0] << ": error:" << ex.what() << endl; - rc = EXIT_FAILURE; - } - catch(const std::string& msg) - { - getErrorStream() << argv[0] << ": error:" << msg << endl; - rc = EXIT_FAILURE; - } - catch(const char* msg) - { - getErrorStream() << argv[0] << ": error:" << msg << endl; - rc = EXIT_FAILURE; - } - catch(...) - { - getErrorStream() << argv[0] << ": error:" << "unknown exception" << endl; - rc = EXIT_FAILURE; - } - - delete[] argv; + if(!arrayToStringSeq(argv[0], argSeq)) + { + throw RubyException(rb_eTypeError, "argument is not an array"); + } + // Manufacture a fake argv[0]. + argSeq.insert(argSeq.begin(), "slice2rb"); + + int rc; + try + { + rc = Slice::Ruby::compile(argSeq); + } + catch(const std::exception& ex) + { + getErrorStream() << argSeq[0] << ": error:" << ex.what() << endl; + rc = EXIT_FAILURE; + } + catch(const std::string& msg) + { + getErrorStream() << argSeq[0] << ": error:" << msg << endl; + rc = EXIT_FAILURE; + } + catch(const char* msg) + { + getErrorStream() << argSeq[0] << ": error:" << msg << endl; + rc = EXIT_FAILURE; + } + catch(...) + { + getErrorStream() << argSeq[0] << ": error:" << "unknown exception" << endl; + rc = EXIT_FAILURE; + } return INT2FIX(rc); } ICE_RUBY_CATCH |