changeset 78:36e61ffe504b

Modified the test program to allow multiple operations, some bug fixes Append no longer attempts to write massive amounts of data for no reason setFSize now works for empty files
author Jonathan Pevarnek <pevarnj@gmail.com>
date Wed, 27 Apr 2011 10:31:32 -0400
parents 771320cf8c80
children 5a60bc8e2cd0
files hercules/disk.img src/fs.c src/testFS.c
diffstat 3 files changed, 64 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
Binary file hercules/disk.img has changed
--- a/src/fs.c	Wed Apr 27 09:27:53 2011 -0400
+++ b/src/fs.c	Wed Apr 27 10:31:32 2011 -0400
@@ -121,7 +121,8 @@
 		void *ptr = readFSBlock(currBlock);
 		if(!ptr) return ERR_FSBLKREADFAIL;
 		u32 tcOS = currSize%FSBLKSIZE; //the current offset for the block
-		u32 tcSize = Min_u32(maxSize - currSize, FSBLKSIZE) - tcOS;
+		u32 tcSize = Min_u32(maxSize - currSize, FSBLKSIZE); //assume 0 offset
+		tcSize = (tcSize + tcOS > FSBLKSIZE)?FSBLKSIZE - tcOS:tcSize; //take int account the offset
 		memcpy(ptr + tcOS, data, tcSize);
 		if(isError(err = sync(currBlock))) return err;
 		data += tcSize;
@@ -283,7 +284,8 @@
 		}
 	} else { //there are fewer blocks
 		for(i = in.nblocks; i < neededBlocks; i++) {
-			if(isError(err = nextFreeBlock(in.blocks[i - 1], &in.blocks[i]))) {
+			u32 prevLoc = (i)?in.blocks[i - 1]:fid;
+			if(isError(err = nextFreeBlock(prevLoc, &in.blocks[i]))) {
 				ret = err;
 				goto end;
 			}
--- a/src/testFS.c	Wed Apr 27 09:27:53 2011 -0400
+++ b/src/testFS.c	Wed Apr 27 10:31:32 2011 -0400
@@ -31,26 +31,67 @@
 	if(isError(init_fs(0x100, __memsize))) goto END;
 
 	while(1) {
-		if(isError(listFiles())) sPrint("WARNING: ERROR IN READING FILE NAMES\n");
-		char fname[28];
-		sPrint("Please enter the file to read: ");
-		getFname(fname);
-		u32 fid;
-		ErrCode err = lookupFile(fname, &fid);
-		if(isError(err)) {
-			if(errCode(err) == NOTFILE) sPrint("ERROR: Invalid file name\n");
-			continue;
+		sPrint("Please select a mode:\n0: show file text\n1: make new file\n2: write to file\n");
+		sGet(buffer, 30);
+		int mode = atoi(buffer);
+		switch(mode) {
+			case 0:
+				{
+					if(isError(listFiles())) sPrint("WARNING: ERROR IN READING FILE NAMES\n");
+					char fname[28];
+					sPrint("Please enter the file to read: ");
+					getFname(fname);
+					u32 fid;
+					ErrCode err = lookupFile(fname, &fid);
+					if(isError(err)) {
+						if(errCode(err) == NOTFILE) sPrint("ERROR: Invalid file name\n");
+						continue;
+					}
+					u32 fileSize;
+					if(isError(getFileSize(fid, &fileSize))) continue;
+					char *text = malloc(fileSize);
+					if(!text) continue;
+					if(isError(getFileData(fid, text))) {
+						free(text);
+						continue;
+					}
+					dumpText(text, fileSize);
+					free(text);
+				}
+				break;
+			case 1:
+				{
+					char fname[28];
+					sPrint("Please enter a name for the new file: ");
+					getFname(fname);
+					u32 dummy; //I do not care about the fid personally
+					if(isError(makeFile(fname, &dummy))) {
+						sPrint("ERROR\n");
+						continue;
+					}
+				}
+				break;
+			case 2:
+				{
+					if(isError(listFiles())) sPrint("WARNING: ERROR IN READING FILE NAMES\n");
+					char fname[28];
+					sPrint("Please enter the file to write to: ");
+					getFname(fname);
+					u32 fid;
+					ErrCode err = lookupFile(fname, &fid);
+					if(isError(err)) {
+						if(errCode(err) == NOTFILE) sPrint("ERROR: Invalid file name\n");
+						continue;
+					}
+					sPrint("Please enter the text to append to the file: ");
+					u32 size = getline(buffer, CON_LEN);
+					if(isError(fileAppend(fid, buffer, size))) {
+						sPrint("ERROR\n");
+						continue;
+					}
+				}
+				break;
 		}
-		u32 fileSize;
-		if(isError(getFileSize(fid, &fileSize))) continue;
-		char *text = malloc(fileSize);
-		if(!text) continue;
-		if(isError(getFileData(fid, text))) {
-			free(text);
-			continue;
-		}
-		dumpText(text, fileSize);
-		free(text);
 	}
 
 END: