diff options
author | Jeremy Evans <code@jeremyevans.net> | 2021-10-04 07:35:39 -0700 |
---|---|---|
committer | Jeremy Evans <code@jeremyevans.net> | 2021-10-04 07:43:24 -0900 |
commit | d9b7403746249b532ac57ca80112d7e63a417d86 (patch) | |
tree | 11df17e297f3c36a8d6f8ffbc51d484886f993ec /load.c | |
parent | b44c5187b4d05d8644242e532f2243210d0b74df (diff) | |
download | ruby-d9b7403746249b532ac57ca80112d7e63a417d86.tar.gz |
Use a rescue around the internal realpath call for each loaded feature
This appears to be only necessary on Solaris, but this commit
enables it unconditionally to test breakage. The following
commit will switch to only enabling it on Solaris.
Diffstat (limited to 'load.c')
-rw-r--r-- | load.c | 29 |
1 files changed, 28 insertions, 1 deletions
@@ -1060,6 +1060,33 @@ rb_ext_ractor_safe(bool flag) GET_THREAD()->ext_config.ractor_safe = flag; } +#if 1 +static VALUE +required_feature__realpath(VALUE path) +{ + return rb_realpath_internal(Qnil, path, 1); +} + +static VALUE +required_feature_realpath_rescue(VALUE path, VALUE exc) +{ + return path; +} + +static VALUE +required_feature_realpath(VALUE path) +{ + return rb_rescue(required_feature__realpath, path, + required_feature_realpath_rescue, path); +} +#else +static VALUE +required_feature_realpath(VALUE path) +{ + return rb_realpath_internal(Qnil, path, 1); +} +#endif + /* * returns * 0: if already loaded (false) @@ -1111,7 +1138,7 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception, bool wa result = TAG_RETURN; } else if (RTEST(rb_hash_aref(realpaths, - realpath = rb_realpath_internal(Qnil, path, 1)))) { + realpath = required_feature_realpath(path)))) { result = 0; } else { |