#include "lzw.h" #include #include #include int decompress(char* filename) { char* outfilename; FILE *fp, *outfp; int i; unsigned int ifnlen, ofnlen; fp = fopen(filename, "rb"); if (fp == NULL) { perror("fopen()"); return -1; } /* NOLINTBEGIN(clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling) */ ifnlen = strlen(filename); ofnlen = ifnlen + 5; outfilename = (char*)malloc(ofnlen); strncpy(outfilename, filename, ofnlen); for (i = ifnlen - 1; i > 0 && outfilename[i] != '/'; i--) if (outfilename[i] == '.') { outfilename[i] = '\0'; break; } if (strcmp(filename, outfilename) == 0) strncat(outfilename, ".out", ofnlen); /* NOLINTEND(clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling) */ printf("Writing to %s\n", outfilename); outfp = fopen(outfilename, "wb"); if (outfp == NULL) { perror("fopen()"); free(outfilename); return -1; } lzw_decompress_file(fp, outfp); free(outfilename); fclose(outfp); fclose(fp); return 0; } int main(int argc, char* argv[]) { int i; for (i = 1; i < argc; i++) { printf("Decompressing %s\n", argv[i]); decompress(argv[i]); } return EXIT_SUCCESS; }