V10/local/fix.c

Compare this file to the similar file:
Show the results in this format:

#include <stdio.h>
#include <sys/types.h>
#include <a.out.h>
char *malloc();
main(argc, argv)
char **argv;
{
	char *memt, *memd;
	struct exec a;

	argc--, argv++;
	while (argc > 0) {
		close(0);
		if (open(argv[0], 0) < 0)
			perror(argv[0]);
		else {
			read(0, &a, sizeof(a));
			if (a.a_magic != 0413)
				fprintf(stderr, "%s: %o file\n", argv[0], a.a_magic);
			else {
				memt = malloc(a.a_text);
				memd = malloc(a.a_data);
				lseek(0, (long)1024, 0);
				read(0, memt, a.a_text);
				read(0, memd, a.a_data);
				close(1);
				if (creat(argv[0], 0777) < 0)
					perror(argv[0]);
				else {
					a.a_magic = 0410;
					a.a_syms = 0;
					write(1, &a, sizeof (a));
					write(1, memt, a.a_text);
					write(1, memd, a.a_data);
					free(memt);
					free(memd);
				}
				fprintf(stderr, "%s: fixed\n", argv[0]);
			}
		}
		argc--, argv++;
	}
}