Use fdopendir, fstatat and readlinkat, for efficiency.
[bpt/emacs.git] / src / ChangeLog
index 3727e13..2156d7f 100644 (file)
@@ -1,3 +1,263 @@
+2013-02-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Use fdopendir, fstatat and readlinkat, for efficiency (Bug#13539).
+       * conf_post.h (GNULIB_SUPPORT_ONLY_AT_FDCWD): Remove.
+       * dired.c: Include <fcntl.h>.
+       (open_directory): New function, which uses open and fdopendir
+       rather than opendir.  DOS_NT platforms still use opendir, though.
+       (directory_files_internal, file_name_completion): Use it.
+       (file_attributes): New function, with most of the old Ffile_attributes.
+       (directory_files_internal, Ffile_attributes): Use it.
+       (file_attributes, file_name_completion_stat): First arg is now fd,
+       not dir name.  All uses changed.  Use fstatat rather than lstat +
+       stat.
+       (file_attributes): Use emacs_readlinkat rather than Ffile_symlink_p.
+       * fileio.c: Include <allocator.h>, <careadlinkat.h>.
+       (emacs_readlinkat): New function, with much of the old
+       Ffile_symlink_p, but with an fd argument for speed.
+       It uses readlinkat rather than careadlinkatcwd, so that it
+       need not assume the working directory.
+       (Ffile_symlink_p): Use it.
+       * filelock.c (current_lock_owner): Use emacs_readlinkat
+       rather than emacs_readlink.
+       * lisp.h (emacs_readlinkat): New decl.
+       (READLINK_BUFSIZE, emacs_readlink): Remove.
+       * sysdep.c: Do not include <allocator.h>, <careadlinkat.h>.
+       (emacs_norealloc_allocator, emacs_readlink): Remove.
+       This stuff is moved to fileio.c.
+       * w32.c (fstatat, readlinkat): New functions.
+       (careadlinkat): Don't check that fd == AT_FDCWD.
+       (careadlinkatcwd): Remove; no longer needed.
+
+2013-01-31  Glenn Morris  <rgm@gnu.org>
+
+       * fileio.c (choose_write_coding_system): Make it callable from Lisp.
+       (Fwrite_region): Update for new choose_write_coding_system args.
+       Move the last piece of choose_write_coding_system here.  (Bug#13522)
+       (syms_of_fileio): Add choose-write-coding-system.
+
+2013-01-30  Eli Zaretskii  <eliz@gnu.org>
+
+       * w32.c (sys_open): Zero out the flags for the new file descriptor.
+       (sys_close): Zero out the flags for the file descriptor before
+       closing it.  (Bug#13546)
+
+       * w32.c (parse_root, get_volume_info, readdir, read_unc_volume)
+       (logon_network_drive, stat_worker, symlink, chase_symlinks): Use
+       CharNextExA and CharPrevExA to iterate over file names encoded in
+       DBCS.  (Bug#13553)
+
+       * w32.c (w32_get_long_filename, init_environment, readlink):
+       Support file names encoded in DBCS codepages.
+       (readlink): Use the current file-name-coding-system, not the ANSI
+       codepage, to decode and handle targets of symlinks.
+
+2013-01-28  Eli Zaretskii  <eliz@gnu.org>
+
+       * w32.c (opendir): Now accepts a 'const char *'.
+
+2013-01-28  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       Remove obsolete redisplay code.  See the discussion at
+       http://lists.gnu.org/archive/html/emacs-devel/2013-01/msg00576.html.
+       * dispnew.c (preemption_period, preemption_next_check): Remove.
+       (Vredisplay_preemption_period): Likewise.
+       (update_frame, update_single_window, update_window, update_frame_1):
+       Adjust users.  Always assume that PERIODIC_PREEMPTION_CHECKING is not
+       used, following the 2012-06-22 change.
+
+2013-01-25  Eli Zaretskii  <eliz@gnu.org>
+
+       * w32notify.c (Fw32notify_add_watch): Doc fix.  (Bug#13540)
+
+2013-01-25  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       * font.c (num_fonts): Remove the leftover from old
+       debugging code.  Adjust comment style here and there.
+       * insdel.c (insert_1): Remove.
+       * lisp.h (insert_1): Remove prototype.
+       * xdisp.c (message_dolog): Adjust users to call insert_1_both.
+
+2013-01-25  Eli Zaretskii  <eliz@gnu.org>
+
+       * w32.c (max_filename_mbslen): New function.
+       (normalize_filename, readdir): Use it to detect locales where ANSI
+       encoding of file names uses a double-byte character set (DBCS).
+       If a DBCS encoding is used, advance by characters using
+       CharNextExA, instead of incrementing a 'char *' pointer.  Use
+       _mbslwr instead of _strlwr.  (Bug#13515)
+
+       * w32heap.c (allocate_heap) [!_WIN64]: Decrease the initial
+       request of memory reservation to 1.7GB.  (Bug#13065)
+
+2013-01-25  Andreas Schwab  <schwab@linux-m68k.org>
+
+       * coding.c (detect_coding_iso_2022): Move back mis-reordered code
+       at check_extra_latin label.  (Bug#13505)
+
+2013-01-24  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       * nsfont.m (ns_escape_name, ns_unescape_name, ns_registry_to_script):
+       Avoid redundant calls to strlen.
+
+2013-01-24  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       Drop async_visible and async_iconified fields of struct frame.
+       This is possible because async input is gone; for details, see
+       http://lists.gnu.org/archive/html/emacs-devel/2012-12/msg00734.html.
+       * frame.h (struct frame): Remove async_visible and async_iconified
+       members, convert garbaged to unsigned bitfield.  Adjust comments.
+       (FRAME_SAMPLE_VISIBILITY): Remove.  Adjust all users.
+       (SET_FRAME_VISIBLE, SET_FRAME_ICONIFIED): New macros.
+       * frame.c, gtkutil.c, term.c, w32fns.c, window.c, xdisp.c:
+       Consistently use SET_FRAME_VISIBLE, SET_FRAME_ICONIFIED,
+       FRAME_VISIBLE_P and FRAME_ICONIFIED_P macros where appropriate.
+       * w32term.c: Ditto.
+       (w32_read_socket): Save iconified state to generate DEICONIFY_EVENT
+       properly.  Likewise for obscured.
+       * xterm.c: Ditto.
+       (handle_one_xevent): Save visible state to generate ICONIFY_EVENT
+       properly.
+       * nsterm.m: Ditto.
+       (windowDidDeminiaturize): Generate DEICONIFY_EVENT.
+
+2013-01-24  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       * insdel.c (prepare_to_modify_buffer): Revert last change as suggested
+       in http://lists.gnu.org/archive/html/emacs-devel/2013-01/msg00555.html.
+
+2013-01-23  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * xdisp.c (message2, message2_nolog): Remove functions.
+       (message3, message3_nolog): Extract nbytes and multibyteness directly
+       from the string.  Change all callers.
+       (message3_nolog): Don't set message_enable_multibyte since set_message
+       will reset it anyway.
+       (message1, message1_nolog): Use message3.
+       (vmessage): Use a stack allocated buffer rather than f->message_buf.
+       (with_echo_area_buffer): Remove last two arguments.  Update all callers.
+       (set_message): Drop all but the second arg, which has to be a string.
+       (set_message_1): Simplify now that we know that a1 is NULL and the
+       second arg is a string.
+       * frame.h (struct frame): Remove `message_buf' field.
+       Use glyphs_initialized_p instead.
+       (FRAME_MESSAGE_BUF): Remove macro.
+       * w16select.c (Fw16_set_clipboard_data): Prefer message3 to message2.
+       * lisp.h (message2, message2_nolog): Remove declarations.
+       (message3, message3_nolog): Update declarations.
+       * keyboard.c (read_char_minibuf_menu_text)
+       (read_char_minibuf_menu_width): Remove vars.
+       (read_char_minibuf_menu_prompt): Rewrite the menu's construction so as
+       to correctly handle multibyte strings.
+       * frame.c (delete_frame): Don't free message_buf any more.
+       * editfns.c (message_text, message_length): Remove vars.
+       (Fmessage_box): Don't copy the Lisp string's bytes any longer.
+       * fileio.c (auto_save_error): Use message3 instead of message2.
+       * dispnew.c (adjust_frame_message_buffer): Remove function.
+
+2013-01-23  Eli Zaretskii  <eliz@gnu.org>
+
+       * w32term.c (w32fullscreen_hook): Account correctly for the screen
+       real estate used for the tool bar and the menu bar.
+
+2013-01-23  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       * insdel.c (prepare_to_modify_buffer): Force redisplay if
+       hidden buffer is prepared to modification (Bug#13164).
+
+2013-01-22  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       * window.h (struct window): Change window_end_valid member from
+       Lisp_Object to a bitfield.  Adjust comments.
+       (wset_window_end_valid): Remove.
+       * window.c (adjust_window_count): Clear window_end_valid.
+       (Fwindow_end): Adjust user.  Remove ancient #if 0 code.
+       (Fwindow_line_height, set_window_buffer, Frecenter)
+       (Fsplit_window_internal, Fdelete_other_windows_internal)
+       (Fset_window_fringes, Fset_window_scroll_bars): Adjust users.
+       * dispnew.c (adjust_glyph_matrix, clear_window_matrices): Likewise.
+       * xdisp.c (check_window_end, reconsider_clip_changes)
+       (redisplay_internal, mark_window_display_accurate_1, redisplay_window)
+       (try_window, try_window_reusing_current_matrix, note_mouse_highlight)
+       (find_first_unchanged_at_end_row, try_window_id): Likewise.
+
+2013-01-22  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       * xdisp.c (mark_window_display_accurate): Simplify the loop
+       assuming that the only one of vchild, hchild or buffer window
+       slots is non-nil.  Call mark_window_display_accurate_1 for
+       the leaf windows only.
+       (mark_window_display_accurate_1): Always assume leaf window.
+       Adjust comment.
+
+2013-01-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * emacs.c (Qkill_emacs_hook): Now static.
+
+       * fileio.c (Finsert_file_contents): Simplify.
+       Remove unnecessary assignments and tests.
+
+2013-01-21  Eli Zaretskii  <eliz@gnu.org>
+
+       * w32.c (acl_set_file): Don't test for errors unless
+       set_file_security returns FALSE.  Avoids spurious errors when
+       saving files.
+
+2013-01-21  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       * fileio.c (Finsert_file_contents): Revert code introduced at
+       2013-01-18 in favor of the simpler and generally better fix.
+       Save stack space by removing 'buffer' and reusing 'read_buf'
+       where appropriate.
+
+2013-01-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * lisp.h (eabs): Define unconditionally (Bug#13419).
+       The old "#if !defined (eabs)" was an unnecessary revenant of back
+       when this macro was called "abs".  Document 'eabs' better.
+
+2013-01-19  Glenn Morris  <rgm@gnu.org>
+
+       * fns.c (Frandom): Doc fix.
+
+2013-01-19  Eli Zaretskii  <eliz@gnu.org>
+
+       * editfns.c (get_pos_property): Use SAFE_ALLOCA_LISP, to avoid
+       segfault when there are lots of overlays.
+
+       * buffer.c (sort_overlays): Use SAFE_NALLOCA, to avoid segfault
+       when there are lots of overlays.  See
+       http://lists.gnu.org/archive/html/emacs-devel/2013-01/msg00421.html
+       for the details and a way to reproduce.
+
+2013-01-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * fileio.c: Use O_APPEND to append.
+       This corresponds better to the natural interpretation of "append",
+       and avoids the need to open the output file twice, or to invoke
+       lseek when APPEND is neither nil nor a number.
+       This relies on POSIX 1003.1-1988 or later, which is OK nowadays.
+       (Fwrite_region): Simplify.  Use O_APPEND instead of opening the
+       file possibly twice, and lseeking to its end; this avoids the
+       need to lseek on non-regular files.  Do not use O_EXCL and O_TRUNC
+       at the same time: the combination is never needed and apparently
+       it doesn't work with DOS_NT.
+
+       Fix size bug on DOS_NT introduced by CIFS workaround (Bug#13149).
+       * fileio.c (Fwrite_region): Use O_BINARY in checking code, too.
+
+       Allow floating-point file offsets.
+       Problem reported by Vitalie Spinu in
+       <http://lists.gnu.org/archive/html/emacs-devel/2013-01/msg00411.html>.
+       * fileio.c (emacs_lseek): Remove.
+       (file_offset): New function.
+       (Finsert_file_contents, Fwrite_region): Use it.
+
+2013-01-19  Chong Yidong  <cyd@gnu.org>
+
+       * emacs.c (Fkill_emacs): Set waiting_for_input to 0 to avoid
+       aborting on Fsignal (Bug#13289).
+
 2013-01-19  Eli Zaretskii  <eliz@gnu.org>
 
        * w32.c (acl_set_file): Treat ERROR_ACCESS_DENIED from