fix incorrect fileio.c
This commit is contained in:
parent
6153db7737
commit
173bdf08ec
88
src/fileio.c
88
src/fileio.c
@ -1,48 +1,56 @@
|
|||||||
#include <assert.h>
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "fileio.h"
|
|
||||||
#include "global.h"
|
|
||||||
|
|
||||||
/* Loads a binary file located at filePath to memory, taking up a block of exactly memorySize bytes,
|
#define MAX_ASM_LINE_LENGTH 100
|
||||||
and returns the starting address of the data. If memorySize is insufficient to store the entire file,
|
|
||||||
an appropriate error is reported. Excess memory is set to 0 bit values. */
|
|
||||||
|
|
||||||
byte *fileio_loadBin(const char *filePath, size_t memorySize) {
|
int isValidFileFormat(char filename[], char expectedExtension[]){
|
||||||
FILE *file = fopen(filePath, "rb");
|
int *pointLoc = strrchr(filename, '.');
|
||||||
if (file == NULL) {
|
|
||||||
fprintf(stderr, "Couldn't open %s!\n", filePath);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
byte *fileData = malloc(memorySize);
|
if(pointLoc != NULL){
|
||||||
if (fileData == NULL) {
|
if(strcmp(pointLoc, expectedExtension)==0){
|
||||||
fprintf(stderr, "Ran out of memory attempting to load %s!\n", filePath);
|
return(1);
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Loop while reading from the file yields data. Only terminates if EOF is reached or ERROR occurs.
|
|
||||||
// Explicitly deal with attempting to write too much data to memory block, rather than allow segfault.
|
|
||||||
const size_t byteCount = memorySize/sizeof(byte);
|
|
||||||
int i = 0;
|
|
||||||
while (fread(fileData + i, sizeof(byte), 1, file)) {
|
|
||||||
if (i >= byteCount) {
|
|
||||||
fprintf(stderr, "Attempting to load binary %s to memory of smaller size %zu!\n", filePath, memorySize);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
return(0);
|
||||||
if (ferror(file)) {
|
}
|
||||||
fprintf(stderr, "Encountered error attempting to read %s!\n", filePath);
|
|
||||||
exit(EXIT_FAILURE);
|
int writeBinaryFile(word instrs[], char outputFile[]){
|
||||||
}
|
|
||||||
assert(fclose(file) != EOF);
|
if (!isValidFileFormat(filename, "bin")){
|
||||||
|
return(-1);
|
||||||
// If part of memory block was left uninitialized, initialize it to zero.
|
}
|
||||||
if (i < byteCount) {
|
|
||||||
memset(fileData + i, 0, (byteCount - i) * sizeof(byte));
|
FILE *fp;
|
||||||
}
|
|
||||||
return fileData;
|
fp = fopen(outputFile, "wb");
|
||||||
|
|
||||||
|
if(fp == NULL){
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
fwrite(instrs, 4, sizeof(instrs), fp);
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int readAssemblyFile(char inputFile[]) {
|
||||||
|
if (!isValidFileFormat(filename, "s")){
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE *fp;
|
||||||
|
char savedLine[MAX_ASM_LINE_LENGTH];
|
||||||
|
|
||||||
|
fp = fopen(inputFile, "r");
|
||||||
|
|
||||||
|
if(fp == NULL){
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (fgets(savedLine, MAX_ASM_LINE_LENGTH-1, fp) != NULL) {
|
||||||
|
//pass line to parser
|
||||||
|
}
|
||||||
|
|
||||||
|
return(0);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user