1. 18 Jul, 2013 6 commits
  2. 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
  3. 16 Jul, 2013 10 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
    • Paul Eggert's avatar
      Fix minor problems found by --enable-gcc-warnings. · c43843aa
      Paul Eggert authored
      * frame.c (Fhandle_focus_in, Fhandle_focus_out): Return a value.
      * keyboard.c (kbd_buffer_get_event): Remove unused local.
      c43843aa
    • Jan Djärv's avatar
      Stop cursor blink after blink-cursor-blinks (10), stop timers when not blinking. · 18c26d81
      Jan Djärv authored
      * etc/NEWS: Document blink-cursor-blinks and blink timers stopped.
      
      * lisp/frame.el (blink-cursor-blinks): New defcustom.
      (blink-cursor-blinks-done): New defvar.
      (blink-cursor-start): Set blink-cursor-blinks-done to 1.
      (blink-cursor-timer-function): Check if number of blinks has been
      done on X and NS.
      (blink-cursor-suspend, blink-cursor-check): New defuns.
      
      * src/frame.c (Fhandle_focus_in, Fhandle_focus_out): New functions.
      (Fhandle_switch_frame): Call Fhandle_focus_in.
      (syms_of_frame): defsubr handle-focus-in/out.
      
      * src/keyboard.c (Qfocus_in, Qfocus_out): New static objects.
      (make_lispy_focus_in, make_lispy_focus_out): Declare and define.
      (kbd_buffer_get_event): For FOCUS_IN, make a focus_in event if no
      switch frame event is made.  Check ! NILP (event->arg) if X11 (moved
      from xterm.c). Make focus_out event for FOCUS_OUT_EVENT if NS or X11
      and there is a focused frame.
      (head_table): Add focus-in and focus-out.
      (keys_of_keyboard): Add focus-in and focus-out to Vspecial_event_map,
      bind to handle-focus-in/out.
      
      * src/nsterm.m (windowDidResignKey): If this is the focused frame, generate
      FOCUS_OUT_EVENT.
      
      * src/termhooks.h (enum event_kind): Add FOCUS_OUT_EVENT.
      
      * src/xterm.c (x_focus_changed): Always generate FOCUS_IN_EVENT.
      Set event->arg to Qt if switch-event shall be generated.
      Generate FOCUS_OUT_EVENT for FocusOut if this is the focused frame.
      18c26d81
    • Paul Eggert's avatar
      Fix porting bug to older POSIXish platforms. · c7ddc792
      Paul Eggert authored
      * sysdep.c (emacs_pipe): New function, that implements
      pipe2 (fd, O_CLOEXEC) even on hosts that lack O_CLOEXEC.
      This should port better to CentOS 5 and to Mac OS X 10.6.
      All calls to pipe2 changed.
      
      Fixes: debbugs:14862
      c7ddc792
    • Paul Eggert's avatar
      Prefer list1 (X) to Fcons (X, Qnil) when building lists. · 6c6f1994
      Paul Eggert authored
      This makes the code easier to read and the executable a bit smaller.
      Do not replace all calls to Fcons that happen to create lists,
      just calls that are intended to create lists.  For example, when
      creating an alist that maps FOO to nil, use list1 (Fcons (FOO, Qnil))
      rather than list1 (list1 (FOO)) or Fcons (Fcons (FOO, Qnil), Qnil).
      Similarly for list2 through list5.
      * buffer.c (Fget_buffer_create, Fmake_indirect_buffer):
      * bytecode.c (exec_byte_code):
      * callint.c (quotify_arg, Fcall_interactively):
      * callproc.c (Fcall_process, create_temp_file):
      * charset.c (load_charset_map_from_file)
      (Fdefine_charset_internal, init_charset):
      * coding.c (get_translation_table, detect_coding_system)
      (Fcheck_coding_systems_region)
      (Fset_terminal_coding_system_internal)
      (Fdefine_coding_system_internal, Fdefine_coding_system_alias):
      * composite.c (update_compositions, Ffind_composition_internal):
      * dired.c (directory_files_internal, file_name_completion)
      (Fsystem_users):
      * dispnew.c (Fopen_termscript, bitch_at_user, init_display):
      * doc.c (Fsnarf_documentation):
      * editfns.c (Fmessage_box):
      * emacs.c (main):
      * eval.c (do_debug_on_call, signal_error, maybe_call_debugger)
      (Feval, eval_sub, Ffuncall, apply_lambda):
      * fileio.c (make_temp_name, Fcopy_file, Faccess_file)
      (Fset_file_selinux_context, Fset_file_acl, Fset_file_modes)
      (Fset_file_times, Finsert_file_contents)
      (Fchoose_write_coding_system, Fwrite_region):
      * fns.c (Flax_plist_put, Fyes_or_no_p, syms_of_fns):
      * font.c (font_registry_charsets, font_parse_fcname)
      (font_prepare_cache, font_update_drivers, Flist_fonts):
      * fontset.c (Fset_fontset_font, Ffontset_info, syms_of_fontset):
      * frame.c (make_frame, Fmake_terminal_frame)
      (x_set_frame_parameters, x_report_frame_params)
      (x_default_parameter, Fx_parse_geometry):
      * ftfont.c (syms_of_ftfont):
      * image.c (gif_load):
      * keyboard.c (command_loop_1):
      * keymap.c (Fmake_keymap, Fmake_sparse_keymap, access_keymap_1)
      (Fcopy_keymap, append_key, Fcurrent_active_maps)
      (Fminor_mode_key_binding, accessible_keymaps_1)
      (Faccessible_keymaps, Fwhere_is_internal):
      * lread.c (read_emacs_mule_char):
      * menu.c (find_and_return_menu_selection):
      * minibuf.c (get_minibuffer):
      * nsfns.m (Fns_perform_service):
      * nsfont.m (ns_script_to_charset):
      * nsmenu.m (ns_popup_dialog):
      * nsselect.m (ns_get_local_selection, ns_string_from_pasteboard)
      (Fx_own_selection_internal):
      * nsterm.m (append2):
      * print.c (Fredirect_debugging_output)
      (print_prune_string_charset):
      * process.c (Fdelete_process, Fprocess_contact)
      (Fformat_network_address, set_socket_option)
      (read_and_dispose_of_process_output, write_queue_push)
      (send_process, exec_sentinel):
      * sound.c (Fplay_sound_internal):
      * textprop.c (validate_plist, add_properties)
      (Fput_text_property, Fadd_face_text_property)
      (copy_text_properties, text_property_list, syms_of_textprop):
      * unexaix.c (report_error):
      * unexcoff.c (report_error):
      * unexsol.c (unexec):
      * xdisp.c (redisplay_tool_bar, store_mode_line_string)
      (Fformat_mode_line, syms_of_xdisp):
      * xfaces.c (set_font_frame_param)
      (Finternal_lisp_face_attribute_values)
      (Finternal_merge_in_global_face, syms_of_xfaces):
      * xfns.c (x_default_scroll_bar_color_parameter)
      (x_default_font_parameter, x_create_tip_frame):
      * xfont.c (xfont_supported_scripts):
      * xmenu.c (Fx_popup_dialog, xmenu_show, xdialog_show)
      (menu_help_callback, xmenu_show):
      * xml.c (make_dom):
      * xterm.c (set_wm_state):
      Prefer list1 (FOO) to Fcons (FOO, Qnil) when creating a list,
      and similarly for list2 through list5.
      6c6f1994
  4. 15 Jul, 2013 1 commit
    • Paul Eggert's avatar
      * callproc.c (Fcall_process_region): Fix minor race and tune. · bafe80ce
      Paul Eggert authored
      (create_temp_file): New function, with the temp-file-creation part
      of the old Fcall_process_region.  Use Fcopy_sequence to create the
      temp file name, rather than alloca + build_string, for simplicity.
      Don't bother to block input around the temp file creation;
      shouldn't be needed.  Simplify use of mktemp.  Use
      record_unwind_protect immediately after creating the temp file;
      this closes an unlikely race where the temp file was not removed.
      Use memcpy rather than an open-coded loop.
      (Fcall_process_region): Use the new function.  If the input is
      empty, redirect from /dev/null rather than from a newly created
      empty temp file; this avoids unnecessary file system traffic.
      bafe80ce
  5. 14 Jul, 2013 2 commits
  6. 13 Jul, 2013 4 commits
  7. 12 Jul, 2013 4 commits
    • Paul Eggert's avatar
      Clean up errno reporting and fix some errno-reporting bugs. · a773ed9a
      Paul Eggert authored
      * callproc.c (Fcall_process):
      * fileio.c (Fcopy_file, Finsert_file_contents, Fwrite_region):
      * process.c (create_process, Fmake_network_process):
      * unexaix.c (report_error):
      * unexcoff.c (report_error):
      Be more careful about reporting the errno of failed operations.
      The code previously reported the wrong errno sometimes.
      Also, prefer report_file_errno to setting errno + report_file_error.
      (Fcall_process): Look at openp return value rather than at path,
      as that's a bit faster and clearer when there's a numeric predicate.
      * fileio.c (report_file_errno): New function, with most of the
      old contents of report_file_error.
      (report_file_error): Use it.
      (Ffile_exists_p, Ffile_accessible_directory_p):
      Set errno to 0 when it is junk.
      * fileio.c (Faccess_file):
      * image.c (x_create_bitmap_from_file):
      Use faccessat rather than opening the file, to avoid the hassle of
      having a file descriptor open.
      * lisp.h (report_file_errno): New decl.
      * lread.c (Flocate_file_internal): File descriptor 0 is valid, too.
      a773ed9a
    • Paul Eggert's avatar
      Minor EBADF fixes. · 7e649856
      Paul Eggert authored
      * process.c (create_process, wait_reading_process_output) [AIX]:
      Remove obsolete SIGHUP-related  code, as Emacs no longer disables
      SIGHUP, so EBADF is no longer acceptable here (it wouldn't work in
      a multithreaded environment anyway).
      * sysdep.c (emacs_close): It's not dangerous to invoke emacs_close (-1).
      7e649856
    • Andreas Schwab's avatar
    • Paul Eggert's avatar
      Fix races with threads and file descriptors. · bacba3c2
      Paul Eggert authored
      * configure.ac (PTY_TTY_NAME_SPRINTF): Use emacs_close, not close.
      * src/callproc.c (Fcall_process_region):
      * src/dired.c (open_directory):
      * src/emacs.c (main, Fdaemon_initialized):
      * src/image.c (x_find_image_file):
      * src/inotify.c (Finotify_rm_watch):
      * src/lread.c (Flocate_file_internal):
      * src/process.c (Fnetwork_interface_list, Fnetwork_interface_info):
      * src/term.c (term_mouse_moveto, init_tty):
      * src/termcap.c (tgetent):
      * src/unexaix.c, src/unexcoff.c (report_error, report_error_1, adjust_lnnoptrs)
      * src/unexaix.c, src/unexcoff.c, src/unexcw.c, src/unexelf.c (unexec):
      * src/unexhp9k800.c, src/unexmacosx.c (unexec):
      * src/callproc.c (Fcall_process_region):
      Use emacs_close, not close.
      * src/sysdep.c (POSIX_CLOSE_RESTART, posix_close) [!POSIX_CLOSE_RESTART]:
      New macro and function, which emulates the POSIX_CLOSE_RESTART macro
      and posix_close function on current platforms (which all lack them).
      (emacs_close): Use it.  This should fix the races on GNU/Linux and
      on AIX and on future platforms that support POSIX_CLOSE_RESTART,
      and it should avoid closing random victim file descriptors on
      other platforms.
      bacba3c2
  8. 11 Jul, 2013 3 commits
    • Paul Eggert's avatar
      * inotify.c (uninitialized): Remove. All uses replaced by -1. · c8536ec4
      Paul Eggert authored
      (Finotify_add_watch): Simplify, since -1 means uninitialized now.
      Touch up doc a bit.
      c8536ec4
    • Paul Eggert's avatar
      * eval.c (backtrace_function, backtrace_args): Now EXTERNALLY_VISIBLE. · 9c203066
      Paul Eggert authored
      This is for .gdbinit xbacktrace.
      9c203066
    • Paul Eggert's avatar
      * sysdep.c, term.c, termcap.c, terminal.c: Integer-related minor fixes. · 653d4f43
      Paul Eggert authored
      * sysdep.c (emacs_get_tty): Return void, since nobody uses the value.
      (emacs_set_tty): Now static.
      * sysdep.c (emacs_set_tty, tabs_safe_p, emacs_close):
      * term.c (tty_capable_p, tty_default_color_capabilities)
      (get_tty_terminal, term_mouse_movement)
      (handle_one_term_event, init_tty, maybe_fatal):
      * termcap.c (tgetst1, struct termcap_buffer, valid_filename_p)
      (tgetent, scan_file, name_match, compare_contin):
      * terminal.c (get_terminal):
      Use bool for boolean.
      * sysdep.c (init_system_name): Don't overflow stack on huge hostname.
      Prefer char to unsigned char if either will do.
      * term.c (OUTPUT, turn_on_face): Omit unnecessary casts to int.
      (tty_write_glyphs): Prefer int to unsigned.
      (produce_glyphless_glyph): Remove 2nd (unused) int arg.
      All callers changed.
      * termcap.c (tprint, main) [TEST]: Remove non-working test.
      653d4f43
  9. 10 Jul, 2013 4 commits
    • Paul Eggert's avatar
      Port to C89. · 29abe551
      Paul Eggert authored
      * lib-src/ebrowse.c (USAGE): Remove macro with too-long string literal ...
      (usage_message): ... and replace it with this new static constant
      containing multiple literals.  All uses changed.
      * lib-src/emacsclient.c (print_help_and_exit):
      Rewrite to avoid string literals longer than the C89 limits.
      (start_daemon_and_retry_set_socket):
      Rewrite to avoid non-constant array initializer.
      * lib-src/make-docfile.c (enum global_type): Omit trailing comma.
      * src/bytecode.c (BYTE_CODE_THREADED): Do not define if __STRICT_ANSI__.
      (B__dummy__): New dummy symbol, to pacify C89.
      * src/dbusbind.c (XD_DEBUG_MESSAGE): Omit debugging on C89 hosts, since
      they can't grok varargs macros.
      * src/dispnew.c (add_window_display_history)
      (add_frame_display_history):
      * src/print.c (print_object):
      * src/xdisp.c (debug_method_add):
      Use %p printf format only for void pointers.
      * src/emacs.c (usage_message): New constant, replacing ...
      (USAGE1, USAGE2, USAGE3): Remove; they were too long for C89.
      (main): Adjust to usage reorg.
      * src/fns.c (syms_of_fns):
      * src/profiler.c (syms_of_profiler):
      Don't use non-constant struct initializers.
      * src/gnutls.h (gnutls_initstage_t):
      * src/lisp.h (enum Lisp_Fwd_Type):
      * src/lread.c (lisp_file_lexically_bound_p):
      * src/xsettings.c (anonymous enum):
      Remove trailing comma.
      * src/xsettings.c (apply_xft_settings): Use %f, not %lf; %lf is a C99ism.
      * src/lisp.h (ENUM_BF): Use unsigned if pedantic.
      (DEFUN_FUNCTION_INIT): New macro, that falls back on a cast if pre-C99.
      (DEFUN): Use it.
      * src/regex.c (const_re_char): New type, to pacify strict C89.
      All uses of 'const re_char' replaced to use it.
      * src/regex.h (_Restrict_): Rename from __restrict, to avoid clash
      with glibc when strict C89.  This change is imported from gnulib.
      All uses changed.
      (_Restrict_arr_): Rename from __restrict_arr, similarly.
      * src/sysdep.c (time_from_jiffies) [!HAVE_LONG_LONG_INT]:
      Omit GNU_LINUX implementation, since it requires long long.
      * src/xterm.c (x_draw_underwave):
      Do not assume the traditional order of struct's members.
      (x_term_init): Rewrite to avoid the need for non-constant structure
      initializers.
      29abe551
    • Paul Eggert's avatar
      Syntax cleanup, mostly replacing macros with functions. · 45b683a1
      Paul Eggert authored
      This removes the need for the syntax_temp hack.
      * search.c: Include syntax.h after buffer.h, since syntax.h uses BVAR.
      * syntax.c (SYNTAX_INLINE): New macro.
      (SYNTAX_FLAGS_COMSTART_FIRST, SYNTAX_FLAGS_COMSTART_SECOND)
      (SYNTAX_FLAGS_COMEND_FIRST, SYNTAX_FLAGS_COMEND_SECOND)
      (SYNTAX_FLAGS_PREFIX, SYNTAX_FLAGS_COMMENT_STYLEB)
      (SYNTAX_FLAGS_COMMENT_STYLEC, SYNTAX_FLAGS_COMMENT_STYLEC2)
      (SYNTAX_FLAGS_COMMENT_NESTED, SYNTAX_FLAGS_COMMENT_STYLE)
      (SYNTAX_COMEND_FIRST): Now functions, not macros.
      (ST_COMMENT_STYLE, ST_STRING_STYLE, INTERVALS_AT_ONCE):
      Now constants, not macros.
      (syntax_temp) [!__GNUC__]: Remove.
      (SYNTAX_PREFIX): Remove; all uses replaced by syntax_prefix_flag_p.
      (syntax_prefix_flag_p): Move implementation of SYNTAX_PREFIX here.
      (SET_RAW_SYNTAX_ENTRY, SET_RAW_SYNTAX_ENTRY_RANGE, SYNTAX_MATCH)
      (SETUP_SYNTAX_TABLE, SETUP_SYNTAX_TABLE_FOR_OBJECT):
      Move here from syntax.h; now functions, not macros.  Except for the
      last function, these are static since only syntax.c uses them.
      (syntax_multibyte): Rename from SYNTAX_WITH_MULTIBYTE_CHECK.
      All uses changed.  Now a function, not a macro; use this fact
      to simplify the code.
      (scan_lists, scan_sexps_forward): Remove workarounds for ancient
      compiler bugs; no longer relevant.
      * syntax.h: Use INLINE_HEADER_BEGIN, INLINE_HEADER_END.
      (SYNTAX_INLINE): New macro.
      (struct gl_state_s, gl_state): Move earlier, so that it's in scope
      for the new functions.  Use bool for boolean member.
      (SYNTAX_ENTRY, SYNTAX, SYNTAX_WITH_FLAGS, SYNTAX_MATCH)
      (SYNTAX_TABLE_BYTE_TO_CHAR, UPDATE_SYNTAX_TABLE_FORWARD)
      (UPDATE_SYNTAX_TABLE_BACKWARD, UPDATE_SYNTAX_TABLE)
      (SETUP_BUFFER_SYNTAX_TABLE):
      Now extern inline functions, not macros.
      (CURRENT_SYNTAX_TABLE, SYNTAX_ENTRY_INT):
      Remove; all uses replaced by implementation.
      (syntax_temp) [!__GNUC__]: Remove decl.
      (SETUP_SYNTAX_TABLE_FOR_OBJECT): New decl.
      45b683a1
    • Jan Djärv's avatar
      * emacs.c (main): Fix syntax error. · 29be4a50
      Jan Djärv authored
      29be4a50
    • Paul Eggert's avatar
      Timestamp fixes for undo. · 954b166e
      Paul Eggert authored
      * doc/lispref/text.texi (Undo):
      Document (t . 0) and (t . -1) in buffer-undo-list.
      * etc/NEWS: Changes to visited-file-modtime, set-visited-file-modtime.
      * lisp/files.el (clear-visited-file-modtime): Move here from fileio.c.
      * src/atimer.c (schedule_atimer):
      * src/fileio.c (Ffile_newer_than_file_p):
      Minor cleanup: use EMACS_TIME_LT so that we can remove EMACS_TIME_GT.
      * src/buffer.c (buffer-undo-list): Document (t . 0) and (t . -1).
      * src/fileio.c (Fclear_visited_file_modtime): Move to lisp/files.el.
      (syms_of_fileio): Remove Sclear_visited_file_name.
      (Fvisited_file_modtime): Return -1, not (-1 ...), when the visited
      file doesn't exist; this avoids an ambiguity with negative timestamps.
      (Fset_visited_file_modtime): Accept -1 and 0 as time-list arg.
      * src/systime.h (make_emacs_time, invalid_emacs_time):
      Don't assume struct timespec layout; POSIX doesn't guarantee it.
      (EMACS_TIME_NE, EMACS_TIME_GT, EMACS_TIME_GE): Remove.
      * src/undo.c (record_first_change): Push (visited-file-modtime) onto
      undo list rather than reimplementing it by hand, incorrectly.
      
      Fixes: debbugs:14824
      954b166e
  10. 09 Jul, 2013 3 commits
    • Ken Brown's avatar
    • Juanma Barranquero's avatar
    • Paul Eggert's avatar
      Handle errno and exit status a bit more carefully. · 4ebbdd67
      Paul Eggert authored
      * lib/ignore-value.h: Remove this gnulib-imported file.
      * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
      * admin/merge-gnulib (GNULIB_MODULES): Remove ignore-value.
      * src/callproc.c (child_setup) [!DOS_NT]: Don't try to stuff an error
      number into an exit status.  Instead, use EXIT_CANCELED.
      (child_setup) [!MSDOS]: Avoid possible deadlock with vfork.
      * src/callproc.c (relocate_fd):
      * src/emacs.c (close_output_streams, main):
      * src/process.c (create_process):
      * src/sysdep.c (sys_subshell) [!DOS_NT || !WINDOWSNT]:
      Use emacs_perror for simplicity.
      * src/callproc.c (relocate_fd, main):
      * src/sysdep.c (sys_subshell):
      Exit with EXIT_CANCELED etc., not 1, when exec setup fails.
      (shut_down_emacs): Use emacs_write, not write.
      * src/emacs.c, src/sysdep.c: Don't include <ignore-value.h>.
      * src/fileio.c (Fcopy_file, e_write):
      * src/nsterm.m (ns_select):
      * src/process.c (send_process):
      * src/sound.c (vox_write):
      Use emacs_write_sig, not emacs_write.
      * src/lisp.h (emacs_write_sig, emacs_perror): New decls.
      * src/process.h (EXIT_CANCELED), EXIT_CANNOT_INVOKE, EXIT_ENOENT):
      New constants.
      * src/sysdep.c (emacs_backtrace): Use emacs_write, not ignore_value
      of write.
      (emacs_full_write): New function.
      (emacs_write): Rewrite to use it.
      (emacswrite_sig, emacs_perror): New functions.
      * src/xrdb.c (fatal): Don't invoke perror, since errno might be garbage.
      4ebbdd67
  11. 08 Jul, 2013 1 commit