Cleaned program code
This commit is contained in:
+64
-43
@@ -9,7 +9,7 @@
|
||||
|
||||
// Put a module header into a HeaderStruct and read (skip) module data
|
||||
// Returns size of data read when reading a module header
|
||||
int ReadSingleModule(int fd, ModuleStruct* module)
|
||||
int ReadSingleModuleFromArchive(int fd, ModuleStruct* module)
|
||||
{
|
||||
int readSize;
|
||||
long long int moduleSize;
|
||||
@@ -21,7 +21,7 @@ int ReadSingleModule(int fd, ModuleStruct* module)
|
||||
}
|
||||
|
||||
// Write a single module into file
|
||||
int WriteSingleModule(int fd, ModuleStruct* module)
|
||||
int WriteSingleModuleToArchive(int fd, ModuleStruct* module)
|
||||
{
|
||||
int writeSize;
|
||||
long long int moduleSize;
|
||||
@@ -31,6 +31,37 @@ int WriteSingleModule(int fd, ModuleStruct* module)
|
||||
return writeSize;
|
||||
}
|
||||
|
||||
void PrintModuleHeader(ModuleStruct* module)
|
||||
{
|
||||
printf("Name: %s | ", module->moduleHeader.moduleName);
|
||||
printf("Size: %ld\n", module->moduleHeader.moduleInfo.st_size);
|
||||
return;
|
||||
}
|
||||
|
||||
int OpenArchive(char* archiveName, int flags)
|
||||
{
|
||||
int archiveFD = open(archiveName, flags, 0644);
|
||||
if (archiveFD < 0)
|
||||
{
|
||||
perror("Archive");
|
||||
return -1;
|
||||
}
|
||||
return archiveFD;
|
||||
|
||||
}
|
||||
|
||||
void LoadModuleFromFile(char* filename, ModuleStruct* module)
|
||||
{
|
||||
stat(filename, &(module->moduleHeader.moduleInfo));
|
||||
long long int moduleSize;
|
||||
moduleSize = (long long) module->moduleHeader.moduleInfo.st_size;
|
||||
module->moduleData = malloc(moduleSize);
|
||||
int fdInput = open(filename, O_RDONLY);
|
||||
read(fdInput, module->moduleData, moduleSize);
|
||||
close(fdInput);
|
||||
return;
|
||||
}
|
||||
|
||||
// Checks if operation went ok, if not then prints message and exits
|
||||
void SafetyCheck(int status, char* message)
|
||||
{
|
||||
@@ -109,21 +140,20 @@ int IsFileArchived(char* archiveName, char* filename)
|
||||
ModuleStruct module;
|
||||
ssize_t readSize;
|
||||
char* newFilename = StripFilename(filename);
|
||||
int archiveFile = open(archiveName, O_RDONLY | O_CREAT, 0644);
|
||||
SafetyCheck((archiveFile < 0), "Archive failed to open.");
|
||||
int archiveFD = OpenArchive(archiveName, O_RDONLY | O_CREAT);
|
||||
do
|
||||
{
|
||||
readSize = ReadSingleModule(archiveFile, &(module));
|
||||
readSize = ReadSingleModuleFromArchive(archiveFD, &(module));
|
||||
free(module.moduleData);
|
||||
if (strcmp(module.moduleHeader.moduleName, filename) == 0)
|
||||
{
|
||||
free(newFilename);
|
||||
close(archiveFile);
|
||||
close(archiveFD);
|
||||
return 1;
|
||||
}
|
||||
} while (readSize > 0);
|
||||
free(newFilename);
|
||||
close(archiveFile);
|
||||
close(archiveFD);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -133,6 +163,8 @@ int IsFileArchived(char* archiveName, char* filename)
|
||||
// file already inside the archive
|
||||
void AddToArchive(char* archiveName, char* filename)
|
||||
{
|
||||
ModuleStruct module;
|
||||
ssize_t readSize;
|
||||
char* filenameCleaned = StripFilename(filename);
|
||||
if (IsFileArchived(archiveName, filenameCleaned))
|
||||
{
|
||||
@@ -144,27 +176,18 @@ void AddToArchive(char* archiveName, char* filename)
|
||||
fprintf(stderr, "%s not found.\n", filename);
|
||||
return;
|
||||
}
|
||||
int archiveFile = open(archiveName, O_RDWR | O_CREAT, 0644);
|
||||
SafetyCheck((archiveFile < 0), "Archive failed to open.");
|
||||
ssize_t readSize;
|
||||
ModuleStruct module;
|
||||
int archiveFD = OpenArchive(archiveName, O_RDWR | O_CREAT);
|
||||
do
|
||||
{
|
||||
readSize = ReadSingleModule(archiveFile, &(module));
|
||||
readSize = ReadSingleModuleFromArchive(archiveFD, &(module));
|
||||
free(module.moduleData);
|
||||
}
|
||||
while (readSize > 0);
|
||||
} while (readSize > 0);
|
||||
LoadModuleFromFile(filename, &module);
|
||||
strcpy(module.moduleHeader.moduleName, filenameCleaned);
|
||||
stat(filename, &(module.moduleHeader.moduleInfo));
|
||||
long long int moduleSize;
|
||||
moduleSize = (long long) module.moduleHeader.moduleInfo.st_size;
|
||||
module.moduleData = malloc(moduleSize);
|
||||
int fdInput = open(filename, O_RDONLY);
|
||||
read(fdInput, module.moduleData, moduleSize);
|
||||
close(fdInput);
|
||||
WriteSingleModule(archiveFile, &module);
|
||||
WriteSingleModuleToArchive(archiveFD, &module);
|
||||
free(filenameCleaned);
|
||||
free(module.moduleData);
|
||||
close(archiveFD);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -173,7 +196,6 @@ void AddToArchive(char* archiveName, char* filename)
|
||||
void RemoveFromArchive(char* archiveName, char* filename)
|
||||
{
|
||||
ssize_t readSize;
|
||||
long long int moduleSize;
|
||||
char* filenameCleaned = StripFilename(filename);
|
||||
char tempArchiveName[strlen(archiveName)+5];
|
||||
strcpy(tempArchiveName, archiveName);
|
||||
@@ -186,18 +208,17 @@ void RemoveFromArchive(char* archiveName, char* filename)
|
||||
return;
|
||||
}
|
||||
ModuleStruct module;
|
||||
int newArchiveFile = open(tempArchiveName, O_WRONLY | O_CREAT, 0644);
|
||||
SafetyCheck((newArchiveFile < 0), "New archive failed to open.");
|
||||
readSize = ReadSingleModule(archiveFile, &(module));
|
||||
int newArchiveFD = OpenArchive(tempArchiveName, O_WRONLY | O_CREAT);
|
||||
readSize = ReadSingleModuleFromArchive(archiveFile, &(module));
|
||||
while (readSize > 0)
|
||||
{
|
||||
if (strcmp(module.moduleHeader.moduleName, filenameCleaned) != 0)
|
||||
WriteSingleModule(newArchiveFile, &module);
|
||||
WriteSingleModuleToArchive(newArchiveFD, &module);
|
||||
free(module.moduleData);
|
||||
readSize = ReadSingleModule(archiveFile, &(module));
|
||||
readSize = ReadSingleModuleFromArchive(archiveFile, &(module));
|
||||
}
|
||||
close(archiveFile);
|
||||
close(newArchiveFile);
|
||||
close(newArchiveFD);
|
||||
SafetyCheck(remove(archiveName), "Old archive failed removal.");
|
||||
SafetyCheck(rename(tempArchiveName, archiveName),
|
||||
"New archive failed name change.");
|
||||
@@ -213,38 +234,38 @@ void ListArchive(char* archiveName)
|
||||
ssize_t readSize;
|
||||
SafetyCheck((archiveFile < 0), "Archive failed to open.");
|
||||
ModuleStruct module;
|
||||
readSize = ReadSingleModule(archiveFile, &module);
|
||||
while (readSize > 0)
|
||||
do
|
||||
{
|
||||
printf("Name: %s | Size: %ld\n", module.moduleHeader.moduleName,
|
||||
module.moduleHeader.moduleInfo.st_size);
|
||||
free(module.moduleData);
|
||||
readSize = ReadSingleModule(archiveFile, &module);
|
||||
}
|
||||
readSize = ReadSingleModuleFromArchive(archiveFile, &module);
|
||||
if (readSize > 0)
|
||||
{
|
||||
PrintModuleHeader(&module);
|
||||
free(module.moduleData);
|
||||
}
|
||||
} while (readSize > 0);
|
||||
return;
|
||||
}
|
||||
|
||||
int Test_ListArchive(char* archiveName)
|
||||
{
|
||||
struct stat statArchive;
|
||||
int archiveFile = open(archiveName, O_RDONLY);
|
||||
int archiveFD = OpenArchive(archiveName, O_RDONLY);
|
||||
ssize_t readSize;
|
||||
long int sizeTotal = 0;
|
||||
if (archiveFile < 0)
|
||||
if (archiveFD < 0)
|
||||
return -1;
|
||||
ModuleStruct module;
|
||||
stat(archiveName, &statArchive);
|
||||
do
|
||||
{
|
||||
readSize = ReadSingleModule(archiveFile, &module);
|
||||
readSize = ReadSingleModuleFromArchive(archiveFD, &module);
|
||||
if (readSize > 0)
|
||||
{
|
||||
sizeTotal += sizeof(module.moduleHeader);
|
||||
sizeTotal += module.moduleHeader.moduleInfo.st_size;
|
||||
}
|
||||
free(module.moduleData);
|
||||
}
|
||||
while (readSize > 0);
|
||||
} while (readSize > 0);
|
||||
return sizeTotal;
|
||||
}
|
||||
|
||||
@@ -263,13 +284,13 @@ int _ExtractArchive(char* archiveName, char* filenameIn)
|
||||
return -1;
|
||||
}
|
||||
ModuleStruct module;
|
||||
readSize = ReadSingleModule(archiveFile, &(module));
|
||||
readSize = ReadSingleModuleFromArchive(archiveFile, &(module));
|
||||
while (readSize > 0)
|
||||
{
|
||||
if (strcmp(module.moduleHeader.moduleName, filenameCleaned) == 0)
|
||||
writeSize += write(STDOUT_FILENO, module.moduleData, module.moduleHeader.moduleInfo.st_size);
|
||||
free(module.moduleData);
|
||||
readSize = ReadSingleModule(archiveFile, &(module));
|
||||
readSize = ReadSingleModuleFromArchive(archiveFile, &(module));
|
||||
}
|
||||
close(archiveFile);
|
||||
free(filenameCleaned);
|
||||
|
||||
Reference in New Issue
Block a user