X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/bacba3c26522ef297662bace31947d3e4f47c87a..35e1f9d9fcbaab51808e05f514e63927f959ae51:/src/unexaix.c diff --git a/src/unexaix.c b/src/unexaix.c index 45b3ca667b..fd36e4a73a 100644 --- a/src/unexaix.c +++ b/src/unexaix.c @@ -1,5 +1,5 @@ /* Dump an executable image. - Copyright (C) 1985-1988, 1999, 2001-2013 Free Software Foundation, + Copyright (C) 1985-1988, 1999, 2001-2014 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -55,7 +55,6 @@ what you give them. Help stamp out software-hoarding! */ #include #include #include -#include #include #include #include @@ -94,13 +93,10 @@ static int pagemask; static _Noreturn void report_error (const char *file, int fd) { + int err = errno; if (fd) - { - int failed_errno = errno; - emacs_close (fd); - errno = failed_errno; - } - report_file_error ("Cannot unexec", Fcons (build_string (file), Qnil)); + emacs_close (fd); + report_file_errno ("Cannot unexec", build_string (file), err); } #define ERROR0(msg) report_error_1 (new, msg) @@ -137,7 +133,7 @@ unexec (const char *new_name, const char *a_name) { PERROR (a_name); } - if ((new = emacs_open (new_name, O_WRONLY | O_CREAT | O_TRUNC, 0666)) < 0) + if ((new = emacs_open (new_name, O_WRONLY | O_CREAT | O_TRUNC, 0777)) < 0) { PERROR (new_name); } @@ -155,7 +151,6 @@ unexec (const char *new_name, const char *a_name) emacs_close (new); if (a_out >= 0) emacs_close (a_out); - mark_x (new_name); } /* **************************************************************** @@ -382,7 +377,7 @@ copy_text_and_data (int new) char *ptr; lseek (new, text_scnptr, SEEK_SET); - ptr = _text + text_scnptr; + ptr = _text; end = ptr + f_ohdr.tsize; write_segment (new, ptr, end); @@ -469,29 +464,6 @@ copy_sym (int new, int a_out, const char *a_name, const char *new_name) return 0; } -/* **************************************************************** - * mark_x - * - * After successfully building the new a.out, mark it executable - */ -static void -mark_x (const char *name) -{ - struct stat sbuf; - int um; - int new = 0; /* for PERROR */ - - um = umask (777); - umask (um); - if (stat (name, &sbuf) == -1) - { - PERROR (name); - } - sbuf.st_mode |= 0111 & ~um; - if (chmod (name, sbuf.st_mode) == -1) - PERROR (name); -} - static int adjust_lnnoptrs (int writedesc, int readdesc, const char *new_name) { @@ -609,7 +581,7 @@ unrelocate_symbols (int new, int a_out, PERROR (a_name); } - p = (int *) (ldrel.l_vaddr + d_reloc); + p = (int *) (intptr_t) (ldrel.l_vaddr + d_reloc); switch (ldrel.l_symndx) { case SYMNDX_TEXT: