diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/extmk.rb.in | 2 | ||||
-rw-r--r-- | ext/socket/extconf.rb | 2 | ||||
-rw-r--r-- | ext/socket/getaddrinfo.c | 4 | ||||
-rw-r--r-- | ext/socket/socket.c | 45 | ||||
-rw-r--r-- | ext/tk/lib/tktext.rb | 39 |
5 files changed, 51 insertions, 41 deletions
diff --git a/ext/extmk.rb.in b/ext/extmk.rb.in index 4336fdb51f..cbe0e6e5fa 100644 --- a/ext/extmk.rb.in +++ b/ext/extmk.rb.in @@ -501,7 +501,7 @@ def extmake(target) $objs = nil $local_flags = "" case RUBY_PLATFORM - when /cygwin|beos|openstep|nextstep|rhapsody|i386-os2_emx/ + when /cygwin|beos|openstep|nextstep|rhapsody|macos|i386-os2_emx/ $libs = "" when /mswin32/ $LIBEXT = "lib" diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb index 6a2937bb3f..1adb7cc1b5 100644 --- a/ext/socket/extconf.rb +++ b/ext/socket/extconf.rb @@ -6,6 +6,7 @@ case PLATFORM when /mswin32/ test_func = "WSACleanup" have_library("wsock32", "WSACleanup") + have_func("closesocket") when /cygwin/ # $LDFLAGS << " -L/usr/lib" if File.directory?("/usr/lib") # $CFLAGS << " -I/usr/include" @@ -14,6 +15,7 @@ when /cygwin/ when /beos/ test_func = "socket" have_library("net", "socket") + have_func("closesocket") when /i386-os2_emx/ test_func = "socket" have_library("socket", "socket") diff --git a/ext/socket/getaddrinfo.c b/ext/socket/getaddrinfo.c index 0b9d9b6afc..c312b92705 100644 --- a/ext/socket/getaddrinfo.c +++ b/ext/socket/getaddrinfo.c @@ -421,7 +421,11 @@ getaddrinfo(hostname, servname, hints, res) s = socket(afd->a_af, SOCK_DGRAM, 0); if (s < 0) continue; +#if defined(HAVE_CLOSESOCKET) + closesocket(s); +#else close(s); +#endif if (pai->ai_flags & AI_PASSIVE) { GET_AI(cur->ai_next, afd, afd->a_addrany, port); diff --git a/ext/socket/socket.c b/ext/socket/socket.c index aee13a1a19..2ad653cc4a 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -181,7 +181,7 @@ bsock_close_read(sock) rb_thread_fd_close(fileno(fptr->f)); fptr->mode &= ~FMODE_READABLE; #ifdef NT - free(fptr->f); + myfdclose(fptr->f); #else fclose(fptr->f); #endif @@ -207,7 +207,7 @@ bsock_close_write(sock) shutdown(fileno(fptr->f2), 1); fptr->mode &= ~FMODE_WRITABLE; #ifdef NT - free(fptr->f2); + myfdclose(fptr->f2); #else fclose(fptr->f2); #endif @@ -256,7 +256,8 @@ bsock_getsockopt(sock, lev, optname) VALUE sock, lev, optname; { #if !defined(__BEOS__) - int level, option, len; + int level, option; + socklen_t len; char *buf; OpenFile *fptr; @@ -280,7 +281,7 @@ bsock_getsockname(sock) VALUE sock; { char buf[1024]; - int len = sizeof buf; + socklen_t len = sizeof buf; OpenFile *fptr; GetOpenFile(sock, fptr); @@ -294,7 +295,7 @@ bsock_getpeername(sock) VALUE sock; { char buf[1024]; - int len = sizeof buf; + socklen_t len = sizeof buf; OpenFile *fptr; GetOpenFile(sock, fptr); @@ -374,9 +375,9 @@ s_recv(sock, argc, argv, from) OpenFile *fptr; VALUE str; char buf[1024]; - int fd, alen = sizeof buf; + socklen_t alen = sizeof buf; VALUE len, flg; - int flags; + int fd, flags; rb_scan_args(argc, argv, "11", &len, &flg); @@ -763,7 +764,11 @@ open_inet(class, h, serv, type) } if (status < 0) { +#if defined(HAVE_CLOSESOCKET) + closesocket(fd); +#else close(fd); +#endif fd = -1; continue; } else @@ -771,7 +776,11 @@ open_inet(class, h, serv, type) } if (status < 0) { if (fd >= 0) +#if defined(HAVE_CLOSESOCKET) + closesocket(fd); +#else close(fd); +#endif freeaddrinfo(res0); rb_sys_fail(syscall); } @@ -956,7 +965,7 @@ s_accept(class, fd, sockaddr, len) VALUE class; int fd; struct sockaddr *sockaddr; - int *len; + socklen_t *len; { int fd2; @@ -989,7 +998,7 @@ tcp_accept(sock) { OpenFile *fptr; struct sockaddr_storage from; - int fromlen; + socklen_t fromlen; GetOpenFile(sock, fptr); fromlen = sizeof(from); @@ -1037,7 +1046,11 @@ open_unix(class, path, server) } if (status < 0) { +#if defined(HAVE_CLOSESOCKET) + closesocket(fd); +#else close(fd); +#endif rb_sys_fail(sockaddr.sun_path); } @@ -1057,7 +1070,7 @@ ip_addr(sock) { OpenFile *fptr; struct sockaddr_storage addr; - int len = sizeof addr; + socklen_t len = sizeof addr; GetOpenFile(sock, fptr); @@ -1072,7 +1085,7 @@ ip_peeraddr(sock) { OpenFile *fptr; struct sockaddr_storage addr; - int len = sizeof addr; + socklen_t len = sizeof addr; GetOpenFile(sock, fptr); @@ -1231,7 +1244,7 @@ unix_path(sock) GetOpenFile(sock, fptr); if (fptr->path == 0) { struct sockaddr_un addr; - int len = sizeof(addr); + socklen_t len = sizeof(addr); if (getsockname(fileno(fptr->f), (struct sockaddr*)&addr, &len) < 0) rb_sys_fail(0); fptr->path = strdup(addr.sun_path); @@ -1261,7 +1274,7 @@ unix_accept(sock) { OpenFile *fptr; struct sockaddr_un from; - int fromlen; + socklen_t fromlen; GetOpenFile(sock, fptr); fromlen = sizeof(struct sockaddr_un); @@ -1282,7 +1295,7 @@ unix_addr(sock) { OpenFile *fptr; struct sockaddr_un addr; - int len = sizeof addr; + socklen_t len = sizeof addr; GetOpenFile(sock, fptr); @@ -1297,7 +1310,7 @@ unix_peeraddr(sock) { OpenFile *fptr; struct sockaddr_un addr; - int len = sizeof addr; + socklen_t len = sizeof addr; GetOpenFile(sock, fptr); @@ -1500,7 +1513,7 @@ sock_accept(sock) OpenFile *fptr; VALUE sock2; char buf[1024]; - int len = sizeof buf; + socklen_t len = sizeof buf; GetOpenFile(sock, fptr); sock2 = s_accept(rb_cSocket,fileno(fptr->f),(struct sockaddr*)buf,&len); diff --git a/ext/tk/lib/tktext.rb b/ext/tk/lib/tktext.rb index e1939af5fe..2b5fb9138e 100644 --- a/ext/tk/lib/tktext.rb +++ b/ext/tk/lib/tktext.rb @@ -428,15 +428,9 @@ class TkText<TkTextWin rsearch_with_length(pat,start,stop)[0] end - def dump(type_info, *index) - args = type_info.collect{|inf| - if inf.kind_of? Array - inf[0] = '-' + inf[0] - inf - else - '-' + inf - end - }.flatten + def dump(type_info, *index, &block) + args = type_info.collect{|inf| '-' + inf} + args << '-command' << Proc.new(&block) if iterator? str = tk_send('dump', *(args + index)) result = [] sel = nil @@ -546,26 +540,23 @@ class TkText<TkTextWin end private :_retrieve_backslashed_text - def dump_all(*index) - dump(['all'], *index) + def dump_all(*index, &block) + dump(['all'], *index, &block) end - def dump_command(cmd, *index) - dump([['command', cmd]], *index) + def dump_mark(*index, &block) + dump(['mark'], *index, &block) end - def dump_mark(*index) - dump(['mark'], *index) + def dump_tag(*index, &block) + dump(['tag'], *index, &block) end - def dump_tag(*index) - dump(['tag'], *index) + def dump_text(*index, &block) + dump(['text'], *index, &block) end - def dump_text(*index) - dump(['text'], *index) + def dump_window(*index, &block) + dump(['window'], *index, &block) end - def dump_window(*index) - dump(['window'], *index) - end - def dump_image(*index) - dump(['image'], *index) + def dump_image(*index, &block) + dump(['image'], *index, &block) end end |