summaryrefslogtreecommitdiff
path: root/ext/socket/socket.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-10-19 10:25:23 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-10-19 10:25:23 +0000
commit860bdc3b61dbcacecd4a2fb2c40cf222e91b8fd5 (patch)
tree280c20d9eec8f2500428b71e7beeeff064ad5314 /ext/socket/socket.c
parentdd09dfe3f0bc975db4b84a0e563bcdf862a7063b (diff)
* io.c (read_all): block string buffer modification during
rb_io_fread() by freezing it temporarily. [ruby-dev:24479] * dir.c (rb_push_glob): block call at once the end of method. [ruby-dev:24487] * ext/enumerator/enumerator.c (enum_each_slice): remove rb_gc_force_recycle() to prevent potential SEGV. [ruby-dev:24499] * ext/zlib/zlib.c (zstream_expand_buffer): hide internal string buffer by clearing klass. [ruby-dev:24510] * ext/socket/socket.c (sock_s_getservbyaname): protocol string might be altered. [ruby-dev:24503] * string.c (rb_str_upto): check if return value from succ is a string. [ruby-dev:24504] * io.c (rb_io_popen): get mode string via rb_io_flags_mode() to avoid mode string modification. [ruby-dev:24454] * io.c (rb_io_getline_fast): should take delim as unsigned char to distinguish EOF and '\377'. [ruby-dev:24460] * io.c (rb_io_getline): add check for RS modification. [ruby-dev:24461] * enum.c (enum_sort_by): use qsort() directly instead using rb_iterate(). [ruby-dev:24462] * enum.c (enum_each_with_index): remove rb_gc_force_recycle() to prevent access to recycled object (via continuation for example). [ruby-dev:24463] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@7071 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/socket/socket.c')
-rw-r--r--ext/socket/socket.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index 21f2bea5d3..f9a821b55d 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -2130,27 +2130,25 @@ sock_s_getservbyaname(argc, argv)
int argc;
VALUE *argv;
{
- VALUE service, protocol;
- char *proto;
+ VALUE service, proto;
struct servent *sp;
int port;
- rb_scan_args(argc, argv, "11", &service, &protocol);
- if (NIL_P(protocol)) proto = "tcp";
- else proto = StringValuePtr(protocol);
+ rb_scan_args(argc, argv, "11", &service, &proto);
+ if (NIL_P(proto)) proto = rb_str_new2("tcp");
+ else StringValue(proto);
- StringValue(service);
- sp = getservbyname((char*)RSTRING(service)->ptr, proto);
+ sp = getservbyname((char*)RSTRING(service)->ptr, RSTRING(proto)->ptr);
if (sp) {
port = ntohs(sp->s_port);
}
else {
- char *s = RSTRING(service)->ptr;
+ char *s = StringValuePtr(service);
char *end;
port = strtoul(s, &end, 0);
if (*end != '\0') {
- rb_raise(rb_eSocket, "no such service %s/%s", s, proto);
+ rb_raise(rb_eSocket, "no such service %s/%s", s, RSTRING(proto)->ptr);
}
}
return INT2FIX(port);