X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/acacb2920929152a02f5836d39189b04cea08202..d113efea8e0a56aedd60615f5dc6669c72aca77f:/src/unexnext.c diff --git a/src/unexnext.c b/src/unexnext.c index 1cf41ca05a..50a0448d7b 100644 --- a/src/unexnext.c +++ b/src/unexnext.c @@ -30,7 +30,10 @@ Boston, MA 02111-1307, USA. */ #include #include #include -#include +#include +/* Instead of unistd.h, this used to include libc.h. + "Nelson H. F. Beebe" says that doesn't work + in system version 3.3. */ int malloc_cookie; @@ -41,7 +44,7 @@ int malloc_cookie; * pages it vm_allocated and write only those out into the data segment. * * This kludge may break when we stop using fixed virtual address - * shared libraries. Actually, emacs will probably continue working, but be + * shared libraries. Actually, emacs will probably continue working, but be * much larger on disk than it needs to be (because non-malloced data will * be in the file). */ @@ -70,7 +73,7 @@ grow( *the_commands = malloc(sizeof(*the_commands)); } else { (*the_commands_len)++; - *the_commands = realloc(*the_commands, + *the_commands = realloc(*the_commands, (*the_commands_len * sizeof(**the_commands))); } @@ -122,7 +125,7 @@ read_macho( return (0); } for (i = 0; i < the_header->ncmds; i++) { - if (read(fd, &command, sizeof(struct load_command)) != + if (read(fd, &command, sizeof(struct load_command)) != sizeof(struct load_command)) { fatal_unexec("cannot read macho load command header"); return (0); @@ -135,8 +138,8 @@ read_macho( buf = malloc(command.cmdsize); buf->cmd = command.cmd; buf->cmdsize = command.cmdsize; - if (read(fd, ((char *)buf + - sizeof(struct load_command)), + if (read(fd, ((char *)buf + + sizeof(struct load_command)), size) != size) { fatal_unexec("cannot read load command data"); return (0); @@ -181,31 +184,31 @@ get_data_region( region.address = 0; *address = 0; for (;;) { - ret = vm_region(task_self(), - ®ion.address, - ®ion.size, - ®ion.protection, - ®ion.max_protection, + ret = vm_region(task_self(), + ®ion.address, + ®ion.size, + ®ion.protection, + ®ion.max_protection, ®ion.inheritance, - ®ion.shared, - ®ion.object_name, + ®ion.shared, + ®ion.object_name, ®ion.offset); if (ret != KERN_SUCCESS || region.address >= VM_HIGHDATA) { break; } if (*address != 0) { if (region.address > *address + *size) { - if (!filldatagap(*address, size, + if (!filldatagap(*address, size, region.address)) { return (0); } - } + } *size += region.size; } else { if (region.address == sect->addr) { *address = region.address; *size = region.size; - } + } } region.address += region.size; } @@ -290,7 +293,7 @@ unexec_doit( if (strcmp(segment->segname, SEG_DATA) == 0) { fdatastart = segment->fileoff; fdatasize = segment->filesize; - fgrowth = (data_size - + fgrowth = (data_size - segment->filesize); segment->vmsize = data_size; segment->filesize = data_size; @@ -329,37 +332,37 @@ unexec_doit( break; } } - + /* * Write header */ - if (write(outfd, &the_header, + if (write(outfd, &the_header, sizeof(the_header)) != sizeof(the_header)) { fatal_unexec("cannot write output file"); return (0); } - + /* * Write commands */ for (i = 0; i < the_commands_len; i++) { - if (write(outfd, the_commands[i], - the_commands[i]->cmdsize) != + if (write(outfd, the_commands[i], + the_commands[i]->cmdsize) != the_commands[i]->cmdsize) { fatal_unexec("cannot write output file"); return (0); } } - + /* * Write original text */ - if (lseek(infd, the_header.sizeofcmds + sizeof(the_header), + if (lseek(infd, the_header.sizeofcmds + sizeof(the_header), L_SET) < 0) { fatal_unexec("cannot seek input file"); return (0); } - size = fdatastart - (sizeof(the_header) + + size = fdatastart - (sizeof(the_header) + the_header.sizeofcmds); buf = my_malloc(size); if (read(infd, buf, size) != size) { @@ -372,17 +375,17 @@ unexec_doit( return (0); } my_free(buf, size); - - + + /* * Write new data */ - if (write(outfd, (char *)data_address, + if (write(outfd, (char *)data_address, data_size) != data_size) { fatal_unexec("cannot write output file"); return (0); } - + } /* @@ -421,7 +424,7 @@ unexec_doit( fatal_unexec("cannot seek input file"); return (0); } - + for (i = 0; i < nextrel; i++) { long zeroval = 0; @@ -479,7 +482,7 @@ unexec( fatal_unexec("cannot open input file `%s'", infile); exit(1); } - + tmpnam(tmpbuf); tmpfile = rindex(tmpbuf, '/'); if (tmpfile == NULL) { @@ -507,3 +510,6 @@ unexec( exit(1); } } + +/* arch-tag: 9796bdc3-c050-417a-b2f5-4cfd31032634 + (do not change this comment) */