山本です。 >ちょっと今、個々のパッチの中身まで見ている余裕がないのですが、 >一時的でも警告が出るのはあまりうれしくないので、そういう微妙 >なケースは元のまま、というわけにはいきませんでしょうか。上記 >の(1)および(2)は徐々に直せば良いと思うので問題ありません。 部分的に戻すのはちょっと・・・ミスが入りそうで怖いです。警告はほとんど ./ruby/dln.c(1622) : warning C4090: 'function' : 'const' 修飾子は異なります。 ./ruby/dln.c(1622) : warning C4024: 'dln_find_1' : の型が 1 の仮引数および実引 数と異なります。 といった const に関係するもので、は下のパッチで消せました。こういうパッチは 別にコミットしたかったので、十分チェックしてそれなりに信頼できるものを まずコミットしたかったのです。 # 個人的には、移行に伴ってバグが入るのはまずいですが、警告が出るぐらいは # しかたないと思います。 Index: dln.c =================================================================== --- dln.c (revision 3) +++ dln.c (working copy) @@ -1603,7 +1603,7 @@ return 0; /* dummy return */ } -static char *dln_find_1(char *fname, char *path, int exe_flag); +static char *dln_find_1(const char *fname, const char *path, int exe_flag); char * dln_find_exe(const char *fname, const char *path) @@ -1665,31 +1665,33 @@ static char fbuf[MAXPATHLEN]; static char * -dln_find_1(char *fname, char *path, int exe_flag /* non 0 if looking for executable. */) +dln_find_1(const char *fname, const char *path, int exe_flag /* non 0 if looking for executable. */) { - register char *dp; - register char *ep; + register const char *dp; + register const char *ep; register char *bp; struct stat st; #ifdef __MACOS__ const char* mac_fullpath; #endif - if (!fname) return fname; - if (fname[0] == '/') return fname; - if (strncmp("./", fname, 2) == 0 || strncmp("../", fname, 3) == 0) - return fname; - if (exe_flag && strchr(fname, '/')) return fname; +#define RETURN_IF(expr) if (expr) return (char *)fname; + + RETURN_IF(!fname); + RETURN_IF(fname[0] == '/'); + RETURN_IF(strncmp("./", fname, 2) == 0 || strncmp("../", fname, 3) == 0); + RETURN_IF(exe_flag && strchr(fname, '/')); #ifdef DOSISH - if (fname[0] == '\\') return fname; + RETURN_IF(fname[0] == '\\'); # ifdef DOSISH_DRIVE_LETTER - if (strlen(fname) > 2 && fname[1] == ':') return fname; + RETURN_IF(strlen(fname) > 2 && fname[1] == ':'); # endif - if (strncmp(".\\", fname, 2) == 0 || strncmp("..\\", fname, 3) == 0) - return fname; - if (exe_flag && strchr(fname, '\\')) return fname; + RETURN_IF(strncmp(".\\", fname, 2) == 0 || strncmp("..\\", fname, 3) == 0); + RETURN_IF(exe_flag && strchr(fname, '\\')); #endif +#undef RETURN_IF + for (dp = path;; dp = ++ep) { register int l; int i; Index: eval.c =================================================================== --- eval.c (revision 8) +++ eval.c (working copy) @@ -1043,7 +1043,7 @@ static VALUE massign _((VALUE,NODE*,VALUE,int)); static void assign _((VALUE,NODE*,VALUE,int)); -static int formal_assign _((VALUE, NODE*, int, VALUE*, VALUE*)); +static int formal_assign _((VALUE, NODE*, int, const VALUE*, VALUE*)); typedef struct event_hook { rb_event_hook_func_t func; @@ -5335,7 +5335,7 @@ */ static VALUE -rb_method_missing(int argc, VALUE *argv, VALUE obj) +rb_method_missing(int argc, const VALUE *argv, VALUE obj) { ID id; VALUE exc = rb_eNoMethodError; @@ -5410,7 +5410,7 @@ } static inline VALUE -call_cfunc(VALUE (*func) (/* ??? */), VALUE recv, int len, int argc, VALUE *argv) +call_cfunc(VALUE (*func) (/* ??? */), VALUE recv, int len, int argc, const VALUE *argv) { if (len >= 0 && argc != len) { rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", @@ -5494,7 +5494,7 @@ } static int -formal_assign(VALUE recv, NODE *node, int argc, VALUE *argv, VALUE *local_vars) +formal_assign(VALUE recv, NODE *node, int argc, const VALUE *argv, VALUE *local_vars) { int i; int nopt = 0; @@ -5567,7 +5567,7 @@ static VALUE rb_call0(VALUE klass, VALUE recv, ID id, ID oid, - int argc /* OK */, VALUE *argv /* OK */, NODE *volatile body, int flags) + int argc /* OK */, const VALUE *argv /* OK */, NODE *volatile body, int flags) { NODE *b2; /* OK */ volatile VALUE result = Qnil; Index: io.c =================================================================== --- io.c (revision 7) +++ io.c (working copy) @@ -2632,7 +2632,7 @@ } static VALUE -rb_file_sysopen_internal(VALUE io, char *fname, int flags, int mode) +rb_file_sysopen_internal(VALUE io, const char *fname, int flags, int mode) { OpenFile *fptr; Index: ruby.c =================================================================== --- ruby.c (revision 7) +++ ruby.c (working copy) @@ -118,7 +118,7 @@ #if defined _WIN32 || defined __CYGWIN__ || defined __DJGPP__ static char * -rubylib_mangle(char *s, unsigned int l) +rubylib_mangle(const char *s, unsigned int l) { static char *newp, *oldp; static int newl, oldl, notfound;