diff options
| author | why <why@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-07-24 16:30:43 +0000 |
|---|---|---|
| committer | why <why@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-07-24 16:30:43 +0000 |
| commit | b0f7dd084d2b2102fc73a7136c6e3d2c13a3af03 (patch) | |
| tree | 02194bf8491c84894172a7156ffcfb088bff5181 /ext/syck/rubyext.c | |
| parent | c08873bb0882649e8b3acf386d3aea63affbbe57 (diff) | |
| download | ruby-b0f7dd084d2b2102fc73a7136c6e3d2c13a3af03.tar.gz ruby-b0f7dd084d2b2102fc73a7136c6e3d2c13a3af03.tar.xz ruby-b0f7dd084d2b2102fc73a7136c6e3d2c13a3af03.zip | |
* ext/syck/emitter.c (syck_emitter_flush): accepts count
of bytes to flush. anchor offsets now functional.
* ext/syck/syck.h (syck_emitter_flush): ditto.
* ext/syck/rubyext.c: ditto.
* ext/syck/token.c: URI escaping now supported.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@4149 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/syck/rubyext.c')
| -rw-r--r-- | ext/syck/rubyext.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/ext/syck/rubyext.c b/ext/syck/rubyext.c index 854762c59..a87edad11 100644 --- a/ext/syck/rubyext.c +++ b/ext/syck/rubyext.c @@ -1025,7 +1025,12 @@ rb_syck_output_handler( emitter, str, len ) char *str; long len; { - rb_str_cat( (VALUE)emitter->bonus, str, len ); + VALUE dest = (VALUE)emitter->bonus; + if ( rb_respond_to( dest, rb_intern("to_str") ) ) { + rb_str_cat( dest, str, len ); + } else { + rb_io_write( dest, rb_str_new( str, len ) ); + } } /* @@ -1035,7 +1040,7 @@ static void syck_mark_emitter(emitter) SyckEmitter *emitter; { - rb_gc_mark( emitter->ignore_id ); + rb_gc_mark(emitter->ignore_id); if ( emitter->bonus != NULL ) { rb_gc_mark( (VALUE)emitter->bonus ); @@ -1104,7 +1109,7 @@ syck_emitter_flush_m( self ) SyckEmitter *emitter; Data_Get_Struct(self, SyckEmitter, emitter); - syck_emitter_flush( emitter ); + syck_emitter_flush( emitter, 0 ); return self; } @@ -1171,7 +1176,7 @@ syck_emitter_end_object( self, oid ) if ( emitter->level < 0 ) { - syck_emitter_flush( emitter ); + syck_emitter_flush( emitter, 0 ); } return (VALUE)emitter->bonus; } |
