- signal(SIGHUP, SIG_IGN);
- signal(SIGINT, SIG_IGN);
- signal(SIGQUIT, SIG_IGN);
- tname = mktemp("/tmp/sXXXXX");
- close(creat(tname, 0600));
- tf = open(tname, 2);
- if(tf < 0) {
- printf("cannot create temp file\n");
- exit(2);
- }
- for(i=1; i<argc; i++) {
- strip(argv[i]);
- if(status > 1)
- break;
- }
- close(tf);
- unlink(tname);
- exit(status);
-}
-
-strip(name)
-char *name;
-{
- register f;
- long size;
- int i;
-
- f = open(name, 0);
- if(f < 0) {
- perror(name);
- status = 1;
- goto out;
- }
- read(f, (char *)&head, sizeof(head));
- if (N_BADMAG(head)) {
- printf("%s not in a.out format\n", name);
- status = 1;
- goto out;
- }
- if ((head.a_syms == 0) && (head.a_trsize == 0) && (head.a_drsize ==0)) {
- printf("%s already stripped\n", name);
- goto out;
- }
- size = (long)head.a_text + head.a_data;
- head.a_syms = head.a_trsize = head.a_drsize = 0 ;
- lseek(tf, (long)0, 0);
- write(tf, (char *)&head, sizeof(head));
- if (head.a_magic == ZMAGIC)
- size += pagesize - sizeof (head);
- if (copy(name, f, tf, size)) {
- status = 1;
- goto out;
- }
- size += sizeof(head);
- close(f);
- f = creat(name, 0666);
- if(f < 0) {
- printf("%s cannot recreate\n", name);
- status = 1;
- goto out;
+ while (*++argv) {
+ if ((fd = open(*argv, O_RDWR)) < 0 ||
+ (n = read(fd, (char *)&head, sizeof(EXEC))) == -1)
+ error(*argv);
+ if (n != sizeof(EXEC) || N_BADMAG(head)) {
+ fprintf(stderr, "strip: %s not in a.out format.\n",
+ *argv);
+ exit(1);
+ }
+ if (!head.a_syms && !head.a_trsize && !head.a_drsize) {
+ fprintf(stderr, "strip: %s already stripped.\n", *argv);
+ continue;
+ }
+ fsize = head.a_text + head.a_data;
+ if (head.a_magic == ZMAGIC)
+ fsize += pagesize - sizeof(EXEC);
+ head.a_syms = head.a_trsize = head.a_drsize = 0;
+ if (ftruncate(fd, fsize + sizeof(EXEC)) ||
+ lseek(fd, 0L, L_SET) == -1 ||
+ write(fd, (char *)&head, sizeof(EXEC)) != sizeof(EXEC))
+ error(*argv);
+ (void)close(fd);