Added tests and fixed reading modules and striping names functionality

This commit is contained in:
2022-11-10 19:58:59 -06:00
parent 4e20f39ecd
commit ff37c5e208
4 changed files with 91 additions and 25 deletions
+45 -16
View File
@@ -12,10 +12,34 @@ int ReadSingleModule(int fd, ModuleStruct* module)
{
int readSize;
long long int moduleSize;
readSize = read(fd, &(module->moduleHeader), sizeof(HeaderStruct));
readSize = read(fd, &(module->moduleHeader), sizeof(module->moduleHeader));
moduleSize = (long long) module->moduleHeader.moduleInfo.st_size;
module->moduleData = malloc(moduleSize);
read(fd, &module->moduleData, moduleSize);
readSize = read(fd, module->moduleData, moduleSize);
return readSize;
}
// Put a module header into a HeaderStruct and read (skip) module data
// Returns size of data read when reading a module header
int WriteSingleModule(int fd, ModuleStruct* module, char* filename)
{
int readSize;
long long int moduleSize;
readSize = read(fd, &(module->moduleHeader), sizeof(module->moduleHeader));
moduleSize = (long long) module->moduleHeader.moduleInfo.st_size;
module->moduleData = malloc(moduleSize);
readSize = read(fd, module->moduleData, moduleSize);
// strcpy(module.moduleHeader.moduleName, newFilename);
// stat(filename, &(module.moduleHeader.moduleInfo));
// write(archiveFile, &module.moduleHeader, sizeof(module.moduleHeader));
// moduleSize = (long long) module.moduleHeader.moduleInfo.st_size;
// char moduleData[moduleSize];
// write(archiveFile, moduleData, moduleSize);
// close(archiveFile);
return readSize;
}
@@ -102,8 +126,8 @@ int IsFileArchived(char* archiveName, char* filename)
do
{
readSize = ReadSingleModule(archiveFile, &(module));
printf("Size of data: %ld", sizeof(module.moduleData));
free(module.moduleData);
module.moduleData = NULL;
printf("%s\n", newFilename);
if (!strcmp(module.moduleHeader.moduleName, filename))
{
@@ -123,34 +147,31 @@ int IsFileArchived(char* archiveName, char* filename)
// file already inside the archive
void AddToArchive(char* archiveName, char* filename)
{
SafetyCheck(IsFileArchived(archiveName, filename),
"File already exists in archive, try removing file first.");
// SafetyCheck(IsFileArchived(archiveName, filename),
// "File already exists in archive, try removing file first.");
int archiveFile = open(archiveName, O_RDWR | O_CREAT, 0644);
SafetyCheck((archiveFile < 0), "Archive failed to open.");
ssize_t readSize;
long long int moduleSize;
// long long int moduleSize;
ModuleStruct module;
readSize = read(archiveFile, &module.moduleHeader, sizeof(module.moduleHeader));
// readSize = read(archiveFile, &module.moduleHeader, sizeof(module.moduleHeader));
do
readSize = ReadSingleModule(archiveFile, &(module));
while (readSize > 0);
char* newFilename = StripFilename(filename);
strcpy(module.moduleHeader.moduleName, newFilename);
stat(filename, &(module.moduleHeader.moduleInfo));
write(archiveFile, &module.moduleHeader, sizeof(module.moduleHeader));
moduleSize = (long long) module.moduleHeader.moduleInfo.st_size;
char moduleData[moduleSize];
write(archiveFile, moduleData, moduleSize);
close(archiveFile);
WriteSingleModule(archiveFile, &module, newFilename);
free(newFilename);
free(module.moduleData);
return;
// return;
}
// Check through archive for file, if file exists with name, remove it
// If file not in archive, print "somefile was not found."
void RemoveFromArchive(char* archiveName, char* filename)
{
printf("'RemoveFromArchive()' function is still broken.\n");
return;
ssize_t readSize;
long long int moduleSize;
char* newFileName;
@@ -186,6 +207,13 @@ void ListArchive(char* archiveName)
ssize_t readSize;
long long int moduleSize;
SafetyCheck((archiveFile < 0), "Archive failed to open.");
// ModuleStruct module;
// do
// {
// readSize = ReadSingleModule(archiveFile, &module);
// printf("Name: %s | Size: %lld\n", module.moduleHeader.moduleName, moduleSize);
// }
// while (readSize > 0);
HeaderStruct moduleHeader;
readSize = read(archiveFile, &moduleHeader, sizeof(moduleHeader));
while (readSize > 0)
@@ -203,5 +231,6 @@ void ListArchive(char* archiveName)
// Extracted data remains in archive
void ExtractArchive(char* argv[])
{
;
printf("'ExtractArchive()' function is still broken.\n");
return;
}