X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2Fpak.cpp;h=16beab2b1ee0c05b047be699b780c0f999524b33;hb=c82ce5aefd7d98727d8ddd43c091f7c617b0a7a5;hp=36d5a19d393f12d8fcd261f20e0ebc365dff0a5b;hpb=a882955f339b23b5e61f92ef7cb5aae76405d95b;p=quix0rs-blobwars.git diff --git a/src/pak.cpp b/src/pak.cpp index 36d5a19..16beab2 100644 --- a/src/pak.cpp +++ b/src/pak.cpp @@ -30,15 +30,8 @@ FileData *fileData = NULL; void cleanup() { - if (buffer != NULL) - { - delete[] buffer; - } - - if (output != NULL) - { - delete[] output; - } + delete[] buffer; + delete[] output; } void countFiles(const char *dirName) @@ -55,7 +48,7 @@ void countFiles(const char *dirName) continue; } - sprintf(filename, "%s/%s", dirName, dfile->d_name); + snprintf(filename, sizeof filename, "%s/%s", dirName, dfile->d_name); if (strlen(filename) > PAK_MAX_FILENAME - 1) { @@ -75,6 +68,8 @@ void countFiles(const char *dirName) totalFiles++; } } + + closedir(dirp); fileData = new FileData[totalFiles]; } @@ -108,7 +103,7 @@ void recurseDirectory(const char *dirName) continue; } - sprintf(filename, "%s/%s", dirName, dfile->d_name); + snprintf(filename, sizeof filename, "%s/%s", dirName, dfile->d_name); dirp2 = opendir(filename); @@ -124,7 +119,7 @@ void recurseDirectory(const char *dirName) { printf("Couldn't open %s for reading!\n", filename); closedir(dirp); - gzclose(pak); + fclose(pak); exit(1); } @@ -134,20 +129,10 @@ void recurseDirectory(const char *dirName) fclose(infile); - if (buffer != NULL) - { - delete[] buffer; - buffer = NULL; - } - + delete[] buffer; buffer = new unsigned char[filesize]; - if (output != NULL) - { - delete[] output; - output = NULL; - } - + delete[] output; output = new unsigned char[(int)(filesize * 1.01) + 12]; fp = gzopen(filename, "rb"); @@ -156,7 +141,7 @@ void recurseDirectory(const char *dirName) { printf("Couldn't open %s for reading!\n", filename); closedir(dirp); - gzclose(pak); + fclose(pak); exit(1); } else @@ -169,7 +154,12 @@ void recurseDirectory(const char *dirName) fileData[files].set(filename, fSize, cSize, ftell(pak)); - fwrite(output, 1, cSize, pak); + if (fwrite(output, 1, cSize, pak) != cSize) + { + fprintf(stderr, "Error writing to pakfile: %s\n", strerror(errno)); + fclose(pak); + exit(1); + } files++; @@ -198,6 +188,11 @@ int main(int argc, char *argv[]) } pak = fopen(argv[argc - 1], "wb"); + if (!pak) + { + fprintf(stderr, "Error opening %s: %s\n", argv[argc - 1], strerror(errno)); + return 1; + } for (int i = 1 ; i < (argc - 1) ; i++) { @@ -226,13 +221,28 @@ int main(int argc, char *argv[]) break; } - fwrite(&fileData[i], sizeof(FileData), 1, pak); + if (fwrite(&fileData[i], sizeof(FileData), 1, pak) != 1) + { + fprintf(stderr, "Error writing to %s: %s\n", argv[argc - 1], strerror(errno)); + fclose(pak); + return 1; + } } unsigned int numberOfFiles = totalFiles; - fwrite(&pos, sizeof(unsigned int), 1, pak); - fwrite(&numberOfFiles, sizeof(unsigned int), 1, pak); + if (fwrite(&pos, sizeof(unsigned int), 1, pak) != 1) + { + fprintf(stderr, "Error writing to %s: %s\n", argv[argc - 1], strerror(errno)); + fclose(pak); + return 1; + } + if (fwrite(&numberOfFiles, sizeof(unsigned int), 1, pak) != 1) + { + fprintf(stderr, "Error writing to %s: %s\n", argv[argc - 1], strerror(errno)); + fclose(pak); + return 1; + } fclose(pak);