summaryrefslogtreecommitdiffstats
path: root/historic/makehole.c
diff options
context:
space:
mode:
Diffstat (limited to 'historic/makehole.c')
-rw-r--r--historic/makehole.c140
1 files changed, 0 insertions, 140 deletions
diff --git a/historic/makehole.c b/historic/makehole.c
deleted file mode 100644
index 6c337db01..000000000
--- a/historic/makehole.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/* makehole.c - original by HJ Lu */
-
-/* Patched by faith@cs.unc.edu, Wed Oct 6 18:01:39 1993 based on
- information from Michael Bischoff <mbi@mo.math.nat.tu-bs.de> (Fri, 18
- Jun 93 10:10:19 +0200). */
-
-#include <unistd.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <a.out.h>
-
-#define BUFSIZE 1024
-#undef DEBUG
-
-void usage(char *name, char *message)
-{
- if (message)
- fprintf(stderr, "%s: %s\n", name, message);
-
- if (errno)
- perror(name);
-
- fprintf(stderr, "Usage:%s Imagefile\n", name);
- exit(1);
-}
-
-int ishole(char *buf, int size)
-{
- int i;
-
- for (i = 0; i < size; i++)
- if (buf[i])
- return 0;
-
- return 1;
-}
-
-void main(int argc, char *argv[])
-{
- char buf[BUFSIZE];
- char tmp_file[64];
- int fdin, fdout;
- int ret;
- int abs_offset;
- int hole;
- struct exec *header = (struct exec *) buf;
-
-#ifndef DEBUG
- if (geteuid()) {
- fprintf(stderr, "%s: must be root to run!\n", *argv);
- exit(1);
- }
-#endif
-
- switch (argc) {
- case 2:
- break;
- default:
- usage(*argv, NULL);
- }
-
- errno = 0;
-
- sprintf( tmp_file, "hole%d", getpid() );
- if (tmp_file == NULL) {
- usage(*argv, "Unable to get a temporary image filename!");
- }
-#ifdef DEBUG
- else {
- fprintf(stderr, "Temparory image file: %s\n", tmp_file);
- }
-#endif
-
- errno = 0;
- fdin = open(argv[1], O_RDONLY);
- if (fdin == -1) {
- usage(*argv, "unable to open file.");
- }
- fprintf(stderr, "Making holes in %s...\n", argv[1]);
-
- errno = 0;
-
- if ((ret = read(fdin, header, BUFSIZE)) != BUFSIZE
- || N_MAGIC(*header) != ZMAGIC) {
- usage(*argv, "file must be pure executable.");
- }
-
- fdout = creat(tmp_file, 0555);
- if (fdout == -1) {
- perror("Unable to create the temparory image file!");
- exit(1);
- }
- if (write(fdout, header, ret) != ret) {
- perror("Fail to write header to the temparory image file!");
- unlink(tmp_file);
- exit(1);
- }
- abs_offset = ret;
- hole = 0;
- while ((ret = read(fdin, buf, BUFSIZE)) > 0) {
- abs_offset += ret;
- if (ishole(buf, ret)) {
-#ifdef DEBUG
- fprintf(stderr, "There is a %d byte hole from 0x%x to 0x%x.\n", ret, abs_offset - ret, abs_offset);
-#endif
- hole += ret;
- if (lseek(fdout, abs_offset, SEEK_SET) != abs_offset) {
- perror("Fail to make a hole in the temparory image file!");
- unlink(tmp_file);
- exit(1);
- }
- } else {
-#ifdef DEBUG
- fprintf(stderr, "Writing %d bytes from 0x%x to 0x%x.\n", ret, abs_offset - ret, abs_offset);
-#endif
- if (write(fdout, buf, ret) != ret) {
- perror("Fail to write the temparory image file!");
- unlink(tmp_file);
- exit(1);
- }
- }
- }
-
- if (ftruncate(fdout, abs_offset)) {
- perror("Fail to truncate the temparory image file!");
- unlink(tmp_file);
- exit(1);
- }
- close(fdout);
- close(fdin);
-
- if (rename(tmp_file, argv[1])) {
- perror("Fail to rename the temparory image file to the old image file!");
- unlink(tmp_file);
- exit(1);
- }
- fprintf(stderr, "There are %d byte holes out of %d bytes in `%s'.\n", hole, abs_offset, argv[1]);
-}