diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/Setup | 1 | ||||
-rw-r--r-- | ext/Setup.dj | 4 | ||||
-rw-r--r-- | ext/aix_mksym.rb | 2 | ||||
-rw-r--r-- | ext/gdbm/MANIFEST | 10 | ||||
-rw-r--r-- | ext/socket/addrinfo.h | 5 | ||||
-rw-r--r-- | ext/socket/getaddrinfo.c | 12 | ||||
-rw-r--r-- | ext/socket/getnameinfo.c | 10 | ||||
-rw-r--r-- | ext/socket/socket.c | 219 | ||||
-rw-r--r-- | ext/tcltklib/tcltklib.c | 173 | ||||
-rw-r--r-- | ext/tk/lib/tk.rb | 3 | ||||
-rw-r--r-- | ext/tk/lib/tktext.rb | 4 | ||||
-rw-r--r-- | ext/tk/tkutil.c | 2 |
12 files changed, 237 insertions, 208 deletions
@@ -1,6 +1,5 @@ #option nodynamic -interbase #GD #curses #dbm diff --git a/ext/Setup.dj b/ext/Setup.dj index 25adea2035..cf25c07e6b 100644 --- a/ext/Setup.dj +++ b/ext/Setup.dj @@ -3,10 +3,12 @@ option nodynamic #GD #curses dbm +gdbm #etc fcntl -kconv +nkf marshal md5 +sdbm #socket #tkutil diff --git a/ext/aix_mksym.rb b/ext/aix_mksym.rb index 2d5ad1ae9e..7e1af283dc 100644 --- a/ext/aix_mksym.rb +++ b/ext/aix_mksym.rb @@ -30,4 +30,4 @@ def extract(nm, out) exp.close nm.close end -extract(open("|/usr/ccs/bin/nm -p ../*.o"), "../ruby.imp") +extract(open("|/usr/ccs/bin/nm -p ../libruby.a"), "../ruby.imp") diff --git a/ext/gdbm/MANIFEST b/ext/gdbm/MANIFEST index c0f7b2cb7c..f4a8796d18 100644 --- a/ext/gdbm/MANIFEST +++ b/ext/gdbm/MANIFEST @@ -1,5 +1,5 @@ -[00mMANIFEST[00m -[00mREADME[00m -[00mdepend[00m -[00mextconf.rb[00m -[00mgdbm.c[00m +MANIFEST +README +depend +extconf.rb +gdbm.c diff --git a/ext/socket/addrinfo.h b/ext/socket/addrinfo.h index 6ea4a823f6..724f800c79 100644 --- a/ext/socket/addrinfo.h +++ b/ext/socket/addrinfo.h @@ -125,6 +125,11 @@ #define NI_NUMERICSERV 0x00000008 #define NI_DGRAM 0x00000010 +#ifdef NT +#define IN_EXPERIMENTAL(x) 0 +#define IN_LOOPBACKNET 0 +#endif + struct addrinfo { int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ int ai_family; /* PF_xxx */ diff --git a/ext/socket/getaddrinfo.c b/ext/socket/getaddrinfo.c index e9ff9235e1..7ae41e6030 100644 --- a/ext/socket/getaddrinfo.c +++ b/ext/socket/getaddrinfo.c @@ -39,22 +39,28 @@ */ #include <sys/types.h> +#ifndef NT #include <sys/param.h> +#endif #ifdef HAVE_SYSCTL_H #include <sys/sysctl.h> #endif +#ifndef NT #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <arpa/nameser.h> #include <netdb.h> #include <resolv.h> +#include <unistd.h> +#else +#include <winsock2.h> +#endif #include <string.h> #include <stdio.h> #include <stdlib.h> #include <stddef.h> #include <ctype.h> -#include <unistd.h> #include "config.h" #include "addrinfo.h" @@ -355,7 +361,7 @@ getaddrinfo(hostname, servname, hints, res) pai->ai_socktype = SOCK_DGRAM; pai->ai_protocol = IPPROTO_UDP; } - port = htons(atoi(servname)); + port = htons((unsigned short)atoi(servname)); } else { struct servent *sp; char *proto; @@ -561,8 +567,10 @@ get_addr(hostname, af, res, pai, port0) int i, error = 0, h_error; char *ap; #ifndef INET6 +#ifndef NT extern int h_errno; #endif +#endif top = NULL; sentinel.ai_next = NULL; diff --git a/ext/socket/getnameinfo.c b/ext/socket/getnameinfo.c index d4d6bcf595..f4da5bbf7a 100644 --- a/ext/socket/getnameinfo.c +++ b/ext/socket/getnameinfo.c @@ -35,12 +35,20 @@ */ #include <sys/types.h> +#ifndef NT #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <arpa/nameser.h> #include <netdb.h> #include <resolv.h> +#endif +#ifdef NT +#include <winsock2.h> +#include <stdio.h> +#define snprintf _snprintf +#endif + #include <string.h> #include <stddef.h> @@ -125,7 +133,9 @@ getnameinfo(sa, salen, host, hostlen, serv, servlen, flags) int h_error; char numserv[512]; char numaddr[512]; +#ifndef NT extern int h_errno; +#endif if (sa == NULL) return ENI_NOSOCKET; diff --git a/ext/socket/socket.c b/ext/socket/socket.c index 980c00bb01..538a7ac7dc 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -84,12 +84,16 @@ sock_finalize(fptr) OpenFile *fptr; { SOCKET s; + extern int errno; if (!fptr->f) return; - s = fileno(fptr->f); - free(fptr->f); - if (fptr->f2) free(fptr->f2); + + myfdclose(fptr->f); + if(fptr->f2) myfdclose(fptr->f); +/* + s = get_osfhandle(fileno(fptr->f)); closesocket(s); +*/ } #endif @@ -423,19 +427,110 @@ bsock_recv(argc, argv, sock) return s_recv(sock, argc, argv, RECV_RECV); } +static void +mkipaddr0(addr, buf, len) + struct sockaddr *addr; + char *buf; + size_t len; +{ + int error; + + error = getnameinfo(addr, SA_LEN(addr), buf, len, NULL, 0, + NI_NUMERICHOST); + if (error) { + rb_raise(rb_eSocket, "%s", gai_strerror(error)); + } +} + static VALUE mkipaddr(addr) struct sockaddr *addr; { char buf[1024]; + + mkipaddr0(addr, buf, sizeof(buf)); + return rb_str_new2(buf); +} + +static void +mkinetaddr(host, buf, len) + long host; + char *buf; + size_t len; +{ + struct sockaddr_in sin; + + MEMZERO(&sin, struct sockaddr_in, 1); + sin.sin_family = AF_INET; + SET_SIN_LEN(&sin, sizeof(sin)); + sin.sin_addr.s_addr = host; + mkipaddr0((struct sockaddr *)&sin, buf, len); +} + +static struct addrinfo* +ip_addrsetup(host, port) + VALUE host, port; +{ + struct addrinfo hints, *res; + char *hostp, *portp; int error; + char hbuf[1024], pbuf[16]; - error = getnameinfo(addr, SA_LEN(addr), buf, sizeof(buf), NULL, 0, - NI_NUMERICHOST); + if (NIL_P(host)) { + hostp = NULL; + } + else if (rb_obj_is_kind_of(host, rb_cInteger)) { + struct sockaddr_in sin; + long i = NUM2LONG(host); + + mkinetaddr(htonl(i), hbuf, sizeof(hbuf)); + } + else { + char *name = STR2CSTR(host); + + if (*name == 0) { + mkinetaddr(INADDR_ANY, hbuf, sizeof(hbuf)); + } + if (name[0] == '<' && strcmp(name, "<broadcast>") == 0) { + mkinetaddr(INADDR_BROADCAST, hbuf, sizeof(hbuf)); + } + else { + strcpy(hbuf, name); + } + } + hostp = hbuf; + if (NIL_P(port)) { + portp = 0; + } + else if (FIXNUM_P(port)) { + snprintf(pbuf, sizeof(pbuf), "%d", FIX2INT(port)); + portp = pbuf; + } + else { + portp = STR2CSTR(port); + } + + MEMZERO(&hints, struct addrinfo, 1); + hints.ai_family = PF_UNSPEC; + hints.ai_socktype = SOCK_DGRAM; + error = getaddrinfo(hostp, portp, &hints, &res); if (error) { rb_raise(rb_eSocket, "%s", gai_strerror(error)); } - return rb_str_new2(buf); + + return res; +} + +static void +setipaddr(name, addr) + VALUE name; + struct sockaddr *addr; +{ + struct addrinfo *res = ip_addrsetup(name, Qnil); + + /* just take the first one */ + memcpy(addr, res->ai_addr, res->ai_addrlen); + freeaddrinfo(res); } static VALUE @@ -480,40 +575,6 @@ ipaddr(sockaddr) } static void -setipaddr(name, addr) - char *name; - struct sockaddr *addr; -{ - struct addrinfo hints, *res; - struct sockaddr_in *sin; - int error; - - sin = (struct sockaddr_in *)addr; - if (name[0] == 0) { - MEMZERO(sin, struct sockaddr_in, 1); - sin->sin_family = AF_INET; - SET_SIN_LEN(sin, sizeof(*sin)); - sin->sin_addr.s_addr = INADDR_ANY; - } - else if (name[0] == '<' && strcmp(name, "<broadcast>") == 0) { - sin->sin_family = AF_INET; - SET_SIN_LEN(sin, sizeof(*sin)); - sin->sin_addr.s_addr = INADDR_BROADCAST; - } - else { - MEMZERO(&hints, struct addrinfo, 1); - hints.ai_family = PF_UNSPEC; - error = getaddrinfo(name, NULL, &hints, &res); - if (error) { - rb_raise(rb_eSocket, "%s", gai_strerror(error)); - } - /* just take the first one */ - memcpy(addr, res->ai_addr, res->ai_addrlen); - freeaddrinfo(res); - } -} - -static void thread_write_select(fd) int fd; { @@ -632,8 +693,8 @@ open_inet(class, h, serv, type) continue; if (type == INET_SERVER) { status = 1; - setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&status, - sizeof(status)); + setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, + (char*)&status, sizeof(status)); status = bind(fd, res->ai_addr, res->ai_addrlen); syscall = "bind(2)"; } @@ -713,7 +774,7 @@ tcp_s_gethostbyname(obj, host) sin->sin_addr.s_addr = htonl(i); } else { - setipaddr(STR2CSTR(host), (struct sockaddr *)&addr); + setipaddr(host, &addr); } switch (addr.ss_family) { case AF_INET: @@ -947,19 +1008,7 @@ ip_s_getaddress(obj, host) { struct sockaddr_storage addr; - if (rb_obj_is_kind_of(host, rb_cInteger)) { - long i = NUM2LONG(host); - struct sockaddr_in *sin; - sin = (struct sockaddr_in *)&addr; - MEMZERO(sin, struct sockaddr_in, 1); - sin->sin_family = AF_INET; - SET_SIN_LEN(sin, sizeof(*sin)); - sin->sin_addr.s_addr = htonl(i); - } - else { - setipaddr(STR2CSTR(host), (struct sockaddr *)&addr); - } - + setipaddr(host, &addr); return mkipaddr((struct sockaddr *)&addr); } @@ -978,56 +1027,6 @@ udp_s_open(argc, argv, class) return sock_new(class, socket(socktype, SOCK_DGRAM, 0)); } -static struct addrinfo * -udp_addrsetup(fptr, host, port) - OpenFile *fptr; /* use for AF check? */ - VALUE host, port; -{ - struct addrinfo hints, *res; - int error; - char *hostp, *portp; - char hbuf[1024], pbuf[1024]; - - if (NIL_P(host)) { - hostp = NULL; - } - else if (rb_obj_is_kind_of(host, rb_cInteger)) { - struct sockaddr_in sin; - long i = NUM2LONG(host); - MEMZERO(&sin, struct sockaddr_in, 1); - sin.sin_family = AF_INET; - SET_SIN_LEN(&sin, sizeof(sin)); - sin.sin_addr.s_addr = htonl(i); - error = getnameinfo((struct sockaddr *)&sin, SIN_LEN(&sin), - hbuf, sizeof(hbuf), NULL, 0, NI_NUMERICHOST); - if (error) { - rb_raise(rb_eSocket, "%s", gai_strerror(error)); - } - hostp = hbuf; - } - else { - strcpy(hbuf, STR2CSTR(host)); - hostp = hbuf; - } - if (FIXNUM_P(port)) { - snprintf(pbuf, sizeof(pbuf), "%d", FIX2INT(port)); - portp = pbuf; - } - else { - portp = STR2CSTR(port); - } - - MEMZERO(&hints, struct addrinfo, 1); - hints.ai_family = PF_UNSPEC; - hints.ai_socktype = SOCK_DGRAM; - error = getaddrinfo(hostp, portp, &hints, &res); - if (error) { - rb_raise(rb_eSocket, "%s", gai_strerror(error)); - } - - return res; -} - static VALUE udp_connect(sock, host, port) VALUE sock, host, port; @@ -1038,7 +1037,7 @@ udp_connect(sock, host, port) GetOpenFile(sock, fptr); fd = fileno(fptr->f); - res0 = udp_addrsetup(fptr, host, port); + res0 = ip_addrsetup(host, port); for (res = res0; res; res = res->ai_next) { if (ruby_connect(fd, res->ai_addr, res->ai_addrlen, 0) >= 0) { freeaddrinfo(res0); @@ -1059,7 +1058,7 @@ udp_bind(sock, host, port) struct addrinfo *res0, *res; GetOpenFile(sock, fptr); - res0 = udp_addrsetup(fptr, host, port); + res0 = ip_addrsetup(host, port); for (res = res0; res; res = res->ai_next) { if (bind(fileno(fptr->f), res->ai_addr, res->ai_addrlen) < 0) { continue; @@ -1092,7 +1091,7 @@ udp_send(argc, argv, sock) rb_scan_args(argc, argv, "4", &mesg, &flags, &host, &port); GetOpenFile(sock, fptr); - res0 = udp_addrsetup(fptr, host, port); + res0 = ip_addrsetup(host, port); f = GetWriteFile(fptr); m = rb_str2cstr(mesg, &mlen); for (res = res0; res; res = res->ai_next) { @@ -1532,7 +1531,7 @@ sock_s_gethostbyname(obj, host) sin->sin_addr.s_addr = htonl(i); } else { - setipaddr(STR2CSTR(host), (struct sockaddr *)&addr); + setipaddr(host, (struct sockaddr *)&addr); } switch (addr.ss_family) { case AF_INET: diff --git a/ext/tcltklib/tcltklib.c b/ext/tcltklib/tcltklib.c index ffc6f2f57c..5f6f9a0c02 100644 --- a/ext/tcltklib/tcltklib.c +++ b/ext/tcltklib/tcltklib.c @@ -27,8 +27,8 @@ fprintf(stderr, ARG1, ARG2); fprintf(stderr, "\n"); } */ /* for callback break & continue */ -VALUE eTkCallbackBreak; -VALUE eTkCallbackContinue; +static VALUE eTkCallbackBreak; +static VALUE eTkCallbackContinue; /* from tkAppInit.c */ @@ -49,15 +49,18 @@ typedef struct { } Tk_TimerData; /* timer callback */ -void _timer_for_tcl(clientData) +static void +_timer_for_tcl(clientData) ClientData clientData; { Tk_TimerData *timer = (Tk_TimerData*)clientData; timer->flag = 0; CHECK_INTS; - if (!rb_thread_critical) rb_thread_schedule(); + if (timer->flag) { + Tk_DeleteTimerHandler(timer->token); + } timer->token = Tk_CreateTimerHandler(200, _timer_for_tcl, (ClientData)timer); timer->flag = 1; @@ -70,7 +73,7 @@ lib_mainloop(self) { Tk_TimerData *timer; - timer = (Tk_TimerData *) ckalloc(sizeof(Tk_TimerData)); + timer = (Tk_TimerData *)ALLOC(Tk_TimerData); timer->flag = 0; timer->token = Tk_CreateTimerHandler(200, _timer_for_tcl, (ClientData)timer); @@ -79,12 +82,14 @@ lib_mainloop(self) DUMP1("start Tk_Mainloop"); while (Tk_GetNumMainWindows() > 0) { Tcl_DoOneEvent(0); + CHECK_INTS; } DUMP1("stop Tk_Mainloop"); if (timer->flag) { - Tk_DeleteTimerHandler(timer->token); + Tk_DeleteTimerHandler(timer->token); } + free(timer); return Qnil; } @@ -150,11 +155,11 @@ ip_ruby(clientData, interp, argc, argv) VALUE eclass = CLASS_OF(failed); Tcl_AppendResult(interp, STR2CSTR(failed), (char*)NULL); if (eclass == eTkCallbackBreak) { - return TCL_BREAK; + return TCL_BREAK; } else if (eclass == eTkCallbackContinue) { - return TCL_CONTINUE; + return TCL_CONTINUE; } else { - return TCL_ERROR; + return TCL_ERROR; } } @@ -245,7 +250,7 @@ ip_eval(self, str) DUMP2("Tcl_Eval(%s)", buf); ptr->return_value = Tcl_Eval(ptr->ip, buf); if (ptr->return_value == TCL_ERROR) { - rb_raise(rb_eRuntimeError, ptr->ip->result); + rb_raise(rb_eRuntimeError, "%s", ptr->ip->result); } DUMP2("(TCL_Eval result) %d", ptr->return_value); @@ -260,33 +265,29 @@ ip_toUTF8(self, str, encodename) VALUE str; VALUE encodename; { -#ifndef TCL_UTF_MAX - return str; -#else - Tcl_Interp *interp; - Tcl_Encoding encoding; - Tcl_DString dstr; - struct tcltkip *ptr; - char *buff1,*buff2; - - Data_Get_Struct(self,struct tcltkip, ptr); - interp = ptr->ip; +#ifdef TCL_UTF_MAX + Tcl_Interp *interp; + Tcl_Encoding encoding; + Tcl_DString dstr; + struct tcltkip *ptr; + char *buf; - encoding = Tcl_GetEncoding(interp,STR2CSTR(encodename)); - buff1 = ALLOCA_N(char,strlen(STR2CSTR(str))+1); - strcpy(buff1,STR2CSTR(str)); + Data_Get_Struct(self,struct tcltkip, ptr); + interp = ptr->ip; - Tcl_DStringInit(&dstr); - Tcl_DStringFree(&dstr); - Tcl_ExternalToUtfDString(encoding,buff1,strlen(buff1),&dstr); - buff2 = ALLOCA_N(char,Tcl_DStringLength(&dstr)+1); - strcpy(buff2,Tcl_DStringValue(&dstr)); + encoding = Tcl_GetEncoding(interp,STR2CSTR(encodename)); + buf = ALLOCA_N(char,strlen(STR2CSTR(str))+1); + strcpy(buf,STR2CSTR(str)); - Tcl_FreeEncoding(encoding); - Tcl_DStringFree(&dstr); + Tcl_DStringInit(&dstr); + Tcl_DStringFree(&dstr); + Tcl_ExternalToUtfDString(encoding,buf,strlen(buf),&dstr); + str = rb_str_new2(Tcl_DStringValue(&dstr)); - return rb_str_new2(buff2); + Tcl_FreeEncoding(encoding); + Tcl_DStringFree(&dstr); #endif + return str; } static VALUE @@ -295,33 +296,30 @@ ip_fromUTF8(self, str, encodename) VALUE str; VALUE encodename; { -#ifndef TCL_UTF_MAX - return str; -#else - Tcl_Interp *interp; - Tcl_Encoding encoding; - Tcl_DString dstr; - struct tcltkip *ptr; - char *buff1,*buff2; +#ifdef TCL_UTF_MAX + Tcl_Interp *interp; + Tcl_Encoding encoding; + Tcl_DString dstr; + struct tcltkip *ptr; + char *buf; - Data_Get_Struct(self,struct tcltkip, ptr); - interp = ptr->ip; + Data_Get_Struct(self,struct tcltkip, ptr); + interp = ptr->ip; - encoding = Tcl_GetEncoding(interp,STR2CSTR(encodename)); - buff1 = ALLOCA_N(char,strlen(STR2CSTR(str))+1); - strcpy(buff1,STR2CSTR(str)); + encoding = Tcl_GetEncoding(interp,STR2CSTR(encodename)); + buf = ALLOCA_N(char,strlen(STR2CSTR(str))+1); + strcpy(buf,STR2CSTR(str)); - Tcl_DStringInit(&dstr); - Tcl_DStringFree(&dstr); - Tcl_UtfToExternalDString(encoding,buff1,strlen(buff1),&dstr); - buff2 = ALLOCA_N(char,Tcl_DStringLength(&dstr)+1); - strcpy(buff2,Tcl_DStringValue(&dstr)); + Tcl_DStringInit(&dstr); + Tcl_DStringFree(&dstr); + Tcl_UtfToExternalDString(encoding,buf,strlen(buf),&dstr); + str = rb_str_new2(Tcl_DStringValue(&dstr)); - Tcl_FreeEncoding(encoding); - Tcl_DStringFree(&dstr); + Tcl_FreeEncoding(encoding); + Tcl_DStringFree(&dstr); - return rb_str_new2(buff2); #endif + return str; } @@ -359,24 +357,25 @@ ip_invoke(argc, argv, obj) /* memory allocation for arguments of this command */ if (object) { #if TCL_MAJOR_VERSION >= 8 - /* object interface */ - ov = (Tcl_Obj **)ALLOCA_N(Tcl_Obj *, argc+1); - for (i = 0; i < argc; ++i) { - char *s = STR2CSTR(argv[i]); - ov[i] = Tcl_NewStringObj(s, strlen(s)); - } - ov[argc] = (Tcl_Obj *)NULL; + /* object interface */ + ov = (Tcl_Obj **)ALLOCA_N(Tcl_Obj *, argc+1); + for (i = 0; i < argc; ++i) { + char *s = STR2CSTR(argv[i]); + ov[i] = Tcl_NewStringObj(s, strlen(s)); + Tcl_IncrRefCount(ov[i]); + } + ov[argc] = (Tcl_Obj *)NULL; #endif } else { /* string interface */ - av = (char **)ALLOCA_N(char *, argc+1); - for (i = 0; i < argc; ++i) { - char *s = STR2CSTR(argv[i]); - - av[i] = ALLOCA_N(char, strlen(s)+1); - strcpy(av[i], s); - } - av[argc] = (char *)NULL; + av = (char **)ALLOCA_N(char *, argc+1); + for (i = 0; i < argc; ++i) { + char *s = STR2CSTR(argv[i]); + + av[i] = ALLOCA_N(char, strlen(s)+1); + strcpy(av[i], s); + } + av[argc] = (char *)NULL; } Tcl_ResetResult(ptr->ip); @@ -384,26 +383,31 @@ ip_invoke(argc, argv, obj) /* Invoke the C procedure */ if (object) { #if TCL_MAJOR_VERSION >= 8 - int dummy; - ptr->return_value = (*info.objProc)(info.objClientData, - ptr->ip, argc, ov); - - /* get the string value from the result object */ - resultPtr = Tcl_GetObjResult(ptr->ip); - Tcl_SetResult(ptr->ip, Tcl_GetStringFromObj(resultPtr, &dummy), - TCL_VOLATILE); + int dummy; + ptr->return_value = (*info.objProc)(info.objClientData, + ptr->ip, argc, ov); + + /* get the string value from the result object */ + resultPtr = Tcl_GetObjResult(ptr->ip); + Tcl_SetResult(ptr->ip, Tcl_GetStringFromObj(resultPtr, &dummy), + TCL_VOLATILE); + + for (i=0; i<argc; i++) { + Tcl_DecrRefCount(ov[i]); + } #endif - } else { - ptr->return_value = (*info.proc)(info.clientData, - ptr->ip, argc, av); + } + else { + ptr->return_value = (*info.proc)(info.clientData, + ptr->ip, argc, av); } if (ptr->return_value == TCL_ERROR) { - rb_raise(rb_eRuntimeError, ptr->ip->result); + rb_raise(rb_eRuntimeError, "%s", ptr->ip->result); } /* pass back the result (as string) */ - return(rb_str_new2(ptr->ip->result)); + return rb_str_new2(ptr->ip->result); } /* get return code from Tcl_Eval() */ @@ -423,13 +427,14 @@ ip_retval(self) static void _macinit() { - tcl_macQdPtr = &qd; /* setup QuickDraw globals */ - Tcl_MacSetEventProc(TkMacConvertEvent); /* setup event handler */ + tcl_macQdPtr = &qd; /* setup QuickDraw globals */ + Tcl_MacSetEventProc(TkMacConvertEvent); /* setup event handler */ } #endif /*---- initialization ----*/ -void Init_tcltklib() +void +Init_tcltklib() { extern VALUE rb_argv0; /* the argv[0] */ diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb index 2aa49879fd..dae2aeb0d8 100644 --- a/ext/tk/lib/tk.rb +++ b/ext/tk/lib/tk.rb @@ -233,6 +233,7 @@ module TkComm return format("rb_out %s", id); end def uninstall_cmd(id) + id = $1 if /rb_out (c\d+)/ Tk_CMDTBL[id] = nil end private :install_cmd, :uninstall_cmd @@ -2116,7 +2117,7 @@ class TkScrollbar<TkWindow end def get - ary1 = tk_send('get', path).split + ary1 = tk_send('get').split ary2 = [] for i in ary1 ary2.push number(i) diff --git a/ext/tk/lib/tktext.rb b/ext/tk/lib/tktext.rb index 281435ef69..3dde30d60d 100644 --- a/ext/tk/lib/tktext.rb +++ b/ext/tk/lib/tktext.rb @@ -272,7 +272,7 @@ class TkText<TkTextWin end def tag_cget(tag, key) - tk_tcl2ruby tk_call @t.path, 'tag', 'cget', tag, "-#{key}" + tk_tcl2ruby tk_call @path, 'tag', 'cget', tag, "-#{key}" end def tag_configure(tag, key, val=None) @@ -289,7 +289,7 @@ class TkText<TkTextWin || key == 'latinfont' || key == 'asciifont' ) tagfont_configure({key=>val}) else - tk_call 'tag', 'configure', tag, "-#{key}", val + tk_send 'tag', 'configure', tag, "-#{key}", val end end end diff --git a/ext/tk/tkutil.c b/ext/tk/tkutil.c index e93733bb67..990c81d724 100644 --- a/ext/tk/tkutil.c +++ b/ext/tk/tkutil.c @@ -29,7 +29,7 @@ tk_s_new(argc, argv, class) { VALUE obj = rb_obj_alloc(class); - rb_funcall2(obj, rb_intern("initialize"), argc, argv); + rb_obj_call_init(obj, argc, argv); if (rb_iterator_p()) rb_obj_instance_eval(0, 0, obj); return obj; } |