aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2014-12-20 13:11:40 -0800
committerPaul Eggert2014-12-20 13:12:20 -0800
commit9b14d8b6f259a4d602f0c61689d6641e7ab20b49 (patch)
treef631a2165d1201cb75ed3e362464a5ae2610bfc5 /src
parentb459f1f0b970b640bbc1f3827115a18be2dcef7f (diff)
downloademacs-9b14d8b6f259a4d602f0c61689d6641e7ab20b49.tar.gz
emacs-9b14d8b6f259a4d602f0c61689d6641e7ab20b49.zip
Simplify unexec file mode setting
* unexaix.c, unexcoff.c, unexelf.c, unexmacosx.c: Don't include <sys/stat.h> when no longer needed. (unexec): Create file with correct mode in the first place, rather than overwriting the mode later and fiddling with the global umask in the mean time. Avoid bogus usage like 'umask (777)', which should have been 'umask (0777)'. (mark_x): Remove. All callers removed.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog11
-rw-r--r--src/unexaix.c27
-rw-r--r--src/unexcoff.c27
-rw-r--r--src/unexelf.c12
-rw-r--r--src/unexmacosx.c2
5 files changed, 15 insertions, 64 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 819c88bc3a0..e21d9ee05e1 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,14 @@
12014-12-20 Paul Eggert <eggert@cs.ucla.edu>
2
3 Simplify unexec file mode setting
4 * unexaix.c, unexcoff.c, unexelf.c, unexmacosx.c:
5 Don't include <sys/stat.h> when no longer needed.
6 (unexec): Create file with correct mode in the first place,
7 rather than overwriting the mode later and fiddling with the
8 global umask in the mean time. Avoid bogus usage like
9 'umask (777)', which should have been 'umask (0777)'.
10 (mark_x): Remove. All callers removed.
11
12014-12-19 Paul Eggert <eggert@cs.ucla.edu> 122014-12-19 Paul Eggert <eggert@cs.ucla.edu>
2 13
3 Minor cleanups for Lisp objects and symbols 14 Minor cleanups for Lisp objects and symbols
diff --git a/src/unexaix.c b/src/unexaix.c
index c97d5cae2a8..fd36e4a73a6 100644
--- a/src/unexaix.c
+++ b/src/unexaix.c
@@ -55,7 +55,6 @@ what you give them. Help stamp out software-hoarding! */
55#include <inttypes.h> 55#include <inttypes.h>
56#include <stdarg.h> 56#include <stdarg.h>
57#include <stdio.h> 57#include <stdio.h>
58#include <sys/stat.h>
59#include <errno.h> 58#include <errno.h>
60#include <unistd.h> 59#include <unistd.h>
61#include <fcntl.h> 60#include <fcntl.h>
@@ -134,7 +133,7 @@ unexec (const char *new_name, const char *a_name)
134 { 133 {
135 PERROR (a_name); 134 PERROR (a_name);
136 } 135 }
137 if ((new = emacs_open (new_name, O_WRONLY | O_CREAT | O_TRUNC, 0666)) < 0) 136 if ((new = emacs_open (new_name, O_WRONLY | O_CREAT | O_TRUNC, 0777)) < 0)
138 { 137 {
139 PERROR (new_name); 138 PERROR (new_name);
140 } 139 }
@@ -152,7 +151,6 @@ unexec (const char *new_name, const char *a_name)
152 emacs_close (new); 151 emacs_close (new);
153 if (a_out >= 0) 152 if (a_out >= 0)
154 emacs_close (a_out); 153 emacs_close (a_out);
155 mark_x (new_name);
156} 154}
157 155
158/* **************************************************************** 156/* ****************************************************************
@@ -466,29 +464,6 @@ copy_sym (int new, int a_out, const char *a_name, const char *new_name)
466 return 0; 464 return 0;
467} 465}
468 466
469/* ****************************************************************
470 * mark_x
471 *
472 * After successfully building the new a.out, mark it executable
473 */
474static void
475mark_x (const char *name)
476{
477 struct stat sbuf;
478 int um;
479 int new = 0; /* for PERROR */
480
481 um = umask (777);
482 umask (um);
483 if (stat (name, &sbuf) == -1)
484 {
485 PERROR (name);
486 }
487 sbuf.st_mode |= 0111 & ~um;
488 if (chmod (name, sbuf.st_mode) == -1)
489 PERROR (name);
490}
491
492static int 467static int
493adjust_lnnoptrs (int writedesc, int readdesc, const char *new_name) 468adjust_lnnoptrs (int writedesc, int readdesc, const char *new_name)
494{ 469{
diff --git a/src/unexcoff.c b/src/unexcoff.c
index 0e47bdd8656..292c38f7ff7 100644
--- a/src/unexcoff.c
+++ b/src/unexcoff.c
@@ -97,7 +97,6 @@ struct aouthdr
97#include <sys/types.h> 97#include <sys/types.h>
98#endif /* makedev */ 98#endif /* makedev */
99#include <stdio.h> 99#include <stdio.h>
100#include <sys/stat.h>
101#include <errno.h> 100#include <errno.h>
102 101
103#include <sys/file.h> 102#include <sys/file.h>
@@ -439,29 +438,6 @@ copy_sym (int new, int a_out, const char *a_name, const char *new_name)
439 return 0; 438 return 0;
440} 439}
441 440
442/* ****************************************************************
443 * mark_x
444 *
445 * After successfully building the new a.out, mark it executable
446 */
447static void
448mark_x (const char *name)
449{
450 struct stat sbuf;
451 int um;
452 int new = 0; /* for PERROR */
453
454 um = umask (777);
455 umask (um);
456 if (stat (name, &sbuf) == -1)
457 {
458 PERROR (name);
459 }
460 sbuf.st_mode |= 0111 & ~um;
461 if (chmod (name, sbuf.st_mode) == -1)
462 PERROR (name);
463}
464
465 441
466/* 442/*
467 * If the COFF file contains a symbol table and a line number section, 443 * If the COFF file contains a symbol table and a line number section,
@@ -542,7 +518,7 @@ unexec (const char *new_name, const char *a_name)
542 { 518 {
543 PERROR (a_name); 519 PERROR (a_name);
544 } 520 }
545 if ((new = emacs_open (new_name, O_WRONLY | O_CREAT | O_TRUNC, 0666)) < 0) 521 if ((new = emacs_open (new_name, O_WRONLY | O_CREAT | O_TRUNC, 0777)) < 0)
546 { 522 {
547 PERROR (new_name); 523 PERROR (new_name);
548 } 524 }
@@ -560,7 +536,6 @@ unexec (const char *new_name, const char *a_name)
560 emacs_close (new); 536 emacs_close (new);
561 if (a_out >= 0) 537 if (a_out >= 0)
562 emacs_close (a_out); 538 emacs_close (a_out);
563 mark_x (new_name);
564} 539}
565 540
566#endif /* not CANNOT_DUMP */ 541#endif /* not CANNOT_DUMP */
diff --git a/src/unexelf.c b/src/unexelf.c
index 0983f8f23ab..34478e0edb7 100644
--- a/src/unexelf.c
+++ b/src/unexelf.c
@@ -665,7 +665,6 @@ unexec (const char *new_name, const char *old_name)
665#endif 665#endif
666 struct stat stat_buf; 666 struct stat stat_buf;
667 off_t old_file_size; 667 off_t old_file_size;
668 int mask;
669 668
670 /* Open the old file, allocate a buffer of the right size, and read 669 /* Open the old file, allocate a buffer of the right size, and read
671 in the file contents. */ 670 in the file contents. */
@@ -799,7 +798,7 @@ unexec (const char *new_name, const char *old_name)
799 the image of the new file. Set pointers to various interesting 798 the image of the new file. Set pointers to various interesting
800 objects. */ 799 objects. */
801 800
802 new_file = emacs_open (new_name, O_RDWR | O_CREAT, 0666); 801 new_file = emacs_open (new_name, O_RDWR | O_CREAT, 0777);
803 if (new_file < 0) 802 if (new_file < 0)
804 fatal ("Can't creat (%s): %s", new_name, strerror (errno)); 803 fatal ("Can't creat (%s): %s", new_name, strerror (errno));
805 804
@@ -1319,13 +1318,4 @@ temacs:
1319 1318
1320 if (emacs_close (new_file) != 0) 1319 if (emacs_close (new_file) != 0)
1321 fatal ("Can't close (%s): %s", new_name, strerror (errno)); 1320 fatal ("Can't close (%s): %s", new_name, strerror (errno));
1322
1323 if (stat (new_name, &stat_buf) != 0)
1324 fatal ("Can't stat (%s): %s", new_name, strerror (errno));
1325
1326 mask = umask (777);
1327 umask (mask);
1328 stat_buf.st_mode |= 0111 & ~mask;
1329 if (chmod (new_name, stat_buf.st_mode) != 0)
1330 fatal ("Can't chmod (%s): %s", new_name, strerror (errno));
1331} 1321}
diff --git a/src/unexmacosx.c b/src/unexmacosx.c
index 2e1ac880d2a..89971bb8a77 100644
--- a/src/unexmacosx.c
+++ b/src/unexmacosx.c
@@ -1267,7 +1267,7 @@ unexec (const char *outfile, const char *infile)
1267 unexec_error ("cannot open input file `%s'", infile); 1267 unexec_error ("cannot open input file `%s'", infile);
1268 } 1268 }
1269 1269
1270 outfd = emacs_open (outfile, O_WRONLY | O_TRUNC | O_CREAT, 0755); 1270 outfd = emacs_open (outfile, O_WRONLY | O_TRUNC | O_CREAT, 0777);
1271 if (outfd < 0) 1271 if (outfd < 0)
1272 { 1272 {
1273 emacs_close (infd); 1273 emacs_close (infd);