[Scummvm-cvs-logs] SF.net SVN: scummvm:[52397] scummvm/trunk/engines/sci/engine/kfile.cpp

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Thu Aug 26 09:26:31 CEST 2010


Revision: 52397
          http://scummvm.svn.sourceforge.net/scummvm/?rev=52397&view=rev
Author:   m_kiewitz
Date:     2010-08-26 07:26:30 +0000 (Thu, 26 Aug 2010)

Log Message:
-----------
SCI: kFileIOReadString/kFGets return byte count

in sierra sci of read bytes

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kfile.cpp

Modified: scummvm/trunk/engines/sci/engine/kfile.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kfile.cpp	2010-08-25 22:05:10 UTC (rev 52396)
+++ scummvm/trunk/engines/sci/engine/kfile.cpp	2010-08-26 07:26:30 UTC (rev 52397)
@@ -221,29 +221,31 @@
 	return s->r_acc;
 }
 
-static void fgets_wrapper(EngineState *s, char *dest, int maxsize, int handle) {
+static int fgets_wrapper(EngineState *s, char *dest, int maxsize, int handle) {
 	FileHandle *f = getFileFromHandle(s, handle);
 	if (!f)
-		return;
+		return 0;
 
 	if (!f->_in) {
 		error("fgets_wrapper: Trying to read from file '%s' opened for writing", f->_name.c_str());
-		return;
+		return 0;
 	}
+	int readBytes = 0;
 	if (maxsize > 1) {
 		memset(dest, 0, maxsize);
 		f->_in->readLine(dest, maxsize);
+		readBytes = strlen(dest); // FIXME: sierra sci returned byte count and didn't react on NUL characters
 		// The returned string must not have an ending LF
-		int strSize = strlen(dest);
-		if (strSize > 0) {
-			if (dest[strSize - 1] == 0x0A)
-				dest[strSize - 1] = 0;
+		if (readBytes > 0) {
+			if (dest[readBytes - 1] == 0x0A)
+				dest[readBytes - 1] = 0;
 		}
 	} else {
 		*dest = 0;
 	}
 
 	debugC(2, kDebugLevelFile, "  -> FGets'ed \"%s\"", dest);
+	return readBytes;
 }
 
 reg_t kFGets(EngineState *s, int argc, reg_t *argv) {
@@ -252,9 +254,9 @@
 	int handle = argv[2].toUint16();
 
 	debugC(2, kDebugLevelFile, "kFGets(%d, %d)", handle, maxsize);
-	fgets_wrapper(s, buf, maxsize, handle);
+	int readBytes = fgets_wrapper(s, buf, maxsize, handle);
 	s->_segMan->memcpy(argv[0], (const byte*)buf, maxsize);
-	return argv[0];
+	return make_reg(0, readBytes);
 }
 
 /**
@@ -902,10 +904,10 @@
 	int handle = argv[2].toUint16();
 	debugC(2, kDebugLevelFile, "kFileIO(readString): %d, %d", handle, size);
 
-	fgets_wrapper(s, buf, size, handle);
+	int readBytes = fgets_wrapper(s, buf, size, handle);
 	s->_segMan->memcpy(argv[0], (const byte*)buf, size);
 	delete[] buf;
-	return argv[0];
+	return make_reg(0, readBytes);
 }
 
 reg_t kFileIOWriteString(EngineState *s, int argc, reg_t *argv) {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list