[macruby-changes] [1287] MacRuby/branches/experimental/io.c

source_changes at macosforge.org source_changes at macosforge.org
Wed Apr 1 05:49:41 PDT 2009


Revision: 1287
          http://trac.macosforge.org/projects/ruby/changeset/1287
Author:   vincent.isambart at 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;
 }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090401/ccc18ca1/attachment.html>


More information about the macruby-changes mailing list