+2011-05-14 Eli Zaretskii <eliz@gnu.org>
+
+ * xdisp.c (compute_display_string_pos): Non-trivial implementation.
+ (compute_display_string_end): New function.
+ (push_it): Accept second argument POSITION, where pop_it should
+ jump to continue iteration.
+
+ * dispextern.h (compute_display_string_end): Declare prototype.
+
+ * bidi.c (bidi_resolve_explicit_1): Use ZV for disp_pos.
+ (bidi_fetch_char): Implement support for runs of characters
+ covered by display strings.
+
+ * bidi.c (bidi_fetch_char): Accept also character position
+ corresponding to BYTEPOS. DISP_POS is now a character position,
+ not a byte position. All callers changed.
+ (bidi_cache_iterator_state, bidi_resolve_explicit_1)
+ (bidi_resolve_explicit, bidi_resolve_weak)
+ (bidi_level_of_next_char, bidi_move_to_visually_next): Abort if
+ bidi_it->nchars is non-positive.
+ (bidi_level_of_next_char): Don't try to lookup the cache for the
+ next/previous character if nothing is cached there yet, or if we
+ were just reseat()'ed to a new position.
+ (bidi_paragraph_init, bidi_resolve_explicit_1)
+ (bidi_level_of_next_char): Fix arguments in the calls to
+ bidi_fetch_char.
+
+2011-05-10 Eli Zaretskii <eliz@gnu.org>
+
+ * xdisp.c (compute_display_string_pos): New function.
+ (reseat_1): Initialize bidi_it.disp_pos.
+
+ * bidi.c (bidi_copy_it): Use offsetof.
+ (bidi_fetch_char, bidi_fetch_char_advance): New functions.
+ (bidi_cache_search, bidi_cache_iterator_state)
+ (bidi_paragraph_init, bidi_resolve_explicit, bidi_resolve_weak)
+ (bidi_level_of_next_char, bidi_move_to_visually_next): Support
+ character positions inside a run of characters covered by a
+ display string.
+ (bidi_paragraph_init, bidi_resolve_explicit_1)
+ (bidi_level_of_next_char): Call bidi_fetch_char and
+ bidi_fetch_char_advance instead of FETCH_CHAR and
+ FETCH_CHAR_ADVANCE.
+ (bidi_init_it): Initialize new members.
+ (LRE_CHAR, RLE_CHAR, PDF_CHAR, LRO_CHAR, RLO_CHAR): Remove macro
+ definitions.
+ (bidi_explicit_dir_char): Lookup character type in bidi_type_table,
+ instead of using explicit *_CHAR codes.
+ (bidi_resolve_explicit, bidi_resolve_weak): Use
+ FETCH_MULTIBYTE_CHAR instead of FETCH_CHAR, as reordering of
+ bidirectional text is supported only in multibyte buffers.
+
+ * dispextern.h (struct bidi_it): New members nchars and disp_pos.
+ ch_len is now EMACS_INT.
+ (compute_display_string_pos): Declare prototype.
+
+2011-05-09 Andreas Schwab <schwab@linux-m68k.org>
+
+ * w32menu.c (set_frame_menubar): Fix submenu allocation.
+
+2011-05-07 Eli Zaretskii <eliz@gnu.org>
+
+ * w32console.c (Fset_screen_color): Doc fix.
+ (Fget_screen_color): New function.
+ (syms_of_ntterm): Defsubr it.
+
+ * callproc.c (call_process_cleanup): Don't close and unlink the
+ temporary file if Fcall_process didn't create it in the first
+ place.
+ (Fcall_process): Don't create tempfile if stdout of the child
+ process will be redirected to a file specified with `:file'.
+ Don't try to re-open tempfile in that case, and set fd[0] to -1 as
+ cue to call_process_cleanup not to close that handle.
+
+2011-05-07 Ben Key <bkey76@gmail.com>
+
+ * makefile.w32-in: The bootstrap-temacs rule now makes use of
+ one of two shell specific rules, either bootstrap-temacs-CMD or
+ bootstrap-temacs-SH. The bootstrap-temacs-SH rule is identical
+ to the previous implementation of the bootstrap-temacs rule.
+ The bootstrap-temacs-CMD rule is similar to the previous
+ implementation of the bootstrap-temacs rule except that it
+ makes use of the ESC_CFLAGS variable instead of the CFLAGS
+ variable.
+
+ These changes, along with some changes to nt/configure.bat,
+ nt/gmake.defs, and nt/nmake.defs, are required to extend my
+ earlier fix to add support for --cflags and --ldflags options
+ that include quotes so that it works whether make uses cmd or
+ sh as the shell.
+
+2011-05-06 Michael Albinus <michael.albinus@gmx.de>
+
+ * dbusbind.c (QCdbus_type_unix_fd): Declare static.
+ (xd_remove_watch): Don't check QCdbus_type_unix_fd for SYMBOLP, it
+ is a constant.
+ (Fdbus_init_bus, xd_read_queued_messages): Bus can be a symbol or
+ a string. Handle both cases.
+ (Fdbus_call_method_asynchronously, Fdbus_register_signal)
+ (Fdbus_register_method): Use Qinvalid_function.
+
+2011-05-06 Juanma Barranquero <lekktu@gmail.com>
+
+ * makefile.w32-in: Update dependencies.
+ (LISP_H): Add inttypes.h and stdin.h.
+ (PROCESS_H): Add unistd.h.
+
+2011-05-06 Eli Zaretskii <eliz@gnu.org>
+
+ * lread.c: Include limits.h (fixes the MS-Windows build broken by
+ 2011-05-06T07:13:19Z!eggert@cs.ucla.edu).
+
+2011-05-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ * image.c (Finit_image_library) [!HAVE_NTGUI]: Omit unused local.
+
+ * term.c (vfatal): Remove stray call to va_end.
+ It's not needed and the C Standard doesn't allow it here anyway.
+
+ Use C99's va_copy to avoid undefined behavior on x86-64 GNU/Linux.
+ * eval.c (verror): doprnt a copy of ap, not the original. (Bug#8545)
+
+ * eval.c (verror): OK to create a string of up to MOST_POSITIVE_FIXNUM
+ bytes.
+
+ * term.c: Don't include <stdarg.h>, as <lisp.h> does that.
+
+ * callproc.c (Fcall_process): Use 'volatile' to avoid vfork clobbering.
+
+ * process.c (Fformat_network_address): Fix typo: args2 -> *args2.
+
+ * xmenu.c (set_frame_menubar): Fix typo: int * -> int (3 times).
+
+ * coding.c (detect_coding_charset): Fix typo: * 2 -> *4 (Bug#8601).
+
+ * charset.h (struct charset.code_space): Now has 15 elements, not 16.
+ * charset.c (Fdefine_charset_internal): Don't initialize
+ charset.code_space[15]. The value was garbage, on hosts with
+ 32-bit int (Bug#8600).
+
+ * lread.c (read_integer): Be more consistent with string-to-number.
+ Use string_to_number to do the actual conversion; this avoids
+ rounding errors and fixes some other screwups. Without this fix,
+ for example, #x1fffffffffffffff was misread as -2305843009213693952.
+ (digit_to_number): Move earlier, for benefit of read_integer.
+ Return -1 if the digit is out of range for the base, -2 if it is
+ not a digit in any supported base. (Bug#8602)
+
+ * doprnt.c (doprnt): Support arbitrary pI values, such as "I64".
+
+ * dispnew.c (scrolling_window): Return 1 if we scrolled,
+ to match comment at start of function. This also removes a
+ GCC warning about overflow in a 32+64-bit port.
+
+ * lisp.h (EMACS_INT, EMACS_UINT, BITS_PER_EMACS_INT, pI): Simplify.
+
+ * dbusbind.c: Do not use XPNTR on a value that may be an integer.
+ Reported by Stefan Monnier in
+ <http://lists.gnu.org/archive/html/emacs-devel/2011-04/msg00919.html>.
+ (xd_remove_watch, Fdbus_init_bus, xd_read_queued_messages): Use
+ SYMBOLP-guarded XSYMBOL, not XPNTR.
+
+ * lisp.h (EMACS_INTPTR): Remove. All uses changed to intptr_t.
+ (EMACS_UINTPTR): Likewise, with uintptr_t.
+
+ * lisp.h: Prefer 64-bit EMACS_INT if available.
+ (EMACS_INT, EMACS_UINT, BITS_PER_EMACS_INT, pI): Define to 64-bit
+ on 32-bit hosts that have 64-bit int, so that they can access
+ large files.
+ However, temporarily disable this change unless the temporary
+ symbol WIDE_EMACS_INT is defined.
+
+ * lread.c, process.c: Do not include <inttypes.h>; lisp.h does it now.
+
+ Prefer intptr_t/uintptr_t for integers the same widths as pointers.
+ This removes an assumption that EMACS_INT and long are the same
+ width as pointers. The assumption is true for Emacs porting targets
+ now, but we want to make other targets possible.
+ * lisp.h: Include <inttypes.h>, for INTPTR_MAX, UINTPTR_MAX.
+ (EMACS_INTPTR, EMACS_UINTPTR): New macros.
+ In the rest of the code, change types of integers that hold casted
+ pointers to EMACS_INTPTR and EMACS_UINTPTR, systematically
+ replacing EMACS_INT, long, EMACS_UINT, and unsigned long.
+ (XTYPE): Don't cast arg to EMACS_UINT; normally is not needed.
+ (XSET): Cast type of XTYPE arg to EMACS_INTPTR; it is needed here.
+ No need to cast type when ORing.
+ (XPNTR): Return a value of type EMACS_INTPTR or EMACS_UINTPTR.
+ * alloc.c (lisp_align_malloc): Remove a no-longer-needed cast.
+ * doc.c (store_function_docstring): Use EMACS_INTPTR, so as not to
+ assume EMACS_INT is the same width as char *.
+ * gtkutil.c (xg_gtk_scroll_destroy, xg_tool_bar_button_cb):
+ (xg_tool_bar_callback, xg_tool_bar_help_callback, xg_make_tool_item):
+ Remove no-longer-needed casts.
+ (xg_create_scroll_bar, xg_tool_bar_button_cb, xg_tool_bar_callback):
+ (xg_tool_bar_help_callback, xg_make_tool_item):
+ Use EMACS_INTPTR to hold an integer
+ that will be cast to void *; this can avoid a GCC warning
+ if EMACS_INT is not the same width as void *.
+ * menu.c (find_and_call_menu_selection): Remove no-longer-needed cast.
+ * xdisp.c (display_echo_area_1, resize_mini_window_1):
+ (current_message_1, set_message_1):
+ Use a local to convert to proper width without a cast.
+ * xmenu.c (dialog_selection_callback): Likewise.
+
+ * sysdep.c (get_random): Don't assume EMACS_INT is no wider than long.
+ Also, don't assume VALBITS / RAND_BITS is less than 5,
+ and don't rely on undefined behavior when shifting a 1 left into
+ the sign bit.
+ * lisp.h (get_random): Change signature to match.
+
+ * lread.c (hash_string): Use size_t, not int, for hash computation.
+ Normally we prefer signed values; but hashing is special, because
+ it's better to use unsigned division on hash table sizes so that
+ the remainder is nonnegative. Also, size_t is the natural width
+ for hashing into memory. The previous code used 'int', which doesn't
+ retain enough info to hash well into very large tables.
+ (oblookup, oblookup_last_bucket_number, Funintern): Likewise.
+
+ * dbusbind.c: Don't possibly lose pointer info when converting.
+ (xd_remove_watch, Fdbus_init_bus, xd_read_queued_messages):
+ Use XPNTR rather than XHASH, so that the high-order bits of
+ the pointer aren't lost when converting through void *.
+
+ * eval.c (Fautoload): Don't double-shift a pointer.
+
+ * fns.c (Frandom): Let EMACS_UINT be wider than unsigned long.
+
+2011-05-06 Juanma Barranquero <lekktu@gmail.com>
+
+ * gnutls.c (DEF_GNUTLS_FN):
+ * image.c (DEF_IMGLIB_FN): Make function pointers static.
+
+2011-05-05 Andreas Schwab <schwab@linux-m68k.org>
+
+ * lread.c (lisp_file_lexically_bound_p): Stop scanning at end
+ marker. (Bug#8610)
+
+2011-05-05 Eli Zaretskii <eliz@gnu.org>
+
+ * w32heap.c (allocate_heap) [USE_LISP_UNION_TYPE || USE_LSB_TAG]:
+ New version that can reserve upto 2GB of heap space.
+
+2011-05-05 Chong Yidong <cyd@stupidchicken.com>
+
+ * nsfns.m (Fns_read_file_name): Doc fix (Bug#8534).
+
+2011-05-05 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnutls.c (fn_gnutls_certificate_set_x509_key_file): Add alias to
+ `gnutls_certificate_set_x509_key_file'.
+
+2011-05-05 Juanma Barranquero <lekktu@gmail.com>
+
+ * makefile.w32-in ($(BLD)/image.$(O), $(BLD)/process.$(O)):
+ Update dependencies.
+
+2011-05-04 Juanma Barranquero <lekktu@gmail.com>
+
+ * gnutls.h (emacs_gnutls_write, emacs_gnutls_read):
+ * gnutls.c (emacs_gnutls_write, emacs_gnutls_read):
+ Remove unused parameter `fildes'.
+ * process.c (read_process_output, send_process): Don't pass it.
+
+2011-05-04 Juanma Barranquero <lekktu@gmail.com>
+
+ Fix previous change: the library cache is defined in w32.c.
+ * image.c (CACHE_IMAGE_TYPE) [!HAVE_NTGUI]: Define to noop.
+ (Finit_image_library): Wrap Vlibrary_cache on "#ifdef HAVE_NTGUI".
+
+2011-05-04 Juanma Barranquero <lekktu@gmail.com>
+
+ Implement dynamic loading of GnuTLS on Windows.
+
+ * gnutls.h (GNUTLS_EMACS_ERROR_NOT_LOADED): New macro.
+ (emacs_gnutls_write, emacs_gnutls_read): Mark as extern.
+ (emacs_gnutls_record_check_pending, emacs_gnutls_transport_set_errno):
+ Declare.
+
+ * gnutls.c (Qgnutls_dll): Define.
+ (DEF_GNUTLS_FN, LOAD_GNUTLS_FN): New macros.
+ (gnutls_*): Declare function pointers.
+ (init_gnutls_functions): New function to initialize function pointers.
+ (emacs_gnutls_handshake, Fgnutls_error_string, Fgnutls_deinit)
+ (emacs_gnutls_global_init, Fgnutls_bye): Use function pointers.
+ (emacs_gnutls_record_check_pending, emacs_gnutls_transport_set_errno):
+ Wrappers for gnutls_record_check_pending and gnutls_transport_set_errno.
+ (emacs_gnutls_write, emacs_gnutls_read)
+ (emacs_gnutls_handle_error, Fgnutls_error_fatalp)
+ (Fgnutls_available_p): New function.
+ (Fgnutls_boot): Call Fgnutls_available_p. Use function pointers.
+ (syms_of_gnutls) <Qgnutls_dll>: Initialize and staticpro it.
+ (syms_of_gnutls) <Sgnutls_available_p>: defsubr it.
+
+ * image.c: Include w32.h.
+ (Vimage_type_cache): Delete.
+ (syms_of_image) <Vimage_type_cache>: Don't initialize and staticpro it.
+ (CACHE_IMAGE_TYPE, Finit_image_library): Use Vlibrary_cache instead.
+ (w32_delayed_load): Move to w32.c.
+
+ * w32.h (VlibraryCache, QCloaded_from, w32_delayed_load): Declare.
+
+ * w32.c (QCloaded_from, Vlibrary_cache): Define.
+ (w32_delayed_load): Move from image.c. When loading a library, record
+ its filename in the :loaded-from property of the library id.
+ (globals_of_w32) <QCloaded_from, Vlibrary_cache>:
+ Initialize and staticpro them.
+ (emacs_gnutls_pull, emacs_gnutls_push): Call emacs_gnutls_* functions.
+
+ * process.c: Include lisp.h before w32.h, not after.
+ (wait_reading_process_output): Call emacs_gnutls_record_check_pending
+ instead of gnutls_record_check_pending.
+
+ * callproc.c, emacs.c: Include lisp.h before w32.h, not after.
+
+2011-05-04 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnutls.c (Fgnutls_boot): Support :keylist and :crlfiles options
+ instead of :keyfiles. Give GnuTLS the keylist and the CRL lists
+ as passed in.
+
+2011-05-03 Jan Djärv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_set_frame_alpha): Do not set property on anything
+ else than FRAME_X_OUTER_WINDOW (Bug#8608).
+
+2011-05-02 Juanma Barranquero <lekktu@gmail.com>
+
+ * sysdep.c (get_tty_size) [WINDOWSNT]: Implement. (Bug#8596)
+
+2011-05-02 Juanma Barranquero <lekktu@gmail.com>
+
+ * gnutls.c (Qgnutls_log_level, Qgnutls_code, Qgnutls_anon)
+ (Qgnutls_x509pki, Qgnutls_e_interrupted, Qgnutls_e_again)
+ (Qgnutls_e_invalid_session, Qgnutls_e_not_ready_for_handshake)
+ (gnutls_global_initialized, Qgnutls_bootprop_priority)
+ (Qgnutls_bootprop_trustfiles, Qgnutls_bootprop_keyfiles)
+ (Qgnutls_bootprop_callbacks, Qgnutls_bootprop_loglevel)
+ (Qgnutls_bootprop_hostname, Qgnutls_bootprop_verify_flags)
+ (Qgnutls_bootprop_verify_error, Qgnutls_bootprop_verify_hostname_error)
+ (Qgnutls_bootprop_callbacks_verify): Make static.
+
+2011-05-01 Andreas Schwab <schwab@linux-m68k.org>
+
+ * callproc.c: Indentation fixup.
+
+ * sysdep.c (wait_for_termination_1): Make static.
+ (wait_for_termination, interruptible_wait_for_termination): Move
+ after wait_for_termination_1.
+
+2011-05-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * sysdep.c (interruptible_wait_for_termination): New function
+ which is like wait_for_termination, but allows keyboard
+ interruptions.
+
+ * callproc.c (Fcall_process): Add (:file "file") as an option for
+ the STDOUT buffer.
+ (Fcall_process_region): Ditto.
+
+2011-04-30 Eli Zaretskii <eliz@gnu.org>
+
+ * dosfns.c (Fint86, Fdos_memget, Fdos_memput): Use `ASIZE (FOO)'
+ rather than `XVECTOR (FOO)->size'.
+
+ * process.c: Remove HAVE_INTTYPES_H condition from inclusion of
+ inttypes.h, as a gnulib replacement is used if it not available in
+ system headers.
+
+2011-04-21 Eli Zaretskii <eliz@gnu.org>
+
+ Lift the MOST_POSITIVE_FIXNUM/4 limitation on visited files.
+ * fileio.c (Finsert_file_contents): Don't limit file size to 1/4
+ of MOST_POSITIVE_FIXNUM. (Bug#8528)
+
+ * coding.c (coding_alloc_by_realloc): Error out if destination
+ will grow beyond MOST_POSITIVE_FIXNUM.
+ (decode_coding_emacs_mule): Abort if there isn't enough place in
+ charbuf for the composition carryover bytes. Reserve an extra
+ space for up to 2 characters produced in a loop.
+ (decode_coding_iso_2022): Abort if there isn't enough place in
+ charbuf for the composition carryover bytes.
+
+2011-04-21 Eli Zaretskii <eliz@gnu.org>
+
+ * doprnt.c (doprnt) [!HAVE_LONG_LONG_INT]: Error out instead of
+ aborting when %lld or %lll format is passed.
+ [!HAVE_UNSIGNED_LONG_LONG_INT]: Error out instead of aborting when
+ %llo or %llx format is passed. (Bug#8545)
+
+ * window.c (window_scroll_line_based): Use a marker instead of
+ simple variables to record original value of point. (Bug#7952)
+
+ * doprnt.c (doprnt): Fix the case where a multibyte sequence
+ produced by %s or %c overflows available buffer space. (Bug#8545)
+
+2011-04-28 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doprnt.c (doprnt): Omit useless test; int overflow check (Bug#8545).
+ (SIZE_MAX): Move defn after all includes, as they might #define it.
+
+2011-04-28 Juanma Barranquero <lekktu@gmail.com>
+
+ * w32.c (init_environment): Warn about defaulting HOME to C:\.
+
+2011-04-28 Juanma Barranquero <lekktu@gmail.com>
+
+ * keyboard.c (Qdelayed_warnings_hook): Define.
+ (command_loop_1): Run `delayed-warnings-hook'
+ if Vdelayed_warnings_list is non-nil.
+ (syms_of_keyboard) <delayed-warnings-hook>: DEFSYM it.
+ (syms_of_keyboard) <delayed-warnings-list>: DEFVAR_LISP it.
+
+2011-04-28 Eli Zaretskii <eliz@gnu.org>
+
+ * doprnt.c (doprnt): Don't return value smaller than the buffer
+ size if the message was truncated. (Bug#8545).
+
+2011-04-28 Juanma Barranquero <lekktu@gmail.com>
+
+ * w32fns.c (Fx_change_window_property, Fx_delete_window_property)
+ (Fx_window_property): #if-0 the whole functions, not just the bodies.
+
+2011-04-27 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doprnt.c (doprnt): Support "ll" length modifier, for long long.
+
+2011-04-27 Juanma Barranquero <lekktu@gmail.com>
+
+ * makefile.w32-in: Update dependencies.
+
+2011-04-27 Eli Zaretskii <eliz@gnu.org>
+
+ Improve `doprnt' and its usage. (Bug#8545)
+ * doprnt.c (doprnt): Make sure `format' is never accessed beyond
+ `format_end'. Remove support for %l as a conversion specifier.
+ Don't use xrealloc. Improve diagnostics when the %l size modifier
+ is used. Update the commentary.
+
+ * eval.c (verror): Simplify calculation of size_t.
+
+ * coding.c (Ffind_operation_coding_system): Fix diagnostic error
+ messages.
+
+2011-04-27 Yoshiaki Kasahara <kasahara@nc.kyushu-u.ac.jp> (tiny change)
+
+ * buffer.c (init_buffer) [USE_MMAP_FOR_BUFFERS]: Adjust to aliasing
+ change.
+
+2011-04-27 Paul Eggert <eggert@cs.ucla.edu>
+
+ * nsmenu.m: Replace all uses of XVECTOR with ASIZE and AREF.
+ This makes this file independent of the recent pseudovector change.
+
+2011-04-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ * keyboard.c (handle_user_signal): Fix pointer signedness problem.
+
+ * gnutls.c (emacs_gnutls_handle_error): Remove unused local.
+ (Fgnutls_boot): gnutls_certificate_verify_peers2 wants unsigned *.
+ Remove unused local.
+ (emacs_gnutls_write): Don't use uninitialized rtnval if nbyte <= 0.
+
+ * lisp.h: Fix a problem with aliasing and vector headers. (Bug#8546)
+ GCC 4.6.0 optimizes based on type-based alias analysis. For
+ example, if b is of type struct buffer * and v of type struct
+ Lisp_Vector *, then gcc -O2 was incorrectly assuming that &b->size
+ != &v->size, and therefore "v->size = 1; b->size = 2; return
+ v->size;" must therefore return 1. This assumption is incorrect
+ for Emacs, since it type-puns struct Lisp_Vector * with many other
+ types. To fix this problem, this patch adds a new type struct
+ vectorlike_header that documents the constraints on layout of vectors
+ and pseudovectors, and helps optimizing compilers not get fooled
+ by Emacs's type punning. It also adds the macros XSETTYPED_PVECTYPE
+ XSETTYPED_PSEUDOVECTOR, TYPED_PSEUDOVECTORP, for similar reasons.
+ * lisp.h (XSETTYPED_PVECTYPE): New macro, specifying the name of
+ the size member.
+ (XSETPVECTYPE): Rewrite in terms of new macro.
+ (XSETPVECTYPESIZE): New macro, specifying both type and size.
+ This is a bit clearer, and further avoids the possibility of
+ undesirable aliasing.
+ (XSETTYPED_PSEUDOVECTOR): New macro, specifying the size.
+ (XSETPSEUDOVECTOR): Rewrite in terms of XSETTYPED_PSEUDOVECTOR.
+ (XSETSUBR): Rewrite in terms of XSETTYPED_PSEUDOVECTOR and XSIZE,
+ since Lisp_Subr is a special case (no "next" field).
+ (ASIZE): Now uses header.size rather than size. All
+ previous uses of XVECTOR (foo)->size replaced to use this macro,
+ to avoid the hassle of writing XVECTOR (foo)->header.size.
+ (struct vectorlike_header): New type.
+ (TYPED_PSEUDOVECTORP): New macro, also specifying the C type of the
+ object, to help avoid aliasing.
+ (PSEUDOVECTORP): Rewrite in terms of TYPED_PSEUDOVECTORP.
+ (SUBRP): Likewise, since Lisp_Subr is a special case.
+ * lisp.h (struct Lisp_Vector, struct Lisp_Char_Table):
+ (struct Lisp_Sub_Char_Table, struct Lisp_Bool_Vector):
+ (struct Lisp_Hash_Table): Combine first two members into a single
+ struct vectorlike_header member. All uses of "size" and "next" members
+ changed to be "header.size" and "header.next".
+ * buffer.h (struct buffer): Likewise.
+ * font.h (struct font_spec, struct font_entity, struct font): Likewise.
+ * frame.h (struct frame): Likewise.
+ * process.h (struct Lisp_Process): Likewise.
+ * termhooks.h (struct terminal): Likewise.
+ * window.c (struct save_window_data, struct saved_window): Likewise.
+ * window.h (struct window): Likewise.
+ * alloc.c (allocate_buffer, Fmake_bool_vector, allocate_pseudovector):
+ Use XSETPVECTYPESIZE, not XSETPVECTYPE, to avoid aliasing problems.
+ * buffer.c (init_buffer_once): Likewise.
+ * lread.c (defsubr): Use XSETTYPED_PVECTYPE, since Lisp_Subr is a
+ special case.
+ * process.c (Fformat_network_address): Use local var for size,
+ for brevity.
+
+ * bytecode.c (exec_byte_code): Don't use XVECTOR before CHECK_VECTOR.
+
+ Make the Lisp reader and string-to-float more consistent (Bug#8525)
+ * data.c (atof): Remove decl; no longer used or needed.
+ (digit_to_number): Move to lread.c.
+ (Fstring_to_number): Use new string_to_number function, to be
+ consistent with how the Lisp reader treats infinities and NaNs.
+ Do not assume that floating-point numbers represent EMACS_INT
+ without losing information; this is not true on most 64-bit hosts.
+ Avoid double-rounding errors, by insisting on integers when
+ parsing non-base-10 numbers, as the documentation specifies.
+ * lisp.h (string_to_number): New decl, replacing ...
+ (isfloat_string): Remove.
+ * lread.c: Include <inttypes.h>, for uintmax_t and strtoumax.
+ (read1): Do not accept +. and -. as integers; this
+ appears to have been a coding error. Similarly, do not accept
+ strings like +-1e0 as floating point numbers. Do not report
+ overflow for integer overflows unless the base is not 10 which
+ means we have no simple and reliable way to continue.
+ Break out the floating-point parsing into a new
+ function string_to_number, so that Fstring_to_number parses
+ floating point numbers consistently with the Lisp reader.
+ (digit_to_number): Moved here from data.c. Make it static inline.
+ (E_CHAR, EXP_INT): Remove, replacing with ...
+ (E_EXP): New macro, to solve the "1.0e+" problem mentioned below.
+ (string_to_number): New function, replacing isfloat_string.
+ This function checks for valid syntax and produces the resulting
+ Lisp float number too. Rework it so that string-to-number
+ no longer mishandles examples like "1.0e+". Use strtoumax,
+ so that overflow for non-base-10 numbers is reported only when
+ there's no portable and simple way to convert to floating point.
+
+ * textprop.c (set_text_properties_1): Rewrite for clarity,
+ and to avoid GCC warning about integer overflow.
+
+ * intervals.h (struct interval): Use EMACS_INT for members
+ where EMACS_UINT might cause problems. See
+ <http://lists.gnu.org/archive/html/emacs-devel/2011-04/msg00514.html>.
+ (CHECK_TOTAL_LENGTH): Remove cast to EMACS_INT; no longer needed.
+ * intervals.c (interval_deletion_adjustment): Now returns EMACS_INT.
+ All uses changed.
+ (offset_intervals): Tell GCC not to worry about length overflow
+ when negating a negative length.
+
+ * alloc.c (overrun_check_malloc, overrun_check_realloc): Now static.
+ (overrun_check_free): Likewise.
+
+ * alloc.c (SDATA_SIZE) [!GC_CHECK_STRING_BYTES]: Avoid runtime check
+ in the common case where SDATA_DATA_OFFSET is a multiple of Emacs
+ word size.
+
+ * gnutls.c: Fix problems found by GCC 4.6.0 on Ubuntu 10.10.
+ (gnutls_make_error): Rename local to avoid shadowing.
+ (gnutls_emacs_global_deinit): ifdef out; not used.
+ (Fgnutls_boot): Use const for pointer to readonly storage.
+ Comment out unused local. Fix pointer signedness problems.
+
+ * lread.c (openp): Don't stuff size_t into an 'int'.
+ Use <= on length, not < on length + 1, to avoid GCC 4.6.0 warning
+ about possible signed overflow.
+
+ * gtkutil.c: Fix problems found by GCC 4.6.0 on Ubuntu 10.10.
+ (GDK_KEY_g): Don't define if already defined.
+ (xg_prepare_tooltip): Avoid pointer signedness problem.
+ (xg_set_toolkit_scroll_bar_thumb): Redo to avoid two casts.
+
+ * process.c (Fnetwork_interface_info): Avoid left-shift undefined
+ behavior with 1 << 31. GCC 4.6.0 warns about this on 32-bit hosts.
+
+ * xfns.c (Fx_window_property): Simplify a bit,
+ to make a bit faster and to avoid GCC 4.6.0 warning.
+ * xselect.c (x_get_window_property, x_handle_dnd_message): Likewise.
+
+ * fns.c (internal_equal): Don't assume size_t fits in int.
+
+ * alloc.c (compact_small_strings): Tighten assertion a little.
+
+ Replace pEd with more-general pI, and fix some printf arg casts.
+ * lisp.h (pI): New macro, generalizing old pEd macro to other
+ conversion specifiers. For example, use "...%"pI"d..." rather
+ than "...%"pEd"...".
+ (pEd): Remove. All uses replaced with similar uses of pI.
+ * src/m/amdx86-64.h, src/m/ia64.h, src/m/ibms390x.h: Likewise.
+ * alloc.c (check_pure_size): Don't overflow by converting size to int.
+ * bidi.c (bidi_dump_cached_states): Use pI to avoid cast.
+ * data.c (Fnumber_to_string): Use pI instead of if-then-else-abort.
+ * dbusbind.c (xd_append_arg): Use pI to avoid cast.
+ (Fdbus_method_return_internal, Fdbus_method_error_internal): Likewise.
+ * font.c (font_unparse_xlfd): Avoid potential buffer overrun on
+ 64-bit hosts.
+ (font_unparse_xlfd, font_unparse_fcname): Use pI to avoid casts.
+ * keyboard.c (record_char, modify_event_symbol): Use pI to avoid casts.
+ * print.c (safe_debug_print, print_object): Likewise.
+ (print_object): Don't overflow by converting EMACS_INT or EMACS_UINT
+ to int.
+ Use pI instead of if-then-else-abort. Use %p to avoid casts,
+ avoiding the 0 flag, which is not portable.
+ * process.c (Fmake_network_process): Use pI to avoid cast.
+ * region-cache.c (pp_cache): Likewise.
+ * xdisp.c (decode_mode_spec): Likewise.
+ * xrdb.c (x_load_resources) [USE_MOTIF]: Use pI to avoid undefined
+ behavior on 64-bit hosts with printf arg.
+ * xselect.c (x_queue_event): Use %p to avoid casts, avoiding 0 flag.
+ (x_stop_queuing_selection_requests): Likewise.
+ (x_get_window_property): Don't truncate byte count to an 'int'
+ when tracing.
+
+ * frame.c (frame_name_fnn_p): Get rid of strtol, which isn't right
+ here, since it parses constructs like leading '-' and spaces,
+ which are not wanted; and it overflows with large numbers.
+ Instead, simply match F[0-9]+, which is what is wanted anyway.
+
+ * alloc.c: Remove unportable assumptions about struct layout.
+ (SDATA_SELECTOR, SDATA_DATA_OFFSET): New macros.
+ (SDATA_OF_STRING, SDATA_SIZE, allocate_string_data):
+ (allocate_vectorlike, make_pure_vector): Use the new macros,
+ plus offsetof, to remove unportable assumptions about struct layout.
+ These assumptions hold on all porting targets that I know of, but
+ they are not guaranteed, they're easy to remove, and removing them
+ makes further changes easier.
+
+ * alloc.c (BLOCK BYTES): Fix typo by changing "ablock" to "ablocks".
+ This doesn't fix a bug but makes the code clearer.
+ (string_overrun_cookie): Now const. Use initializers that
+ don't formally overflow signed char, to avoid warnings.
+ (allocate_string_data) [GC_CHECK_STRING_OVERRUN]: Fix typo that
+ can cause Emacs to crash when string overrun checking is enabled.
+ (allocate_buffer): Don't assume sizeof (struct buffer) is a
+ multiple of sizeof (EMACS_INT); it need not be, if
+ alignof(EMACS_INT) < sizeof (EMACS_INT).
+ (check_sblock, check_string_bytes, check_string_free_list): Protoize.
+
2011-04-26 Juanma Barranquero <lekktu@gmail.com>
* keyboard.c (QCrtl): Rename from Qrtl. All uses changed.
2011-04-26 Teodor Zlatanov <tzz@lifelogs.com>
* gnutls.c (emacs_gnutls_handshake): Return an error if we're not
- supposed to be handshaking.
+ supposed to be handshaking. (Bug#8556)
Reported by Paul Eggert <eggert@cs.ucla.edu>.
-2011-04-26 Daniel Colascione <dan.colascione@gmail.com>
+2011-04-26 Daniel Colascione <dan.colascione@gmail.com>
* lisp.h (Qdebug): List symbol.
* eval.c (Qdebug): Restore global linkage.
define if USE_GTK || USE_X_TOOLKIT.
(SET_SAVED_BUTTON_EVENT): Define only if USE_X_TOOLKIT || USE_GTK.
* xterm.h (x_dispatch_event): Extern only if USE_X_TOOLKIT.
- * xterm.c, xterm.h (x_mouse_leave): Bring this function back, but only if
- defined HAVE_MENUS && !defined USE_X_TOOLKIT && !defined USE_GTK.
+ * xterm.c, xterm.h (x_mouse_leave): Bring this function back, but only
+ if defined HAVE_MENUS && !defined USE_X_TOOLKIT && !defined USE_GTK.
* xmenu.c (menu_help_callback): Pointer type fixes.
Use const pointers when pointing at readonly data. Avoid pointer