Revision: 1287 http://trac.macosforge.org/projects/ruby/changeset/1287 Author: vincent.isambart@gmail.com Date: 2009-04-01 05:49:41 -0700 (Wed, 01 Apr 2009) Log Message: ----------- this should fix ungetc Modified Paths: -------------- MacRuby/branches/experimental/io.c Modified: MacRuby/branches/experimental/io.c =================================================================== --- MacRuby/branches/experimental/io.c 2009-04-01 12:49:35 UTC (rev 1286) +++ MacRuby/branches/experimental/io.c 2009-04-01 12:49:41 UTC (rev 1287) @@ -967,8 +967,8 @@ data_read = MIN(io_struct->ungetc_buf_len, len); memcpy(buffer, &io_struct->ungetc_buf[io_struct->ungetc_buf_pos], data_read); - io_struct->ungetc_buf_len -= len; - io_struct->ungetc_buf_pos += len; + io_struct->ungetc_buf_len -= data_read; + io_struct->ungetc_buf_pos += data_read; if (io_struct->ungetc_buf_len == 0) { xfree(io_struct->ungetc_buf); io_struct->ungetc_buf = NULL; @@ -1658,29 +1658,26 @@ } if (len > io_struct->ungetc_buf_pos) { - const long delta = io_struct->ungetc_buf_len - - io_struct->ungetc_buf_pos; - // Reallocate the buffer. GC_WB(&io_struct->ungetc_buf, xrealloc(io_struct->ungetc_buf, - delta + len)); + io_struct->ungetc_buf_len + len)); // Shift the buffer. - memmove(&io_struct->ungetc_buf[delta], - &io_struct->ungetc_buf[io_struct->ungetc_buf_pos], delta); + memmove(&io_struct->ungetc_buf[len], + &io_struct->ungetc_buf[io_struct->ungetc_buf_pos], io_struct->ungetc_buf_len); + + io_struct->ungetc_buf_pos = len; } // Update position. io_struct->ungetc_buf_pos -= len; - if (io_struct->ungetc_buf_pos < 0) { - io_struct->ungetc_buf_pos = 0; - } + assert(io_struct->ungetc_buf_pos >= 0); - // Copy the bytes at the position. + // Copy the bytes at the new position. memcpy(&io_struct->ungetc_buf[io_struct->ungetc_buf_pos], bytes, len); // Update buffer size. - io_struct->ungetc_buf_len += len - io_struct->ungetc_buf_pos; + io_struct->ungetc_buf_len += len; return Qnil; }
participants (1)
-
source_changes@macosforge.org