1. 24 Jul, 2013 3 commits
  2. 23 Jul, 2013 6 commits
  3. 22 Jul, 2013 1 commit
  4. 21 Jul, 2013 4 commits
  5. 20 Jul, 2013 4 commits
  6. 19 Jul, 2013 8 commits
    • Paul Eggert's avatar
      Fix some minor file descriptor leaks and related glitches. · 3f5bef16
      Paul Eggert authored
      * filelock.c (create_lock_file) [!O_CLOEXEC]: Use fcntl with FD_CLOEXEC.
      (create_lock_file): Use write, not emacs_write.
      * image.c (slurp_file, png_load_body):
      * process.c (Fnetwork_interface_list, Fnetwork_interface_info)
      (server_accept_connection):
      Don't leak an fd on memory allocation failure.
      * image.c (slurp_file): Add a cheap heuristic for growing files.
      * xfaces.c (Fx_load_color_file): Block input around the fopen too,
      as that's what the other routines do.  Maybe input need not be
      blocked at all, but it's better to be consistent.
      Avoid undefined behavior when strlen is zero.
      3f5bef16
    • Paul Eggert's avatar
      * alloc.c (staticpro): Avoid buffer overrun on repeated calls. · 4195afc3
      Paul Eggert authored
      (NSTATICS): Now a constant; doesn't need to be a macro.
      4195afc3
    • Richard M. Stallman's avatar
    • Paul Eggert's avatar
    • Eli Zaretskii's avatar
      Fix the fix for bug #14901. · 621dd9ac
      Eli Zaretskii authored
       src/keyboard.c (kbd_buffer_get_event): Use Display_Info instead of
       unportable 'struct x_display_info'.
       (DISPLAY_LIST_INFO): Delete macro: not needed, since Display_Info
       is a portable type.
      621dd9ac
    • Paul Eggert's avatar
      * sysdep.c [GNU_LINUX]: Fix fd and memory leaks and similar issues. · ab9980cd
      Paul Eggert authored
      (procfs_ttyname): Don't use uninitialized storage if emacs_fopen
      or fscanf fails.
      (system_process_attributes): Prefer plain char to unsigned char
      when either will do.  Clean up properly if interrupted or if
      memory allocations fail.  Don't assume sscanf succeeds.  Remove
      no-longer-needed workaround to stop GCC from whining.  Read
      command-line once, instead of multiple times.  Check read status a
      bit more carefully.
      ab9980cd
    • Paul Eggert's avatar
      Fix obscure porting bug with varargs functions. · 1396ac86
      Paul Eggert authored
      The code assumed that int is treated like ptrdiff_t in a vararg
      function, which is not a portable assumption.  There was a similar
      -- though these days less likely -- porting problem with various
      assumptions that pointers of different types all smell the same as
      far as vararg functions is conserved.  To make this problem less
      likely in the future, redo the API to use varargs functions.
      * alloc.c (make_save_value): Remove this vararg function.
      All uses changed to ...
      (make_save_int_int_int, make_save_obj_obj_obj_obj)
      (make_save_ptr_int, make_save_funcptr_ptr_obj, make_save_memory):
      New functions.
      (make_save_ptr): Rename from make_save_pointer, for consistency with
      the above.  Define only on platforms that need it.  All uses changed.
      1396ac86
    • Juanma Barranquero's avatar
      c7064f05
  7. 18 Jul, 2013 6 commits
  8. 17 Jul, 2013 2 commits
    • Paul Eggert's avatar
      * lread.c: Fix file descriptor leaks and errno issues. · a0931322
      Paul Eggert authored
      (Fload): Close some races that leaked fds or streams when 'load'
      was interrupted.
      (Fload, openp): Report error number of last nontrivial failure to open.
      ENOENT counts as trivial.
      * eval.c (do_nothing, clear_unwind_protect, set_unwind_protect_ptr):
      New functions.
      * fileio.c (close_file_unwind): No need to test whether FD is nonnegative,
      now that the function is always called with a nonnegative arg.
      * lisp.h (set_unwind_protect_ptr, set_unwind_protect_int): Remove.
      All uses replaced with ...
      (clear_unwind_protect, set_unwind_protect_ptr): New decls.
      a0931322
    • Paul Eggert's avatar
      A few more minor file errno-reporting bugs. · b648c163
      Paul Eggert authored
      * callproc.c (Fcall_process):
      * doc.c (Fsnarf_documentation):
      * fileio.c (Frename_file, Fadd_name_to_file, Fmake_symbolic_link):
      * process.c (set_socket_option):
      Don't let a constructor trash errno.
      * doc.c: Include <errno.h>.
      b648c163
  9. 16 Jul, 2013 6 commits
    • Juanma Barranquero's avatar
    • Paul Eggert's avatar
      Fix w32 bug with call-process-region. · 50a30cce
      Paul Eggert authored
      * callproc.c (Fcall_process_region): Pass nil, not "/dev/null",
      to Fcall_process when the input is empty.  This simplifies the
      code a bit.  It makes no difference on POSIXish platforms but
      apparently it fixes a bug on w32.
      
      Fixes: debbugs:14885
      50a30cce
    • Paul Eggert's avatar
      Fix bug where insert-file-contents closes a file twice. · 41d48a42
      Paul Eggert authored
      * fileio.c (close_file_unwind): Don't close if FD is negative;
      this can happen when unwinding a zapped file descriptor.
      (Finsert_file_contents): Unwind-protect the fd before the point marker,
      in case Emacs runs out of memory between the two unwind-protects.
      Don't trash errno when closing FD.
      Zap the FD in the specpdl when closing it, instead of deferring
      the removal of the unwind-protect; this fixes a bug where a child
      function unwinds the stack past us.
      
      Fixes: debbugs:14839
      41d48a42
    • Paul Eggert's avatar
      New unwind-protect flavors to better type-check C callbacks. · 27e498e6
      Paul Eggert authored
      This also lessens the need to write wrappers for callbacks,
      and the need for make_save_pointer.
      * alloca.c (free_save_value):
      * atimer.c (run_all_atimers):
      Now extern.
      * alloc.c (safe_alloca_unwind):
      * atimer.c (unwind_stop_other_atimers):
      * keyboard.c (cancel_hourglass_unwind) [HAVE_WINDOW_SYSTEM]:
      * menu.c (cleanup_popup_menu) [HAVE_NS]:
      * minibuf.c (choose_minibuf_frame_1):
      * process.c (make_serial_process_unwind):
      * xdisp.h (pop_message_unwind):
      * xselect.c (queue_selection_requests_unwind):
      Remove no-longer-needed wrapper.  All uses replaced by the wrappee.
      * alloca.c (record_xmalloc):
      Prefer record_unwind_protect_ptr to record_unwind_protect with
      make_save_pointer.
      * alloca.c (Fgarbage_collect):
      Prefer record_unwind_protect_void to passing a dummy.
      * buffer.c (restore_buffer):
      * window.c (restore_window_configuration):
      * xfns.c, w32fns.c (do_unwind_create_frame)
      New wrapper.  All record-unwind uses of wrappee changed.
      * buffer.c (set_buffer_if_live):
      * callproc.c (call_process_cleanup, delete_temp_file):
      * coding.c (code_conversion_restore):
      * dired.c (directory_files_internal_w32_unwind) [WINDOWSNT]:
      * editfns.c (save_excursion_restore)
      (subst_char_in_region_unwind, subst_char_in_region_unwind_1)
      (save_restriction_restore):
      * eval.c (restore_stack_limits, un_autoload):
      * fns.c (require_unwind):
      * keyboard.c (recursive_edit_unwind, tracking_off):
      * lread.c (record_load_unwind, load_warn_old_style_backquotes):
      * macros.c (pop_kbd_macro, restore_menu_items):
      * nsfns.m (unwind_create_frame):
      * print.c (print_unwind):
      * process.c (start_process_unwind):
      * search.c (unwind_set_match_data):
      * window.c (select_window_norecord, select_frame_norecord):
      * xdisp.c (unwind_with_echo_area_buffer, unwind_format_mode_line)
      (fast_set_selected_frame):
      * xfns.c, w32fns.c (unwind_create_tip_frame):
      Return void, not a dummy Lisp_Object.  All uses changed.
      * buffer.h (set_buffer_if_live): Move decl here from lisp.h.
      * callproc.c (call_process_kill):
      * fileio.c (restore_point_unwind, decide_coding_unwind)
      (build_annotations_unwind):
      * insdel.c (Fcombine_after_change_execute_1):
      * keyboard.c (read_char_help_form_unwind):
      * menu.c (unuse_menu_items):
      * minibuf.c (run_exit_minibuf_hook, read_minibuf_unwind):
      * sound.c (sound_cleanup):
      * xdisp.c (unwind_redisplay):
      * xfns.c (clean_up_dialog):
      * xselect.c (x_selection_request_lisp_error, x_catch_errors_unwind):
      Accept no args and return void, instead of accepting and returning
      a dummy Lisp_Object.  All uses changed.
      * cygw32.c (fchdir_unwind):
      * fileio.c (close_file_unwind):
      * keyboard.c (restore_kboard_configuration):
      * lread.c (readevalllop_1):
      * process.c (wait_reading_process_output_unwind):
      Accept int and return void, rather than accepting an Emacs integer
      and returning a dummy object.  In some cases this fixes an
      unlikely bug when the corresponding int is outside Emacs integer
      range.  All uses changed.
      * dired.c (directory_files_internal_unwind):
      * fileio.c (do_auto_save_unwind):
      * gtkutil.c (pop_down_dialog):
      * insdel.c (reset_var_on_error):
      * lread.c (load_unwind):
      * xfns.c (clean_up_file_dialog):
      * xmenu.c, nsmenu.m (pop_down_menu):
      * xmenu.c (cleanup_widget_value_tree):
      * xselect.c (wait_for_property_change_unwind):
      Accept pointer and return void, rather than accepting an Emacs
      save value encapsulating the pointer and returning a dummy object.
      All uses changed.
      * editfns.c (Fformat): Update the saved pointer directly via
      set_unwind_protect_ptr rather than indirectly via make_save_pointer.
      * eval.c (specpdl_func): Remove.  All uses replaced by definiens.
      (unwind_body): New function.
      (record_unwind_protect): First arg is now a function returning void,
      not a dummy Lisp_Object.
      (record_unwind_protect_ptr, record_unwind_protect_int)
      (record_unwind_protect_void): New functions.
      (unbind_to): Support SPECPDL_UNWIND_PTR etc.
      * fileio.c (struct auto_save_unwind): New type.
      (do_auto_save_unwind): Use it.
      (do_auto_save_unwind_1): Remove; subsumed by new do_auto_save_unwind.
      * insdel.c (struct rvoe_arg): New type.
      (reset_var_on_error): Use it.
      * lisp.h (SPECPDL_UNWIND_PTR, SPECPDL_UNWIND_INT, SPECPDL_UNWIND_VOID):
      New constants.
      (specbinding_func): Remove; there are now several such functions.
      (union specbinding): New members unwind_ptr, unwind_int, unwind_void.
      (set_unwind_protect_ptr): New function.
      * xselect.c: Remove unnecessary forward decls, to simplify maintenance.
      27e498e6
    • Paul Eggert's avatar
      Be simpler and more consistent about reporting I/O errors. · 4e604a5d
      Paul Eggert authored
      * fileio.c (Fcopy_file, Finsert_file_contents, Fwrite_region):
      Say "Read error" and "Write error", rather than "I/O error", or
      "IO error reading", or "IO error writing", when a read or write
      error occurs.
      * process.c (Fmake_network_process, wait_reading_process_output)
      (send_process, Fprocess_send_eof, wait_reading_process_output):
      Capitalize diagnostics consistently.  Put "failed foo" at the
      start of the diagnostic, so that we don't capitalize the
      function name "foo".  Consistently say "failed" for such
      diagnostics.
      * sysdep.c, w32.c (serial_open): Now accepts Lisp string, not C string.
      All callers changed.  This is so it can use report_file_error.
      * sysdep.c (serial_open, serial_configure): Capitalize I/O
      diagnostics consistently as above.
      4e604a5d
    • Paul Eggert's avatar
      * fileio.c (report_file_errno): Fix errno reporting bug. · a9757f6a
      Paul Eggert authored
      If the file name is neither null nor a pair, package it up as a
      singleton list.  All callers changed, both to this function and to
      report_file_error.  This fixes a bug where the memory allocator
      invoked by list1 set errno so that the immediately following
      report_file_error reported the wrong errno value.
      a9757f6a