diff --git a/Makefile b/Makefile index 188cabf..a4695d0 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -UNITYPATH = test/unity/ +UNITYPATH = test/unity INC := -I include UNITY := -I $(UNITYPATH) diff --git a/include/stuffy.h b/include/stuffy.h index 923adef..e3e94a7 100644 --- a/include/stuffy.h +++ b/include/stuffy.h @@ -15,7 +15,7 @@ typedef struct ModuleStruct } ModuleStruct; int ReadSingleModule(int fd, ModuleStruct* module); - +int WriteSingleModule(int fd, ModuleStruct* module, char* filename); void SafetyCheck(int status, char* message); char* StripFilename(char* filename); void Stuffy(int argc, char* argv[]); diff --git a/src/stuffy.c b/src/stuffy.c index 71ea547..f83b3a4 100644 --- a/src/stuffy.c +++ b/src/stuffy.c @@ -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; } diff --git a/test/test.c b/test/test.c index a23b4c3..08b5d45 100644 --- a/test/test.c +++ b/test/test.c @@ -1,7 +1,9 @@ +#include #include -#include "unity.h" +#include "unity/unity.h" #include "stuffy.h" +ModuleStruct moduleTest; int argc = 0; char* argv[6]; @@ -33,30 +35,65 @@ void Test_StuffyArgument_Should_ReturnCorrectly(void) TEST_ASSERT_EQUAL(-1, StuffyArgument(4, argv)); } -void Test_AddToArchive_Should_AddCorrectly(void) +void Test_StripFilename_Should_ChangeName(void) { - ; + TEST_ASSERT_EQUAL_STRING("mystuffyarchive.test", StripFilename("test/files/mystuffyarchive.test")); + TEST_ASSERT_EQUAL_STRING("temp1.test", StripFilename("test/files/temp1.test")); + TEST_ASSERT_EQUAL_STRING("temp2.test", StripFilename("test/files/temp2.test")); + TEST_ASSERT_EQUAL_STRING("temp3.test", StripFilename("test/files/temp3.test")); + TEST_ASSERT_EQUAL_STRING("temp4.test", StripFilename("test/files/temp4.test")); + TEST_ASSERT_EQUAL_STRING("temp5.test", StripFilename("test/files/temp5.test")); +} + +void Test_ReadSingleModule_Should_ReadCorrectly(void) +{ + int fd = open(argv[2], O_RDONLY); + TEST_ASSERT_EQUAL(80, ReadSingleModule(fd, &moduleTest)); + TEST_ASSERT_EQUAL(25, ReadSingleModule(fd, &moduleTest)); + TEST_ASSERT_EQUAL(27, ReadSingleModule(fd, &moduleTest)); + TEST_ASSERT_EQUAL(27, ReadSingleModule(fd, &moduleTest)); + close(fd); +} + +void Test_ReadSingleModule_Should_ReadNewArchive(void) +{ + TEST_IGNORE_MESSAGE("Implementation Required: AddToArchive"); + int fd = open("test/files/newstuffyarchive.test", O_RDONLY | O_CREAT, 0644); + AddToArchive("test/files/newstuffyarchive.test", "temp4.test"); + TEST_ASSERT_EQUAL(27, ReadSingleModule(fd, &moduleTest)); + AddToArchive("test/files/newstuffyarchive.test", "temp3.test"); + TEST_ASSERT_EQUAL(27, ReadSingleModule(fd, &moduleTest)); + AddToArchive("test/files/newstuffyarchive.test", "temp2.test"); + TEST_ASSERT_EQUAL(25, ReadSingleModule(fd, &moduleTest)); + AddToArchive("test/files/newstuffyarchive.test", "temp.test"); + TEST_ASSERT_EQUAL(80, ReadSingleModule(fd, &moduleTest)); + close(fd); } void Test_RemoveFromArchive_Should_RemoveCorrectly(void) { - ; + TEST_IGNORE_MESSAGE("Implementation Required: RemoveFromArchive"); } void Test_ListArchive_Should_ListCorrectly(void) { - ; + TEST_IGNORE_MESSAGE("Implementation Required: ListArchive"); } void Test_ExtractArchive_Should_ExtractCorrectly(void) { - ; + TEST_IGNORE_MESSAGE("Implementation Required: ExtractArchive"); } int main(void) { UNITY_BEGIN(); - remove("test/files/mystuffyarchive.test"); RUN_TEST(Test_StuffyArgument_Should_ReturnCorrectly); + RUN_TEST(Test_StripFilename_Should_ChangeName); + RUN_TEST(Test_ReadSingleModule_Should_ReadCorrectly); + RUN_TEST(Test_ReadSingleModule_Should_ReadNewArchive); + RUN_TEST(Test_RemoveFromArchive_Should_RemoveCorrectly); + RUN_TEST(Test_ListArchive_Should_ListCorrectly); + RUN_TEST(Test_ExtractArchive_Should_ExtractCorrectly); return UNITY_END(); }