Esempio n. 1
0
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;
}
Esempio n. 2
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;
}