1. 14 Nov, 2012 1 commit
    • Paul Eggert's avatar
      Use faccessat, not access, when checking file permissions. · 73dcdb9f
      Paul Eggert authored
      This fixes a bug that has been present in Emacs since its creation.
      It was reported by Chris Torek in 1983 even before GNU Emacs existed,
      which must set some sort of record.  (Torek's bug report was against
      a predecessor of GNU Emacs, but GNU Emacs happened to have the
      same common flaw.)  See Torek's Usenet posting
      "setuid/setgid programs & Emacs" Article-I.D.: sri-arpa.858
      Posted: Fri Apr  8 14:18:56 1983.
      * .bzrignore: Add lib/fcntl.h.
      * configure.ac (euidaccess): Remove check; gnulib does this for us now.
      (gl_FCNTL_O_FLAGS): Define a dummy version.
      * lib/at-func.c, lib/euidaccess.c, lib/faccessat.c, lib/fcntl.in.h:
      * lib/getgroups.c, lib/group-member.c, lib/root-uid.h:
      * lib/xalloc-oversized.h, m4/euidaccess.m4, m4/faccessat.m4:
      * m4/fcntl_h.m4, m4/getgroups.m4, m4/group-member.m4:
      New files, from gnulib.
      * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
      * admin/merge-gnulib (GNULIB_MODULES): Add faccessat.
      (GNULIB_TOOL_FLAGS): Avoid at-internal, fchdir, malloc-posix,
      openat-die, openat-h, save-cwd.  Do not avoid fcntl-h.
      Omit gnulib's m4/fcntl-o.m4.
      * nt/inc/ms-w32.h (AT_FDCWD, AT_EACCESS): New symbols.
      (access): Remove.
      (faccessat): New macro.
      * src/Makefile.in (LIB_EACCESS): New macro.
      (LIBES): Use it.
      * src/callproc.c (init_callproc):
      * src/charset.c (init_charset):
      * src/fileio.c (check_existing, check_executable, check_writable)
      (Ffile_readable_p):
      * src/lread.c (openp, load_path_check):
      * src/process.c (allocate_pty):
      * src/xrdb.c (file_p):
      Use effective UID when checking permissions, not real UID.
      * src/callproc.c (init_callproc):
      * src/charset.c (init_charset):
      * src/lread.c (load_path_check, init_lread):
      Test whether directories are accessible, not merely whether they exist.
      * src/conf_post.h (GNULIB_SUPPORT_ONLY_AT_FDCWD): New macro.
      * src/fileio.c (check_existing, check_executable, check_writable)
      (Ffile_readable_p):
      Use symbolic names instead of integers for the flags, as they're
      portable now.
      (check_writable): New arg AMODE.  All uses changed.
      Set errno on failure.
      (Ffile_readable_p): Use faccessat, not stat + open + close.
      (Ffile_writable_p): No need to call check_existing + check_writable.
      Just call check_writable and then look at errno.  This saves a syscall.
      dir should never be nil; replace an unnecessary runtime check
      with an eassert.  When checking the parent directory of a nonexistent
      file, check that the directory is searchable as well as writable, as
      we can't create files in unsearchable directories.
      (file_directory_p): New function, which uses 'stat' on most platforms
      but faccessat with D_OK (for efficiency) if WINDOWSNT.
      (Ffile_directory_p, Fset_file_times): Use it.
      (file_accessible_directory_p): New function, which uses a single
      syscall for efficiency.
      (Ffile_accessible_directory_p): Use it.
      * src/xrdb.c (file_p): Use file_directory_p.
      * src/lisp.h (file_directory_p, file_accessible_directory_p): New decls.
      * src/lread.c (openp): When opening a file, use fstat rather than
      stat, as that avoids a permissions race.  When not opening a file,
      use file_directory_p rather than stat.
      (dir_warning): First arg is now a usage string, not a format.
      Use errno.  All uses changed.
      * src/nsterm.m (ns_term_init): Remove unnecessary call to file-readable
      that merely introduced a race.
      * src/process.c, src/sysdep.c, src/term.c: All uses of '#ifdef O_NONBLOCK'
      changed to '#if O_NONBLOCK', to accommodate gnulib O_* style,
      and similarly for the other O_* flags.
      * src/w32.c (sys_faccessat): Rename from sys_access and switch to
      faccessat's API.  All uses changed.
      * src/xrdb.c: Do not include <sys/stat.h>; no longer needed.
      (magic_db): Rename from magic_file_p.
      (magic_db, search_magic_path): Return an XrmDatabase rather than a
      char *, so that we don't have to test for file existence
      separately from opening the file for reading.  This removes a race
      fixes a permission-checking problem, and simplifies the code.
      All uses changed.
      (file_p): Remove; no longer needed.
      
      Fixes: debbugs:12632
      73dcdb9f
  2. 03 Nov, 2012 1 commit
    • Paul Eggert's avatar
      Fix data-loss with --batch. · 7ccfb720
      Paul Eggert authored
      * admin/merge-gnulib (GNULIB_MODULES): Add close-stream.
      * lib/close-stream.c, lib/close-stream.h, lib/fpending.c
      * lib/fpending.h, m4/close-stream.m4, m4/fpending.m4:
      New files, from gnulib.
      * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
      * src/emacs.c: Include <close-stream.h>.
      (close_output_streams): New function.
      (main): Pass it to atexit, so that Emacs closes stdout and stderr
      and handles errors appropriately.
      (Fkill_emacs): Don't worry about flushing, as close_output_stream
      does that now.
      
      Fixes: debbugs:9574
      7ccfb720
  3. 19 Oct, 2012 2 commits
    • Paul Eggert's avatar
      Undo faccessat change. · f0a80175
      Paul Eggert authored
      f0a80175
    • Paul Eggert's avatar
      Use faccessat, not access, when checking file permissions. · e752e0b0
      Paul Eggert authored
      * .bzrignore: Add lib/fcntl.h.
      * configure.ac (euidaccess): Remove check; gnulib does this for us now.
      (gl_FCNTL_O_FLAGS): Define a dummy version.
      * lib/at-func.c, lib/euidaccess.c, lib/faccessat.c, lib/fcntl.in.h:
      * lib/getgroups.c, lib/group-member.c, lib/root-uid.h:
      * lib/xalloc-oversized.h, m4/euidaccess.m4, m4/faccessat.m4:
      * m4/fcntl_h.m4, m4/getgroups.m4, m4/group-member.m4:
      New files, from gnulib.
      * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
      * admin/merge-gnulib (GNULIB_MODULES): Add faccessat.
      (GNULIB_TOOL_FLAGS): Avoid at-internal, fchdir, malloc-posix,
      openat-die, openat-h, save-cwd.  Do not avoid fcntl-h.
      Omit gnulib's m4/fcntl-o.m4.
      * nt/inc/ms-w32.h (AT_FDCWD, AT_EACCESS): New symbols.
      (access): Remove.
      (faccessat): New macro.
      * src/Makefile.in (LIB_EACCESS): New macro.
      (LIBES): Use it.
      * src/callproc.c (init_callproc):
      * src/charset.c (init_charset):
      * src/fileio.c (check_existing, check_executable):
      * src/lread.c (openp, load_path_check):
      * src/process.c (allocate_pty):
      * src/xrdb.c (file_p):
      Use faccessat, not access or euidaccess.  Use symbolic names
      instead of integers for the flags, as they're portable now.
      * src/charset.c, src/xrdb.c: Include <fcntl.h>, for the new flags used.
      * src/fileio.c (Ffile_readable_p):
      Use faccessat, not stat + open + close.
      (file_directory_p): New function, which uses 'stat' on most places
      but 'access' (for efficiency) if WINDOWSNT.
      * src/fileio.c (Ffile_directory_p, Fset_file_times):
      * src/xrdb.c (file_p): Use file_directory_p.
      * src/lisp.h (file_directory_p): New decl.
      * src/lread.c (openp): When opening a file, use fstat rather than
      stat, as that avoids a permissions race.  When not opening a file,
      use file_directory_p rather than stat.
      * src/process.c, src/sysdep.c, src/term.c: All uses of '#ifdef O_NONBLOCK'
      changed to '#if O_NONBLOCK', to accommodate gnulib O_* tyle.
      * src/w32.c (sys_faccessat): Rename from sys_access and switch to
      faccessat's API.  All uses changed.
      
      Fixes: debbugs:12632
      e752e0b0
  4. 27 Sep, 2012 1 commit
    • Paul Eggert's avatar
      Check more robustly for timer_settime. · a615a3ae
      Paul Eggert authored
      This should fix an OS X build problem reported by Ivan Andrus in
      <http://lists.gnu.org/archive/html/emacs-devel/2012-09/msg00671.html>.
      * admin/merge-gnulib (GNULIB_MODULES): Add timer-time.
      * configure.ac (gl_THREADLIB): Define to empty, since Emacs
      does threads its own way.
      * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
      * m4/timer_time.m4: New file, from gnulib.
      * src/atimer.c (alarm_timer, alarm_timer_ok, set_alarm, init_atimer):
      Use HAVE_TIMER_SETTIME, not SIGEV_SIGNAL, to decide whether to
      call timer_settime.
      a615a3ae
  5. 25 Aug, 2012 1 commit
    • Paul Eggert's avatar
      On assertion failure, print backtrace if available. · f4a681b0
      Paul Eggert authored
      Merge from gnulib, incorporating:
      2012-08-24 execinfo: port to FreeBSD
      2012-08-22 execinfo: new module
      * admin/merge-gnulib (GNULIB_MODULES): Add execinfo.
      * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
      * lib/execinfo.c, lib/execinfo.in.h, m4/execinfo.m4: New files.
      * src/alloc.c [ENABLE_CHECKING]: Include <execinfo.h>.
      (die) [ENABLE_CHECKING]: Print a backtrace if available.
      * src/Makefile.in (LIB_EXECINFO): New macro.
      (LIBES): Use it.
      f4a681b0
  6. 16 Aug, 2012 1 commit
    • Paul Eggert's avatar
      Use ASCII tests for character types. · 620f13b0
      Paul Eggert authored
      * admin/merge-gnulib (GNULIB_MODULES): Add c-ctype.
      * lwlib/lwlib-Xaw.c, lwlib/lwlib.c, lwlib/xlwmenu.c:
      Don't include <ctype.h>; no longer needed.
      * lwlib/lwlib-Xaw.c (openFont):
      * lwlib/xlwmenu.c (openXftFont): Test just for ASCII digits.
      * src/category.c, src/dispnew.c, src/doprnt.c, src/editfns.c, src/syntax.c
      * src/term.c, src/xfns.c, src/xterm.c:
      Don't include <ctype.h>; was not needed.
      * src/charset.c, src/doc.c, src/fileio.c, src/font.c, src/frame.c:
      * src/gtkutil.c, src/image.c, src/sysdep.c, src/xfaces.c:
      Include <c-ctype.h> instead of <ctype.h>.
      * src/nsterm.m: Include <c-ctype.h>.
      * src/charset.c (read_hex):
      * src/doc.c (Fsnarf_documentation):
      * src/fileio.c (IS_DRIVE) [WINDOWSNT]:
      (DRIVE_LETTER) [DOS_NT]:
      (Ffile_name_directory, Fexpand_file_name)
      (Fsubstitute_in_file_name):
      * src/font.c (font_parse_xlfd, font_parse_fcname):
      * src/frame.c (x_set_font_backend):
      * src/gtkutil.c (xg_get_font):
      * src/image.c (xbm_scan, xpm_scan, pbm_scan_number):
      * src/nsimage.m (hexchar):
      * src/nsterm.m (ns_xlfd_to_fontname):
      * src/sysdep.c (system_process_attributes):
      * src/xfaces.c (hash_string_case_insensitive):
      Use C-locale tests instead of locale-specific tests for character
      types, since we want the ASCII interpretation here, not the
      interpretation suitable for whatever happens to be the current locale.
      620f13b0
  7. 14 Aug, 2012 1 commit
    • Paul Eggert's avatar
      Use bool for Emacs Lisp booleans. · f5d9e83a
      Paul Eggert authored
      This is more natural, and on my platform (GCC 4.7.1 x86-64) it
      makes Emacs's text size .03% smaller and presumably a bit faster.
      * admin/merge-gnulib (GNULIB_MODULES): Add stdbool.  This documents a
      new direct dependency; stdbool was already being used indirectly
      via other gnulib modules.
      * lib-src/make-docfile.c (enum global_type): Sort values roughly in
      decreasing alignment, except put functions last.
      (compare_globals): Use this new property of enum global_type.
      (write_globals): Use bool, not int, for booleans.
      * src/lisp.h: Include <stdbool.h>.
      (struct Lisp_Boolfwd, defvar_bool):
      * src/lread.c (defvar_bool): Use bool, not int, for Lisp booleans.
      * src/regex.c [!emacs]: Include <stdbool.h>.
      (false, true): Remove; <stdbool.h> does this for us now.
      f5d9e83a
  8. 28 Jul, 2012 1 commit
    • Paul Eggert's avatar
      Use Gnulib stdalign and environ modules (Bug#9772, Bug#9960). · e32a5799
      Paul Eggert authored
      * .bzrignore: Add lib/stdalign.h.
      * config.bat: Do not set NO_DECL_ALIGN; no longer needed.
      Copy lib/stdalign.in.h to lib/stdalign.in-h as needed.
      * configure.ac (HAVE_ATTRIBUTE_ALIGNED): Remove the code that
      fiddles with this, as gnulib now does this for us.
      * admin/merge-gnulib: Add environ, stdalign.
      * m4/environ.m4: New file, from gnulib.
      * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
      * lib/stdalign.in.h, m4/stdalign.m4: New files, from gnulib.
      * sed2v2.inp (HAVE_ATTRIBUTE_ALIGNED): Remove edit.
      * sedlibmk.inp (STDALIGN_H, @GL_GENERATE_STDALIGN_H_TRUE@)
      (GL_GENERATE_STDALIGN_H_FALSE): New edits.
      * nt/config.nt (HAVE_ATTRIBUTE_ALIGNED): Remove.
      * src/alloc.c (XMALLOC_BASE_ALIGNMENT, GC_POINTER_ALIGNMENT, pure_alloc):
      Simplify by using alignof.
      (pure_alloc) [! USE_LSB_TAG]: Don't over-align EMACS_INT values.
      * src/lisp.h: Include <stdalign.h>.
      (GCALIGNMENT): New macro and constant.
      (DECL_ALIGN): Remove.  All uses replaced by alignas (GCALIGNMENT).
      (USE_LSB_TAG): ifdef on alignas, not on DECL_ALIGN.
      (stdalign): New macro, if not already defined.
      e32a5799
  9. 06 Jul, 2012 1 commit
  10. 22 Jun, 2012 1 commit
  11. 27 May, 2012 1 commit
    • Paul Eggert's avatar
      Assume gnulib does largefile. · 50c4645e
      Paul Eggert authored
      Gnulib does the largefile configuration anyway, so when configure.in
      invokes AC_SYS_LARGEFILE, that bloats 'configure' unnecessarily.
      * admin/merge-gnulib (GNULIB_MODULES): Add largefile.
      * configure.in (AC_SYS_LARGEFILE): Remove.
      * lib/gnulib.mk: Autoupdate.
      50c4645e
  12. 21 May, 2012 2 commits
    • Paul Eggert's avatar
      Use full name for m4/gnulib-comp.m4. (Bug#11529) · fb77d37e
      Paul Eggert authored
      Previously the file was named m4/gl-comp.m4 due to DOS 8+3 restrictions,
      even though the file's name in gnulib is m4/gnulib-comp.m4.
      This had a problem when merging from gnulib, as the code temporarily
      renamed it to the full name, causing problems when interrupted.
      Now the file has its full name, with the idea that we will find
      a solution for MS-DOS that does not affect the rest of Emacs.
      * m4/gnulib-comp.m4: Rename from m4/gl-comp.m4.
      * admin/merge-gnulib: Leave m4/gnulib-comp.m4's name alone.
      fb77d37e
    • Paul Eggert's avatar
      Make merging from gnulib a script, not a makefile action. · 9b4ee616
      Paul Eggert authored
      Putting it in a makefile has some problems with reflection, as
      merging from gnulib updates 'configure', which can update the makefile.
      Putting it in a standalone script breaks this loop.
      * Makefile.in (gnulib_srcdir, $(gnulib_srcdir), DOS_gnulib_comp.m4)
      (GNULIB_MODULES, GNULIB_TOOL_FLAGS, sync-from-gnulib):
      Remove, moving the actions to the script admin/merge-gnulib.
      * admin/merge-gnulib: New script, with actions moved here from
      ../Makefile.in.
      9b4ee616