From 74016f1842e1c741faf14a5c07988112dc4978fa Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 21 Feb 2013 03:45:07 +0000 Subject: ruby.c: fix for multiarch library * ruby.c (ruby_init_loadpath_safe): try two levels upper for stripping libdir name. [Bug #7874] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39348 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ruby.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'ruby.c') diff --git a/ruby.c b/ruby.c index f8b05f7f72..af4cf45a47 100644 --- a/ruby.c +++ b/ruby.c @@ -464,15 +464,30 @@ ruby_init_loadpath_safe(int safe_level) #endif const ptrdiff_t bindir_len = (ptrdiff_t)sizeof(bindir) - 1; const ptrdiff_t libdir_len = (ptrdiff_t)sizeof(libdir) - 1; - *p = 0; - if (p - libpath >= bindir_len && !STRCASECMP(p - bindir_len, bindir)) { + +#ifdef ENABLE_MULTIARCH + char *p2 = NULL; + + multiarch: +#endif + if (p - libpath >= bindir_len && !STRNCASECMP(p - bindir_len, bindir, bindir_len)) { p -= bindir_len; - *p = 0; } - else if (p - libpath >= libdir_len && !strcmp(p - libdir_len, libdir)) { + else if (p - libpath >= libdir_len && !strncmp(p - libdir_len, libdir, libdir_len)) { p -= libdir_len; - *p = 0; } +#ifdef ENABLE_MULTIARCH + else if (p2) { + p = p2; + } + else { + p2 = p; + p = rb_enc_path_last_separator(libpath, p, rb_ascii8bit_encoding()); + if (p) goto multiarch; + p = p2; + } +#endif + *p = 0; } #if !VARIABLE_LIBPATH else { -- cgit v1.2.3