Browse Source

Fix a bug in read_line

mingodad 9 năm trước cách đây
mục cha
commit
b98d9d04a5

+ 1 - 1
SquiLu/sqstdlib/sqstdblob.cpp

@@ -107,7 +107,7 @@ bool SQBlob::Reserve(SQInteger n)
 bool SQBlob::GrowBufOf(SQInteger n)
 bool SQBlob::GrowBufOf(SQInteger n)
 {
 {
     bool ret = Reserve(n);
     bool ret = Reserve(n);
-    _size = _size + n;
+    if(ret) _size = _size + n;
     return ret;
     return ret;
 }
 }
 SQInteger SQBlob::Seek(SQInteger offset, SQInteger origin) {
 SQInteger SQBlob::Seek(SQInteger offset, SQInteger origin) {

+ 5 - 5
SquiLu/sqstdlib/sqstdstream.cpp

@@ -29,8 +29,8 @@ SQInteger _stream_read_line(HSQUIRRELVM v) {
     else size = 2048;
     else size = 2048;
     SQBlob line_buf(0, size);
     SQBlob line_buf(0, size);
     do {
     do {
-        char *buf = (SQChar*)line_buf.GetBuf();
-        read_size = self->Gets(buf + line_buf.Len(), size);
+        char *buf = (SQChar*)line_buf.GetBuf() + line_buf.Len();
+        read_size = self->Gets(buf, size);
         if(!read_size) //end of file
         if(!read_size) //end of file
         {
         {
             break;
             break;
@@ -46,12 +46,12 @@ SQInteger _stream_read_line(HSQUIRRELVM v) {
             {
             {
                 read_size -= 1;
                 read_size -= 1;
             }
             }
-            line_buf.SetLen(read_size);
+            line_buf.SetLen(line_buf.Len() + read_size);
             new_line_found = true;
             new_line_found = true;
             break;
             break;
         }
         }
-        line_buf.SetLen(read_size);
-        line_buf.GrowBufOf(size);
+        line_buf.SetLen(line_buf.Len() + read_size);
+        line_buf.Reserve(size);
     } while(read_size > 0);
     } while(read_size > 0);
     if(line_buf.Len() > 0) {
     if(line_buf.Len() > 0) {
         sq_pushstring(v, (const SQChar*)line_buf.GetBuf(), line_buf.Len());
         sq_pushstring(v, (const SQChar*)line_buf.GetBuf(), line_buf.Len());