Mercurial > sos > sos
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
--- 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: