Project

General

Profile

Actions

Bug #625

closed

rb_io_fread does not work

Added by mame (Yusuke Endoh) over 16 years ago. Updated about 14 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
Backport:
[ruby-dev:36697]

Description

=begin
遠藤です。

DEPRECATED(int rb_getc(FILE*));
DEPRECATED(long rb_io_fread(char *, long, FILE *));
DEPRECATED(long rb_io_fwrite(const char *, long, FILE ));
DEPRECATED(int rb_read_pending(FILE
));

というのが ruby/io.h にありますが、試しにこれらを使ってみた
ところ、インタプリタがフリーズしました。

$ ../ruby -rfoo -e 'foo'
(^C が効かない)

実際、rb_io_fread が io_fread を呼び、READ_DATA_PENDING で
未初期化の rbuf_len を参照していて、まともに動くような感じ
ではないように見えました。
rb_io_fwrite も動いていないような気がします。

README.EXT に記載されていないのであれば、中途半端に残すより
削除してしまったらどうでしょうか。

以下、検証に使ったコードです。
もし使い方が間違っていたらすみません。

#include "ruby.h"
#include "ruby/io.h"

VALUE foo(VALUE self)
{
int i;
char buf[11];
FILE *fp;

fp = fopen("foo", "r+");
i = rb_io_fread(buf, 10, fp);
buf[i] = '\0';
fclose(fp);
printf(""%s"\n", buf);

/*
fp = fopen("bar", "w");
rb_io_fwrite("foobarbaz\n", 10, fp);
fflush(fp);
fclose(fp);
*/

return Qnil;
}

void Init_foo()
{
rb_define_global_function("foo", foo, 0);
}

--
Yusuke ENDOH
=end

Actions #1

Updated by mame (Yusuke Endoh) over 16 years ago

  • Priority changed from 3 to Normal

=begin

=end

Actions #2

Updated by mame (Yusuke Endoh) over 16 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
Applied in changeset r19805.
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0