From ea2669da23c525781b7b0a69876c4e338a026d19 Mon Sep 17 00:00:00 2001 From: TriantaTV Date: Tue, 8 Nov 2022 20:37:57 -0600 Subject: [PATCH] Implemented adding to archive --- Makefile | 5 +--- include/stuffy.h | 9 +++++++ src/stuffy.c | 70 +++++++++++++++++++++++++++++++++++++++++++++--- test/test.c | 2 +- 4 files changed, 77 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 7e440d4..026e974 100644 --- a/Makefile +++ b/Makefile @@ -8,10 +8,7 @@ compile: gcc $(INC) -c -o build/stuffy.o src/stuffy.c link: - gcc -o bin/stuffy.out build/*.o - -exec: compile link - ./bin/stuffy.out -a test/example.tar test/sample.txt + gcc -o bin/stuffy.out build/stuffy.o build/main.o test: testCompile testLink testExec diff --git a/include/stuffy.h b/include/stuffy.h index c9855f7..8f24aa8 100644 --- a/include/stuffy.h +++ b/include/stuffy.h @@ -1,11 +1,20 @@ #ifndef STUFFY_H #define STUFFY_H +#include + +typedef struct HeaderStruct +{ + char moduleName[50]; + struct stat moduleInfo; +} HeaderStruct; void Stuffy(int argc, char* argv[]); int StuffyArgument(int argc, char** argv); void StuffyAction(char* argv[], int archiveAction); +int IsFileArchived(int archiveFile, char* fileName); void AddToArchive(char* archiveName, char* fileName); void RemoveFromArchive(char* archiveName, char* fileName); void ListArchive(char* archiveName); +void ExtractArchive(char* argv[]); #endif diff --git a/src/stuffy.c b/src/stuffy.c index 52b79de..4e89398 100644 --- a/src/stuffy.c +++ b/src/stuffy.c @@ -1,6 +1,9 @@ +#include #include #include +#include #include +#include #include "stuffy.h" void Stuffy(int argc, char* argv[]) @@ -37,12 +40,58 @@ int StuffyArgument(int argc, char* argv[]) void StuffyAction(char* argv[], int archiveAction) { - ; + if (archiveAction == 0) + AddToArchive(argv[2], argv[3]); + if (archiveAction == 1) + RemoveFromArchive(argv[2], argv[3]); + if (archiveAction == 2) + ListArchive(argv[2]); + if (archiveAction == 3) + ExtractArchive(argv); +} + +int IsFileArchived(int archiveFile, char* fileName) +{ + ssize_t readSize; + long long int moduleSize; + HeaderStruct moduleHeader; + readSize = read(archiveFile, &moduleHeader, sizeof(HeaderStruct)); + if (!strcmp(moduleHeader.moduleName, fileName)) + return 1; + while (readSize > 0) + { + moduleSize = (long long) moduleHeader.moduleInfo.st_size; + char moduleData[moduleSize]; + readSize = read(archiveFile, &moduleData, moduleSize); + readSize = read(archiveFile, &moduleHeader, sizeof(HeaderStruct)); + if (!strcmp(moduleHeader.moduleName, fileName)) + return 1; + } + return 0; } void AddToArchive(char* archiveName, char* fileName) { - ; + int archiveFile = open(archiveName, O_RDWR | O_CREAT, 0644); + if (archiveFile < 0) + { + fprintf(stderr, "%s failed to open.\n", archiveName); + exit(1); + } + if (IsFileArchived(archiveFile, fileName)) + { + fprintf(stderr, "File already exists\n"); + exit(1); + } + HeaderStruct newModuleHeader; + strcpy(newModuleHeader.moduleName, fileName); + stat(fileName, &(newModuleHeader.moduleInfo)); + write(archiveFile, &newModuleHeader, sizeof(newModuleHeader)); + long long int newModuleSize = (long long) newModuleHeader.moduleInfo.st_size; + char newModuleData[newModuleSize]; + write(archiveFile, newModuleData, newModuleSize); + close(archiveFile); + return; } void RemoveFromArchive(char* archiveName, char* fileName) @@ -52,10 +101,23 @@ void RemoveFromArchive(char* archiveName, char* fileName) void ListArchive(char* archiveName) { - ; + int archiveFile = open(archiveName, O_RDONLY); + ssize_t readSize; + long long int moduleSize; + if (archiveFile < 0) + { + fprintf(stderr, "%s does not exist.\n", archiveName); + exit(1); + } + HeaderStruct moduleHeader; + while (readSize > 0) + { + moduleSize = (long long) moduleHeader.moduleInfo.st_size; + char moduleData[moduleSize]; + } } -void ExtractArchive(char*) +void ExtractArchive(char* argv[]) { ; } diff --git a/test/test.c b/test/test.c index 3bf7be8..816c3f7 100644 --- a/test/test.c +++ b/test/test.c @@ -6,7 +6,7 @@ char* argv[6]; void setUp(void) { - argv[0] = "./stuffy"; + argv[0] = "./stuffy.out"; argv[1] = "-a"; argv[2] = "mystuffyarchive"; argv[3] = "somefile";