summaryrefslogtreecommitdiff
path: root/ruby/src/IceRuby/Slice.cpp
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2016-09-17 00:28:00 +0200
committerJose <jose@zeroc.com>2016-09-17 00:28:00 +0200
commit47c3b5d2b03d3286cba2a3b4890e57fdd6135132 (patch)
tree40e05ffec6df92a5b88fdb675d775580f41547c1 /ruby/src/IceRuby/Slice.cpp
parent3.6.3 version fixes (diff)
downloadice-47c3b5d2b03d3286cba2a3b4890e57fdd6135132.tar.bz2
ice-47c3b5d2b03d3286cba2a3b4890e57fdd6135132.tar.xz
ice-47c3b5d2b03d3286cba2a3b4890e57fdd6135132.zip
Fix ICE-4787 - slice compilers and unicode paths
Diffstat (limited to 'ruby/src/IceRuby/Slice.cpp')
-rw-r--r--ruby/src/IceRuby/Slice.cpp71
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