* transcode.c (rb_econv_open): fix memory leak.
(rb_econv_close): ditto. fixed by shinichiro.h. [ruby-dev:35880] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18710 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
21ba5836e6
commit
8f3e88c432
@ -1,3 +1,9 @@
|
|||||||
|
Wed Aug 20 02:27:42 2008 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* transcode.c (rb_econv_open): fix memory leak.
|
||||||
|
(rb_econv_close): ditto.
|
||||||
|
fixed by shinichiro.h. [ruby-dev:35880]
|
||||||
|
|
||||||
Tue Aug 19 21:50:43 2008 Tanaka Akira <akr@fsij.org>
|
Tue Aug 19 21:50:43 2008 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* include/ruby/io.h (rb_fopen): declaration removed.
|
* include/ruby/io.h (rb_fopen): declaration removed.
|
||||||
|
15
transcode.c
15
transcode.c
@ -743,14 +743,18 @@ rb_econv_open(const char *from, const char *to, int flags)
|
|||||||
|
|
||||||
num_trans = transcode_search_path(from, to, trans_open_i, (void *)&entries);
|
num_trans = transcode_search_path(from, to, trans_open_i, (void *)&entries);
|
||||||
|
|
||||||
if (num_trans < 0 || !entries)
|
if (num_trans < 0 || !entries) {
|
||||||
|
xfree(entries);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (flags & (ECONV_CRLF_NEWLINE_ENCODER|ECONV_CR_NEWLINE_ENCODER)) {
|
if (flags & (ECONV_CRLF_NEWLINE_ENCODER|ECONV_CR_NEWLINE_ENCODER)) {
|
||||||
const char *name = (flags & ECONV_CRLF_NEWLINE_ENCODER) ? "crlf_newline" : "cr_newline";
|
const char *name = (flags & ECONV_CRLF_NEWLINE_ENCODER) ? "crlf_newline" : "cr_newline";
|
||||||
transcoder_entry_t *e = get_transcoder_entry("", name);
|
transcoder_entry_t *e = get_transcoder_entry("", name);
|
||||||
if (!e)
|
if (!e) {
|
||||||
|
xfree(entries);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
MEMMOVE(entries+1, entries, transcoder_entry_t *, num_trans);
|
MEMMOVE(entries+1, entries, transcoder_entry_t *, num_trans);
|
||||||
entries[0] = e;
|
entries[0] = e;
|
||||||
num_trans++;
|
num_trans++;
|
||||||
@ -758,12 +762,15 @@ rb_econv_open(const char *from, const char *to, int flags)
|
|||||||
|
|
||||||
if (flags & ECONV_UNIVERSAL_NEWLINE_DECODER) {
|
if (flags & ECONV_UNIVERSAL_NEWLINE_DECODER) {
|
||||||
transcoder_entry_t *e = get_transcoder_entry("universal_newline", "");
|
transcoder_entry_t *e = get_transcoder_entry("universal_newline", "");
|
||||||
if (!e)
|
if (!e) {
|
||||||
|
xfree(entries);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
entries[num_trans++] = e;
|
entries[num_trans++] = e;
|
||||||
}
|
}
|
||||||
|
|
||||||
ec = rb_econv_open_by_transcoder_entries(num_trans, entries);
|
ec = rb_econv_open_by_transcoder_entries(num_trans, entries);
|
||||||
|
xfree(entries);
|
||||||
if (!ec)
|
if (!ec)
|
||||||
rb_raise(rb_eArgError, "encoding conversion not supported (from %s to %s)", from, to);
|
rb_raise(rb_eArgError, "encoding conversion not supported (from %s to %s)", from, to);
|
||||||
|
|
||||||
@ -1200,7 +1207,7 @@ rb_econv_close(rb_econv_t *ec)
|
|||||||
if (ec->elems[i].out_buf_start)
|
if (ec->elems[i].out_buf_start)
|
||||||
xfree(ec->elems[i].out_buf_start);
|
xfree(ec->elems[i].out_buf_start);
|
||||||
}
|
}
|
||||||
|
xfree(ec->in_buf_start);
|
||||||
xfree(ec->elems);
|
xfree(ec->elems);
|
||||||
xfree(ec);
|
xfree(ec);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user