int convert(const char *filename) { FILE *p, *f; char buffer[1024]; size_t rsize; p = fopen(filename, "r"); if (!p) { fprintf(stderr, "Cannot open \"%s\" for reading: %s\n", filename, strerror(errno)); exit(1); } f = tmpfile(); if (!f) { fprintf(stderr, "Cannot open temporary file for writing: %s\n", strerror(errno)); exit(1); } dump_to_pie(f, p, filename); fclose(p); // Now copy temporary file to original rewind(f); p = fopen(filename, "w"); while (!feof(f) && !ferror(p) && !ferror(f)) { rsize = fread(buffer, 1, sizeof(buffer), f); fwrite(buffer, rsize, 1, p); } if (ferror(f)) fprintf(stderr, "Error reading: %s\n", strerror(ferror(f))); if (ferror(p)) fprintf(stderr, "Error writing: %s\n", strerror(ferror(p))); fclose(p); fclose(f); // also deletes temporary file return 0; }
int main(int argc, char **argv) { FILE *p, *f; char buffer[1024]; size_t rsize; parse_args(argc, argv); p = fopen(input, "r"); if (!p) { fprintf(stderr, "Cannot open \"%s\" for reading: %s\n", input, strerror(errno)); exit(1); } f = tmpfile(); if (!f) { fprintf(stderr, "Cannot open temporary file for writing: %s\n", strerror(errno)); exit(1); } #ifdef _WIN32 if (verbose) { // Should it be / on Linux? //char *fname = strrchr(input, '/'); char *fname = strrchr(input, '\\'); if (fname && *(fname + 1)) { fname++; } else { fname = input; } printf("PIE: %s ", fname); } #endif dump_to_pie(f, p); fclose(p); if (verbose) { printf("\n"); } // Now copy temporary file to original rewind(f); p = fopen(input, "w"); while (!feof(f) && !ferror(p) && !ferror(f)) { rsize = fread(buffer, 1, sizeof(buffer), f); fwrite(buffer, rsize, 1, p); } if (ferror(f)) fprintf(stderr, "Error reading: %s\n", strerror(ferror(f))); if (ferror(p)) fprintf(stderr, "Error writing: %s\n", strerror(ferror(p))); fclose(p); fclose(f); // also deletes temporary file return 0; }