diff --git a/ChangeLog b/ChangeLog index 4fbd2588d9..36f532ad69 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Thu Feb 19 15:11:40 2009 Nobuyoshi Nakada + + * eval_intern.h (translit_char): moved from ruby.c. + + * load.c (load_ext): transliterates file separators and back if + needed. + + * symbian/setup (DLN_NEEDS_ALT_SEPARATOR): defined. + Thu Feb 19 14:48:12 2009 Nobuyoshi Nakada * configure.in, */Makefile.sub (LOAD_RELATIVE): moved from ruby.c diff --git a/dln.c b/dln.c index e9d0bb1508..7521678623 100644 --- a/dln.c +++ b/dln.c @@ -1268,16 +1268,6 @@ dln_load(const char *file) # define RTLD_GLOBAL 0 #endif -#if defined __SYMBIAN32__ - { /* Need backslash in the path again */ - char *p; - for (p = (char *)file; *p; p++) { - if (*p == '/') { - *p = '\\'; - } - } - } -#endif /* Load file */ if ((handle = (void*)dlopen(file, RTLD_LAZY|RTLD_GLOBAL)) == NULL) { error = dln_strerror(); @@ -1286,8 +1276,9 @@ dln_load(const char *file) init_fct = (void(*)())dlsym(handle, buf); #if defined __SYMBIAN32__ - if (init_fct == NULL) - init_fct = (void(*)())dlsym(handle, "1"); /* Some Symbian versions do not support symbol table in DLL, ordinal numbers only */ + if (init_fct == NULL) { + init_fct = (void(*)())dlsym(handle, "1"); /* Some Symbian versions do not support symbol table in DLL, ordinal numbers only */ + } #endif if (init_fct == NULL) { error = DLN_ERROR(); diff --git a/eval_intern.h b/eval_intern.h index 40f64eca06..ac2999d3b9 100644 --- a/eval_intern.h +++ b/eval_intern.h @@ -205,4 +205,20 @@ VALUE rb_vm_top_self(); VALUE rb_vm_cbase(void); void rb_trap_restore_mask(void); +#ifndef CharNext /* defined as CharNext[AW] on Windows. */ +#define CharNext(p) ((p) + mblen(p, RUBY_MBCHAR_MAXSIZE)) +#endif + +#if defined DOSISH || defined __CYGWIN__ +static inline void +translit_char(char *p, int from, int to) +{ + while (*p) { + if ((unsigned char)*p == from) + *p = to; + p = CharNext(p); + } +} +#endif + #endif /* RUBY_EVAL_INTERN_H */ diff --git a/load.c b/load.c index f642019053..5f72d5510a 100644 --- a/load.c +++ b/load.c @@ -529,8 +529,17 @@ load_failed(VALUE fname) static VALUE load_ext(VALUE path) { + VALUE result; + SCOPE_SET(NOEX_PUBLIC); - return (VALUE)dln_load(RSTRING_PTR(path)); +#if defined DLN_NEEDS_ALT_SEPARATOR && DLN_NEEDS_ALT_SEPARATOR + translit_char(RSTRING_PTR(path), '/', '\\'); +#endif + result = (VALUE)dln_load(RSTRING_PTR(path)); +#if defined DLN_NEEDS_ALT_SEPARATOR && DLN_NEEDS_ALT_SEPARATOR + translit_char(RSTRING_PTR(path), '\\', '/'); +#endif + return result; } VALUE diff --git a/ruby.c b/ruby.c index 950c3e1ce0..5fdcb67c6b 100644 --- a/ruby.c +++ b/ruby.c @@ -166,22 +166,6 @@ usage(const char *name) VALUE rb_get_load_path(void); -#ifndef CharNext /* defined as CharNext[AW] on Windows. */ -#define CharNext(p) ((p) + mblen(p, RUBY_MBCHAR_MAXSIZE)) -#endif - -#if defined DOSISH || defined __CYGWIN__ -static inline void -translate_char(char *p, int from, int to) -{ - while (*p) { - if ((unsigned char)*p == from) - *p = to; - p = CharNext(p); - } -} -#endif - #if defined _WIN32 || defined __CYGWIN__ || defined __SYMBIAN32__ static VALUE rubylib_mangled_path(const char *s, unsigned int l) @@ -206,7 +190,7 @@ rubylib_mangled_path(const char *s, unsigned int l) if (newl == 0 || oldl == 0) { rb_fatal("malformed RUBYLIB_PREFIX"); } - translate_char(newp, '\\', '/'); + translit_char(newp, '\\', '/'); } else { notfound = 1; @@ -370,7 +354,7 @@ ruby_init_loadpath_safe(int safe_level) libpath[sizeof(libpath) - 1] = '\0'; #if defined DOSISH - translate_char(libpath, '\\', '/'); + translit_char(libpath, '\\', '/'); #elif defined __CYGWIN__ { char rubylib[FILENAME_MAX]; @@ -1270,7 +1254,7 @@ process_options(VALUE arg) opt->script_name = rb_str_new_cstr(opt->script); opt->script = RSTRING_PTR(opt->script_name); #if defined DOSISH || defined __CYGWIN__ - translate_char(RSTRING_PTR(opt->script_name), '\\', '/'); + translit_char(RSTRING_PTR(opt->script_name), '\\', '/'); #endif rb_obj_freeze(opt->script_name); diff --git a/symbian/setup b/symbian/setup index cb28157b69..c3ce317ad5 100644 --- a/symbian/setup +++ b/symbian/setup @@ -165,6 +165,7 @@ define config_h @echo>>$(1) #define USE_ELF 1 @echo>>$(1) #define DLEXT_MAXLEN 4 @echo>>$(1) #define DLEXT ".dll" +@echo>>$(1) #define DLN_NEEDS_ALT_SEPARATOR 1 @echo>>$(1) #define RUBY_LIB "C:/Data/Ruby/lib/$(MAJOR).$(MINOR).$(TEENY)" @echo>>$(1) #define RUBY_SITE_LIB "E:/Data/Ruby/lib" @echo>>$(1) #define RUBY_SITE_LIB2 "E:/Data/Ruby/lib/$(MAJOR).$(MINOR).$(TEENY)"