From: Paul Eggert Date: Fri, 25 May 2012 18:19:24 +0000 (-0700) Subject: Merge from trunk. X-Git-Tag: emacs-24.2.90~471^2~6^2~110 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=42b2a986d9d4b7040fb20c90ec0efeffb78e761a;p=emacs.git Merge from trunk. --- 42b2a986d9d4b7040fb20c90ec0efeffb78e761a diff --cc src/ChangeLog index bdc70f54f29,911354b7a61..6217560409d --- a/src/ChangeLog +++ b/src/ChangeLog @@@ -1,801 -1,536 +1,1328 @@@ - 2012-04-22 Paul Eggert ++2012-05-25 Paul Eggert + ++ Fix integer width and related bugs (Bug#9874). + * process.h (struct Lisp_Process): Members tick and update_tick + are now of type EMACS_INT, not int. - - Fix integer width and related bugs (Bug#9874). + * alloc.c (pure_bytes_used_lisp, pure_bytes_used_non_lisp): + (allocate_vectorlike, buffer_memory_full, struct sdata, SDATA_SIZE) + (string_bytes, check_sblock, allocate_string_data): + (compact_small_strings, Fmake_bool_vector, make_string) + (make_unibyte_string, make_multibyte_string) + (make_string_from_bytes, make_specified_string) + (allocate_vectorlike, Fmake_vector, find_string_data_in_pure) + (make_pure_string, make_pure_c_string, make_pure_vector, Fpurecopy) + (mark_vectorlike): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (allocate_pseudovector): + Use int, not EMACS_INT, where int is wide enough. + (inhibit_garbage_collection, Fgarbage_collect): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + * bidi.c (bidi_mirror_char): Use EMACS_INT, not int, where + int might not be wide enough. + (bidi_cache_search, bidi_cache_find, bidi_init_it) + (bidi_count_bytes, bidi_char_at_pos, bidi_fetch_char) + (bidi_at_paragraph_end, bidi_find_paragraph_start) + (bidi_paragraph_init, bidi_resolve_explicit, bidi_resolve_weak) + (bidi_level_of_next_char, bidi_move_to_visually_next): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + * buffer.c (copy_overlays, Fgenerate_new_buffer_name) + (Fkill_buffer, Fset_buffer_major_mode) + (advance_to_char_boundary, Fbuffer_swap_text) + (Fset_buffer_multibyte, overlays_at, overlays_in) + (overlay_touches_p, struct sortvec, record_overlay_string) + (overlay_strings, recenter_overlay_lists) + (adjust_overlays_for_insert, adjust_overlays_for_delete) + (fix_start_end_in_overlays, fix_overlays_before, modify_overlay) + (Fmove_overlay, Fnext_overlay_change, Fprevious_overlay_change) + (Foverlay_recenter, last_overlay_modification_hooks_used) + (report_overlay_modification, evaporate_overlays, enlarge_buffer_text): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (validate_region): Omit unnecessary test for b <= e, + since that's guaranteed by the previous test. + (adjust_overlays_for_delete): Avoid pos + length overflow. + (Fmove_overlay, Fdelete_overlay, add_overlay_mod_hooklist) + (report_overlay_modification): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (Foverlays_at, Fnext_overlay_change, Fprevious_overlay_change): + Omit pointer cast, which isn't needed anyway, and doesn't work + after the EMACS_INT -> ptrdiff_t change. - (Fmove_overlay): Delete an evaporating overlay - if it becomes empty after its bounds are adjusted to fit within - its buffer. Without this fix, in a nonempty buffer (let ((o - (make-overlay 1 2))) (overlay-put o 'evaporate t) (move-overlay o 0 1)) - yields an empty overlay that has the evaporate property, which is - not supposed to happen. (Bug#9642) + * buffer.h: Adjust decls to match defn changes elsewhere. + (struct buffer_text, struct buffer): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + Use EMACS_INT, not int, where int might not be wide enough. + * bytecode.c (unmark_byte_stack, exec_byte_code): Use ptrdiff_t, + not int, to avoid needless 32-bit limit on 64-bit hosts. + (exec_byte_code): Use tighter memory-full test, one that checks + for alloca overflow. Don't compute the address of the object just + before an array, as that's not portable. Use EMACS_INT, not + ptrdiff_t or int, where ptrdiff_t or int might not be wide enough. + * callint.c (Fcall_interactively): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + * callproc.c (call_process_kill, Fcall_process): + Don't assume pid_t fits into an Emacs fixnum. + (call_process_cleanup, Fcall_process, child_setup): + Don't assume pid_t fits into int. + (call_process_cleanup, Fcall_process, delete_temp_file) + (Fcall_process_region): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (Fcall_process): Simplify handling of volatile integers. + Use int, not EMACS_INT, where int will do. + * casefiddle.c (casify_object, casify_region, operate_on_word) + (Fupcase_word, Fdowncase_word, Fcapitalize_word): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (casify_object): Avoid integer overflow when overallocating buffer. + * casetab.c (set_identity, shuffle): Prefer int to unsigned when + either works. Use lint_assume to convince GCC 4.6.1 that it's OK. + * category.c (Fchar_category_set): Don't assume fixnum fits in int. + * category.h (CATEGORYP): Don't assume arg is nonnegative. + * ccl.c (GET_CCL_INT): Remove; no longer needed, since the + integers are now checked earlier. All uses replaced with XINT. + (ccl_driver): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + For CCL_MapSingle, check that content and value are in int range. + (ccl_driver, Fregister_code_conversion_map): + Check that Vcode_version_map_vector is a vector. + (resolve_symbol_ccl_program): Check that vector header is in range. + Always copy the vector, so that we can check its contents reliably + now rather than having to recheck each instruction as it's being + executed. Check that vector words fit in 'int'. + (ccl_get_compiled_code, Fregister_ccl_program) + (Fregister_code_conversion_map): Use ptrdiff_t, not int, for + program indexes, to avoid needless 32-bit limit on 64-bit hosts. + (Fccl_execute, Fccl_execute_on_string): Check that initial reg + contents are in range. + (Fccl_execute_on_string): Check that status is in range. + * ccl.h (struct ccl_program.idx): Now ptrdiff_t, not int. + * character.c (char_resolve_modifier_mask, Fchar_resolve_modifiers): + Accept and return EMACS_INT, not int, because callers can pass values + out of 'int' range. + (c_string_width, strwidth, lisp_string_width, chars_in_text) + (multibyte_chars_in_text, parse_str_as_multibyte) + (str_as_multibyte, count_size_as_multibyte, str_to_multibyte) + (str_as_unibyte, str_to_unibyte, string_count_byte8) + (string_escape_byte8, Fget_byte): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (Funibyte_string): Use CHECK_RANGED_INTEGER, not CHECK_NATNUM, to + avoid mishandling large integers. + * character.h: Adjust decls to match defn changes elsewhere. + * charset.c (load_charset_map_from_file, find_charsets_in_text) + (Ffind_charset_region): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (load_charset_map_from_file): Redo idx calculation to avoid overflow. + (load_charset_map_from_vector, Fdefine_charset_internal): + Don't assume fixnum fits in int. + (load_charset_map_from_vector, Fmap_charset_chars): + Remove now-unnecessary CHECK_NATNUMs. + (Fdefine_charset_internal): Check ranges here, more carefully. + Don't rely on undefined behavior with signed left shift overflow. + Don't assume unsigned int fits into fixnum, or that fixnum fits + into unsigned int. Don't require max_code to be a valid fixnum; + that's not true for gb10830 4-byte on a 32-bit host. Allow + invalid_code to be a cons, for the same reason. Require code_offset + to be a character. Avoid int overflow if max_char is close + to INT_MAX. + (CODE_POINT_TO_INDEX): On 32-bit hosts, return int, not unsigned; + this is intended anyway and avoids some undefined behavior. + (load_charset_map): Pass unsigned, not int, as 2nd arg of + INDEX_TO_CODE_POINT, as that's what it expects. + (Funify_charset, encode_char): Don't stuff unsigned vals into int vars. + * charset.h (DECODE_CHAR): Return int, not unsigned; + this is what was intended anyway, and it avoids undefined behavior. + (CHARSET_OFFSET): Remove unused macro, instead of fixing its + integer-overflow issues. + (ENCODE_CHAR): Return unsigned on all hosts, not just on 32-bit hosts. + Formerly, it returned EMACS_INT on 64-bit hosts in the common case + where the argument is EMACS_INT, and this behavior is not intended. + * chartab.c (Fmake_char_table, Fset_char_table_range) + (uniprop_get_decoder, uniprop_get_encoder): + Don't assume fixnum fits in int. + * cmds.c (move_point): New function, that does the gist of + Fforward_char and Fbackward_char, but does so while checking + for integer overflow more accurately. + (Fforward_char, Fbackward_char): Use it. + (Fforward_line, Fend_of_line, internal_self_insert) + (internal_self_insert): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + Fix a FIXME, by checking for integer overflow when calculating + target_clm and actual_clm. + * coding.c (detect_coding_XXX, encode_coding_XXX, CODING_DECODE_CHAR) + (CODING_ENCODE_CHAR, CODING_CHAR_CHARSET, CODING_CHAR_CHARSET_P) + (ASSURE_DESTINATION, coding_alloc_by_realloc) + (coding_alloc_by_making_gap, alloc_destination) + (detect_coding_utf_8, encode_coding_utf_8, decode_coding_utf_16) + (encode_coding_utf_16, detect_coding_emacs_mule) + (decode_coding_emacs_mule, encode_coding_emacs_mule) + (detect_coding_iso_2022, decode_coding_iso_2022) + (encode_invocation_designation, encode_designation_at_bol) + (encode_coding_iso_2022, detect_coding_sjis, detect_coding_big5) + (decode_coding_sjis, decode_coding_big5, encode_coding_sjis) + (encode_coding_big5, detect_coding_ccl, decode_coding_ccl) + (encode_coding_ccl, encode_coding_raw_text) + (detect_coding_charset, decode_coding_charset) + (encode_coding_charset, detect_eol, decode_eol, produce_chars) + (produce_composition, produce_charset, produce_annotation) + (decode_coding, handle_composition_annotation) + (handle_charset_annotation, consume_chars, decode_coding_gap) + (decode_coding_object, encode_coding_object, detect_coding_system) + (Ffind_coding_systems_region_internal, Fcheck_coding_systems_region) + (code_convert_region, code_convert_string) + (Fdefine_coding_system_internal) + (coding_set_source, coding_set_destination): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (setup_iso_safe_charsets, consume_chars, Funencodable_char_position) + (Fdefine_coding_system_internal): + Don't assume fixnums fit in int. + (decode_coding_gap, decode_coding_object, encode_coding_object) + (Fread_coding_system, Fdetect_coding_region) + (Funencodable_char_position, Fcheck_coding_systems_region) + (get_translation, handle_composition_annotation, consume_chars): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (consume_chars): Rewrite to not calculate an address outside buffer. + (Ffind_operation_coding_system): NATNUMP can eval its arg twice. + Don't access memory outside of the args array. + (Fdefine_coding_system_internal): Check for charset-id overflow. + (ENCODE_ISO_CHARACTER): Use unsigned, not int, to store the unsigned + result of ENCODE_CHAR. + * coding.h: Adjust decls to match defn changes elsewhere. + (struct coding_system): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + * composite.c (get_composition_id, find_composition) + (run_composition_function, update_compositions) + (compose_text, composition_gstring_put_cache) + (composition_gstring_p, composition_gstring_width) + (fill_gstring_header, fill_gstring_body, autocmp_chars) + (composition_compute_stop_pos, composition_reseat_it) + (composition_update_it, struct position_record) + (find_automatic_composition, composition_adjust_point) + (Fcomposition_get_gstring, Ffind_composition_internal): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (update_compositions): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + * composite.h: Adjust decls to match defn changes elsewhere. + (struct composition): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + * data.c (let_shadows_buffer_binding_p, let_shadows_global_binding_p): + Do not attempt to compute the address of the object just before a + buffer; this is not portable. + (Faref, Faset): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (Faset): Use int, not EMACS_INT, where int is wide enough. + (Fstring_to_number): Don't assume fixnums fit in int. + (Frem): Don't assume arg is nonnegative. + * dbusbind.c (xd_append_arg): Check for integers out of range. + (Fdbus_call_method): Don't overflow the timeout int. ++ (extract_signed, extract_unsigned): New functions. + * dired.c (directory_files_internal, file_name_completion, scmp) + (file_name_completion_stat): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (file_name_completion): Don't overflow matchcount. + (file_name_completion_stat): Use SAFE_ALLOCA, not alloca. + * dispextern.h: Adjust decls to match defn changes elsewhere. + (struct text_pos, struct glyph, struct bidi_saved_info) + (struct bidi_string_data, struct bidi_it, struct composition_it) + (struct it): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (struct display_pos, struct composition_it, struct it): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + * dispnew.c (increment_matrix_positions) + (increment_row_positions, mode_line_string) + (marginal_area_string): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (change_frame_size_1, Fredisplay, Fframe_or_buffer_changed_p): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (duration_to_sec_usec): New function, to check for overflow better. + (Fsleep_for, sit_for): Use it. + * doc.c (get_doc_string, store_function_docstring): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (get_doc_string, Fsnarf_documentation): + Use int, not EMACS_INT, where int is wide enough. + (get_doc_string): + Use SAFE_ALLOCA, not alloca. + Check for overflow when converting EMACS_INT to off_t. + * doprnt.c (doprnt): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + * editfns.c (init_editfns, Fuser_uid, Fuser_real_uid): + Don't assume uid_t fits into fixnum. + (buildmark, Fgoto_char, overlays_around, find_field, Fdelete_field) + (Ffield_string, Ffield_string_no_properties, Ffield_beginning) + (Ffield_end, Fconstrain_to_field, Fline_beginning_position) + (Fline_end_position, Fprevious_char, Fchar_after, Fchar_before) + (general_insert_function) + (Finsert_char, make_buffer_string, make_buffer_string_both) + (update_buffer_properties, Fbuffer_substring) + (Fbuffer_substring_no_properties, Fcompare_buffer_substrings) + (Fsubst_char_in_region, check_translation) + (Ftranslate_region_internal, save_restriction_restore, Fformat) + (transpose_markers, Ftranspose_regions): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (clip_to_bounds): Move to lisp.h as an inline function). + (Fconstrain_to_field): Don't assume integers are nonnegative. + (Fline_beginning_position, Fsave_excursion, Fsave_current_buffer): + (Fsubst_char_in_region, Fsave_restriction): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (Femacs_pid): Don't assume pid_t fits into fixnum. + (lo_time): Use int, not EMACS_INT, when int suffices. + (lisp_time_argument): Check for usec out of range. + (Fencode_time): Don't assume fixnum fits in int. + (Fuser_login_name, Fuser_full_name): Signal an error + if a uid argument is out of range, rather than relying on + undefined behavior. + (Fformat_time_string): Remove now-unnecessary check. + lisp_time_argument checks for out-of-range usec now. + * emacs.c (gdb_valbits, gdb_gctypebits): Now int, not EMACS_INT. + (gdb_data_seg_bits): Now uintptr_t, not EMACS_INT. + (PVEC_FLAG, gdb_array_mark_flag): Now ptrdiff_t, not EMACS_INT. + (init_cmdargs, Fdump_emacs): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (Fkill_emacs): Don't assume fixnum fits in int; instead, take just + the bottom (typically) 32 bits of the fixnum. + * eval.c (specpdl_size, call_debugger): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (when_entered_debugger, Fbacktrace_debug): + Don't assume fixnum can fit in int. + (Fdefvaralias, Fdefvar): Do not attempt to compute the address of + the object just before a buffer; this is not portable. + (FletX, Flet, Funwind_protect, do_autoload, Feval, funcall_lambda) + (grow_specpdl, unbind_to): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (Fapply, apply_lambda): Don't assume ptrdiff_t can hold fixnum. + (grow_specpdl): Simplify allocation by using xpalloc. + (Fprog1, Fprog2): Don't assume list length fits in int. Simplify. + * fileio.c (Ffind_file_name_handler, Fcopy_file, Frename_file) + (Finsert_file_contents, Fwrite_region, Fdo_auto_save): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (Ffind_file_name_handler, non_regular_inserted, Finsert_file_contents) + (a_write, e_write): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (Fcopy_file, non_regular_nbytes, read_non_regular) + (Finsert_file_contents): + Use int, not EMACS_INT, where int is wide enough. + (READ_BUF_SIZE): Verify that it fits in int. + (Finsert_file_contents): Check that counts are in proper range, + rather than assuming fixnums fit into ptrdiff_t etc. + Don't assume fixnums fit into int. + * floatfns.c (Fexpt): Avoid undefined signed * signed overflow. + * fns.c (Fcompare_strings, Fstring_lessp, struct textprop_rec, concat) + (string_char_byte_cache_charpos, string_char_byte_cache_bytepos) + (string_char_to_byte, string_byte_to_char) + (string_make_multibyte, string_to_multibyte) + (string_make_unibyte, Fstring_as_unibyte, Fstring_as_multibyte) + (Fstring_to_unibyte, Fsubstring, Fsubstring_no_properties) + (substring_both, Fdelete, internal_equal, Ffillarray) + (Fclear_string, mapcar1) + (Fbase64_encode_region, Fbase64_encode_string, base64_encode_1) + (Fbase64_decode_region, Fbase64_decode_string, base64_decode_1) + (larger_vector, make_hash_table, maybe_resize_hash_table) + (hash_lookup, hash_remove_from_table, hash_clear, sweep_weak_table) + (Fmaphash, secure_hash): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (concat): Check for string index and length overflow. + (Fmapconcat): Don't assume fixnums fit into ptrdiff_t. + (Frequire): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (larger_vector): New API (vec, incr_min, size_max) replaces old + one (vec, new_size, init). This catches size overflow. + INIT was removed because it was always Qnil. + All callers changed. + (INDEX_SIZE_BOUND): New macro, which calculates more precisely + the upper bound on a hash table index size. + (make_hash_table, maybe_resize_hash_table): Use it. + (secure_hash): Computer start_byte and end_byte only after + they're known to be in ptrdiff_t range. + * font.c (font_intern_prop, font_at, font_range, Ffont_shape_gstring) + (Ffont_get_glyphs, Ffont_at): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (font_style_to_value, font_prop_validate_style, font_expand_wildcards) + (Flist_fonts, Fopen_font): + Don't assume fixnum can fit in int. + (check_gstring): Don't assume index can fit in int. + (font_match_p): Check that fixnum is a character, not a nonnegative + fixnum, since the later code needs to stuff it into an int. + (font_find_for_lface): Use SAFE_ALLOCA_LISP, not alloca. + (font_fill_lglyph_metrics): Use unsigned, not EMACS_INT, to avoid + conversion overflow issues. + (Fopen_font): Check for integer out of range. + (Ffont_get_glyphs): Don't assume index can fit in int. + * font.h: Adjust decls to match defn changes elsewhere. + * fontset.c (reorder_font_vector): Redo score calculation to avoid + integer overflow. + (num_auto_fontsets, fontset_from_font): Use ptrdiff_t, not + printmax_t, where ptrdiff_t is wide enough. + (Finternal_char_font): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + * frame.c (Fset_mouse_position, Fset_mouse_pixel_position) + (Fset_frame_height, Fset_frame_width, Fset_frame_size) + (Fset_frame_position, x_set_frame_parameters) + (x_set_line_spacing, x_set_border_width) + (x_set_internal_border_width, x_set_alpha, x_figure_window_size): + Check that fixnums are in proper range for system types. + (frame_name_fnn_p, Fframe_parameter, Fmodify_frame_parameters): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (Fmodify_frame_parameters): Don't assume fixnum fits in int. + Use SAFE_ALLOCA_LISP, not alloca. + * frame.h (struct frame): Use intptr_t, not EMACS_INT, where + intptr_t is wide enough. + * fringe.c (lookup_fringe_bitmap, get_logical_fringe_bitmap) + (Fdefine_fringe_bitmap): Don't assume fixnum fits in int. + (Ffringe_bitmaps_at_pos): Don't assume index fits in int. + Check for fixnum out of range. + * ftfont.c (ftfont_list): Don't assume index fits in int. + Check that fixnums are in proper range for system types. + (ftfont_shape_by_flt): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + * gnutls.c (emacs_gnutls_write, emacs_gnutls_read): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (Fgnutls_error_fatalp, Fgnutls_error_string, Fgnutls_boot): + Check that fixnums are in proper range for system types. + * gnutls.h: Adjust decls to match defn changes elsewhere. + * gtkutil.c (xg_dialog_run): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (update_frame_tool_bar): + Check that fixnums are in proper range for system types. + * image.c (parse_image_spec): Redo count calculation to avoid overflow. + (lookup_image): Check that fixnums are in range for system types. + * indent.c (last_known_column, last_known_column_point): + (current_column_bol_cache): + (skip_invisible, current_column, check_display_width): + (check_display_width, scan_for_column, current_column_1) + (Findent_to, Fcurrent_indentation, position_indentation) + (indented_beyond_p, Fmove_to_column, compute_motion): + (Fcompute_motion, Fvertical_motion): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (last_known_column_modified): Use EMACS_INT, not int. + (check_display_width): + (Fcompute_motion): + Check that fixnums and floats are in proper range for system types. + (compute_motion): Don't assume index or fixnum fits in int. + (compute_motion, Fcompute_motion): + Use int, not EMACS_INT, when it is wide enough. + (vmotion): Omit local var start_hpos that is always 0; that way + we don't need to worry about overflow in expressions involving it. + * indent.h: Adjust decls to match defn changes elsewhere. + (struct position): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + Use int, not EMACS_INT, where int is wide enough. + Remove unused members ovstring_chars_done and tab_offset; + all uses removed. + * insdel.c (move_gap, move_gap_both, gap_left, gap_right) + (adjust_markers_for_delete, adjust_markers_for_insert, adjust_point) + (adjust_markers_for_replace, make_gap_larger, make_gap_smaller) + (make_gap, copy_text, insert, insert_and_inherit) + (insert_before_markers, insert_before_markers_and_inherit) + (insert_1, count_combining_before, count_combining_after) + (insert_1_both, insert_from_string) + (insert_from_string_before_markers, insert_from_string_1) + (insert_from_gap, insert_from_buffer, insert_from_buffer_1) + (adjust_after_replace, adjust_after_insert, replace_range) + (replace_range_2, del_range, del_range_1, del_range_byte) + (del_range_both, del_range_2, modify_region) + (prepare_to_modify_buffer, signal_before_change) + (signal_after_change, Fcombine_after_change_execute): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + * intervals.c (traverse_intervals, rotate_right, rotate_left) + (balance_an_interval, split_interval_right, split_interval_left) + (find_interval, next_interval, update_interval) + (adjust_intervals_for_insertion, delete_node, delete_interval) + (interval_deletion_adjustment, adjust_intervals_for_deletion) + (static_offset_intervals, offset_intervals) + (merge_interval_right, merge_interval_left, make_new_interval) + (graft_intervals_into_buffer, temp_set_point_both) + (temp_set_point, set_point, adjust_for_invis_intang) + (set_point_both, move_if_not_intangible, get_property_and_range) + (get_local_map, copy_intervals, copy_intervals_to_string) + (compare_string_intervals, set_intervals_multibyte_1): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + * intervals.h: Adjust decls to match defn changes elsewhere. + (struct interval): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + * keyboard.c (this_command_key_count, this_single_command_key_start) + (before_command_key_count, before_command_echo_length, echo_now) + (echo_length, recursive_edit_1, Frecursive_edit, Ftrack_mouse) + (command_loop_1, safe_run_hooks, read_char, timer_check_2) + (menu_item_eval_property, read_key_sequence, Fread_key_sequence) + (Fread_key_sequence_vector, Fexecute_extended_command, Fsuspend_emacs): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (last_non_minibuf_size, last_point_position, echo_truncate) + (command_loop_1, adjust_point_for_property, read_char, gen_help_event) + (make_lispy_position, make_lispy_event, parse_modifiers_uncached) + (parse_modifiers, modify_event_symbol, Fexecute_extended_command) + (stuff_buffered_input): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (last_auto_save, command_loop_1, read_char): + Use EMACS_INT, not int, to avoid integer overflow. + (record_char): Avoid overflow in total_keys computation. + (parse_modifiers_uncached): Redo index calculation to avoid overflow. + * keyboard.h: Adjust decls to match defn changes elsewhere. + * keymap.c (Fdefine_key, Fcurrent_active_maps, accessible_keymaps_1) + (Fkey_description, Fdescribe_vector, Flookup_key): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (click_position): New function, to check that positions are in range. + (Fcurrent_active_maps): + (describe_command): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (Faccessible_keymaps, Fkey_description): + (preferred_sequence_p): + Don't assume fixnum can fit into int. + (Fkey_description): Use SAFE_ALLOCA_LISP, not alloca. + Check for integer overflow in size calculations. + (Ftext_char_description): Use CHECK_CHARACTER, not CHECK_NUMBER, to + avoid mishandling large integers. + * lisp.h: Adjust decls to match defn changes elsewhere. + (ARRAY_MARK_FLAG, PSEUDOVECTOR_FLAG, struct Lisp_String) + (struct vectorlike_header, struct Lisp_Subr, struct Lisp_Hash_Table) + (struct Lisp_Marker): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (clip_to_bounds): Now an inline function, moved here from editfns.c. + (GLYPH_CODE_P): Check for overflow in system types, subsuming the + need for GLYPH_CODE_CHAR_VALID_P and doing proper checking ourselves. + All callers changed. + (GLYPH_CODE_CHAR, GLYPH_CODE_FACE): + Assume the arg has valid form, since it always does. + (TYPE_RANGED_INTEGERP): Avoid bug when checking against a wide + unsigned integer system type. + (CHECK_RANGED_INTEGER, CHECK_TYPE_RANGED_INTEGER): New macros. + (struct catchtag, specpdl_size, SPECPDL_INDEX, USE_SAFE_ALLOCA): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (struct catchtag): Use EMACS_INT, not int, since it may be a fixnum. + (duration_to_sec_usec): New decl. + * lread.c (read_from_string_index, read_from_string_index_byte) + (read_from_string_limit, readchar, unreadchar, openp) + (read_internal_start, read1, oblookup): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (Fload, readevalloop, Feval_buffer, Feval_region): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (openp): Check for out-of-range argument to 'access'. + (read1): Use int, not EMACS_INT, where int is wide enough. + Don't assume fixnum fits into int. + Fix off-by-one error that can read outside a buffer. + (read_filtered_event): Use duration_to_sec_usec + to do proper overflow checking on durations. + * macros.c (Fstart_kbd_macro): Use xpalloc to check for overflow + in size calculation. + (Fexecute_kbd_macro): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + * marker.c (cached_charpos, cached_bytepos, CONSIDER) + (byte_char_debug_check, buf_charpos_to_bytepos, verify_bytepos) + (buf_bytepos_to_charpos, Fset_marker, set_marker_restricted) + (set_marker_both, set_marker_restricted_both, marker_position) + (marker_byte_position, Fbuffer_has_markers_at): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (Fset_marker, set_marker_restricted): Don't assume fixnum fits in int. + * menu.c (ensure_menu_items): Renamed from grow_menu_items. + It now merely ensures that the menu is large enough, without + necessarily growing it, as this avoids some integer overflow issues. + All callers changed. + (keymap_panes, parse_single_submenu, Fx_popup_menu): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (parse_single_submenu, Fx_popup_menu): Don't assume fixnum fits in int. + Use SAFE_ALLOCA_LISP, not alloca. + (find_and_return_menu_selection): Avoid unnecessary casts of pointers + to EMACS_INT. Check that fixnums are in proper range for system types. + * minibuf.c (minibuf_prompt_width, string_to_object) + (Fminibuffer_contents, Fminibuffer_contents_no_properties) + (Fminibuffer_completion_contents, Ftry_completion, Fall_completions): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (get_minibuffer, read_minibuf_unwind): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (read_minibuf): Omit unnecessary arg BACKUP_N, which is always nil; + this simplifies overflow checking. All callers changed. + (read_minibuf, Fread_buffer, Ftry_completion, Fall_completions) + (Ftest_completion): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + * nsfns.m (check_ns_display_info): Don't assume fixnum fits in long. + (x_set_menu_bar_lines, x_set_tool_bar_lines, Fx_create_frame): + Check that fixnums are in proper range for system types. + (Fx_create_frame, Fx_show_tip): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + * nsfont.m (ns_findfonts, nsfont_list_family): + Don't assume fixnum fits in long. + * nsmenu.m (ns_update_menubar, ns_menu_show, ns_popup_dialog): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (ns_update_menubar): Use intptr_t, not EMACS_INT, when intptr_t is + wide enough. + * nsselect.m (ns_get_local_selection, clean_local_selection_data): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + * print.c (print_buffer_size, print_buffer_pos, print_buffer_pos_byte) + (PRINTDECLARE, PRINTPREPARE): + (strout, print_string): + (print, print_preprocess, print_check_string_charset_prop) + (print_object): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (PRINTDECLARE): + (temp_output_buffer_setup, Fprin1_to_string, print_object): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (PRINTPREPARE): Use int, not ptrdiff_t, where int is wide enough. + (printchar, strout): Use xpalloc to catch size calculation overflow. + (Fexternal_debugging_output): Don't overflow EMACS_INT->int conversion. + (print_error_message): Use SAFE_ALLOCA, not alloca. + (print_object): Use int, not EMACS_INT, where int is wide enough. + (print_depth, new_backquote_output, print_number_index): + Use ptrdiff_t, not int, where int might not be wide enough. + * process.c (Fdelete_process): Don't assume pid fits into EMACS_INT. + (Fset_process_window_size, Fformat_network_address) + (get_lisp_to_sockaddr_size, set_socket_option, Fmake_network_process) + (sigchld_handler): + Check that fixnums are in proper range for system types. + (Fsignal_process): Simplify by avoiding a goto. + Check for process-ids out of pid_t range rather than relying on + undefined behavior. + (process_tick, update_tick): Use EMACS_INT, not int. + (Fformat_network_address, read_process_output, send_process) + (Fprocess_send_region, status_notify): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (Fformat_network_address, Fmake_serial_process, Fmake_network_process) + (wait_reading_process_output, read_process_output, exec_sentinel): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (conv_lisp_to_sockaddr): Don't assume fixnums fit into int. + (Faccept_process_output): Use duration_to_sec_usec to do proper + overflow checking on durations. + (emacs_get_tty_pgrp, Fprocess_running_child_p, process_send_signal): + Don't assume pid_t fits in int. + * puresize.h (PURESIZE_RATIO): Shrink this to 8/6 on 32-bit hosts + configured --with-wide-int. + * scroll.c (calculate_scrolling, calculate_direct_scrolling) + (line_ins_del): Use int, not EMACS_INT, where int is wide enough. + * search.c (looking_at_1, string_match_1): + (fast_string_match, fast_c_string_match_ignore_case) + (fast_string_match_ignore_case, fast_looking_at, scan_buffer) + (scan_newline, find_before_next_newline, search_command) + (trivial_regexp_p, search_buffer, simple_search, boyer_moore) + (set_search_regs, wordify): + (Freplace_match): + (Fmatch_data): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (string_match_1, search_buffer, set_search_regs): + (Fmatch_data): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (wordify): Check for overflow in size calculation. + (Freplace_match): Avoid potential buffer overflow in search_regs.start. + (Fset_match_data): Don't assume fixnum fits in ptrdiff_t. + Check that fixnums are in proper range for system types. + * sound.c (struct sound_device) + (wav_play, au_play, vox_write, alsa_period_size, alsa_write): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (Fplay_sound_internal): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + * syntax.c (struct lisp_parse_state, find_start_modiff) + (Finternal_describe_syntax_value, scan_lists, scan_sexps_forward): + (Fparse_partial_sexp): + Don't assume fixnums can fit in int. + (struct lisp_parse_state, find_start_pos, find_start_value) + (find_start_value_byte, find_start_begv) + (update_syntax_table, char_quoted, dec_bytepos) + (find_defun_start, prev_char_comend_first, back_comment): + (scan_words, skip_chars, skip_syntaxes, forw_comment, Fforward_comment) + (scan_lists, Fbackward_prefix_chars, scan_sexps_forward): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (Finternal_describe_syntax_value): Check that match_lisp is a + character, not an integer, since the code stuffs it into int. + (scan_words, scan_sexps_forward): + Check that fixnums are in proper range for system types. + (Fforward_word): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (scan_sexps_forward): + Use CHARACTERP, not INTEGERP, since the value must fit into int. + (Fparse_partial_sexp): Fix doc; element 8 is not ignored. + * syntax.h: Adjust decls to match defn changes elsewhere. + (struct gl_state_s): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (SETUP_SYNTAX_TABLE_FOR_OBJECT): Use PTRDIFF_MAX, not + MOST_POSITIVE_FIXNUM. + * sysdep.c (wait_for_termination_1, wait_for_termination) + (interruptible_wait_for_termination, mkdir): + Don't assume pid_t fits in int; on 64-bit AIX pid_t is 64-bit. + (emacs_read, emacs_write): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (system_process_attributes): Don't assume uid_t, gid_t, EMACS_INT, + and double all fit in int. + * term.c (set_tty_color_mode): + Check that fixnums are in proper range for system types. + * termhooks.h (struct input_event): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + * textprop.c (validate_interval_range, interval_of) + (Fadd_text_properties, set_text_properties_1) + (Fremove_text_properties, Fremove_list_of_text_properties) + (Ftext_property_any, Ftext_property_not_all) + (copy_text_properties, text_property_list, extend_property_ranges) + (verify_interval_modification): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (Fnext_single_char_property_change) + (Fprevious_single_char_property_change): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (copy_text_properties): + Check for integer overflow in index calculation. + * undo.c (last_boundary_position, record_point, record_insert) + (record_delete, record_marker_adjustment, record_change) + (record_property_change): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (truncate_undo_list, Fprimitive_undo): Don't assume fixnum fits in int. + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + * w32fns.c (Fx_create_frame, x_create_tip_frame, Fx_show_tip) + (Fx_hide_tip, Fx_file_dialog): + * w32menu.c (set_frame_menubar): + Use ptrdiff_t, not int, for consistency with rest of code. + * window.c (window_scroll_preserve_hpos, window_scroll_preserve_vpos) + (select_window, Fdelete_other_windows_internal) + (window_scroll_pixel_based, window_scroll_line_based) + (Frecenter, Fset_window_configuration): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (Fset_window_hscroll, run_window_configuration_change_hook) + (set_window_buffer, temp_output_buffer_show, scroll_command) + (Fscroll_other_window, Frecenter): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (Fwindow_line_height, window_scroll, Fscroll_left, Fscroll_right): + Don't assume fixnum fits in int. + (Fset_window_scroll_bars): + Check that fixnums are in proper range for system types. + * xdisp.c (help_echo_pos, pos_visible_p, string_pos_nchars_ahead) + (string_pos, c_string_pos, number_of_chars, init_iterator) + (in_ellipses_for_invisible_text_p, init_from_display_pos) + (compute_stop_pos, next_overlay_change, compute_display_string_pos) + (compute_display_string_end, handle_face_prop) + (face_before_or_after_it_pos, handle_invisible_prop) + (handle_display_prop, handle_display_spec, handle_single_display_spec) + (display_prop_intangible_p, string_buffer_position_lim) + (string_buffer_position, handle_composition_prop, load_overlay_strings) + (get_overlay_strings_1, get_overlay_strings) + (iterate_out_of_display_property, forward_to_next_line_start) + (back_to_previous_visible_line_start, reseat, reseat_to_string) + (get_next_display_element, set_iterator_to_next) + (get_visually_first_element, compute_stop_pos_backwards) + (handle_stop_backwards, next_element_from_buffer) + (move_it_in_display_line_to, move_it_in_display_line) + (move_it_to, move_it_vertically_backward, move_it_by_lines) + (add_to_log, message_dolog, message_log_check_duplicate) + (message2, message2_nolog, message3, message3_nolog + (with_echo_area_buffer, display_echo_area_1, resize_mini_window_1) + (current_message_1, truncate_echo_area, truncate_message_1) + (set_message, set_message_1, store_mode_line_noprop) + (hscroll_window_tree, debug_delta, debug_delta_bytes, debug_end_vpos) + (text_outside_line_unchanged_p, check_point_in_composition) + (reconsider_clip_changes) + (redisplay_internal, set_cursor_from_row, try_scrolling) + (try_cursor_movement, set_vertical_scroll_bar, redisplay_window) + (redisplay_window, find_last_unchanged_at_beg_row) + (find_first_unchanged_at_end_row, row_containing_pos, try_window_id) + (trailing_whitespace_p, find_row_edges, display_line) + (RECORD_MAX_MIN_POS, Fcurrent_bidi_paragraph_direction) + (display_mode_element, store_mode_line_string) + (pint2str, pint2hrstr, decode_mode_spec) + (display_count_lines, display_string, draw_glyphs) + (x_produce_glyphs, x_insert_glyphs) + (rows_from_pos_range, mouse_face_from_buffer_pos) + (fast_find_string_pos, mouse_face_from_string_pos) + (note_mode_line_or_margin_highlight, note_mouse_highlight): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (safe_call, init_from_display_pos, handle_fontified_prop) + (handle_single_display_spec, load_overlay_strings) + (with_echo_area_buffer, setup_echo_area_for_printing) + (display_echo_area, echo_area_display) + (x_consider_frame_title, prepare_menu_bars, update_menu_bar) + (update_tool_bar, hscroll_window_tree, redisplay_internal) + (redisplay_window, dump_glyph_row, display_mode_line) + (Fformat_mode_line, decode_mode_spec, on_hot_spot_p): + (handle_display_spec, display_prop_string_p): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (handle_single_display_spec, build_desired_tool_bar_string) + (redisplay_tool_bar, scroll_window_tree, Fdump_glyph_matrix) + (get_specified_cursor_type): + Check that fixnums are in proper range for system types. + (struct overlay_entry, resize_mini_window, Fdump_glyph_row) + (Flookup_image_map): + Don't assume fixnums fit in int. + (compare_overlay_entries): + Avoid mishandling comparisons due to subtraction overflow. + (load_overlay_strings): Use SAFE_NALLOCA, not alloca. + (last_escape_glyph_face_id, last_glyphless_glyph_face_id): + (handle_tool_bar_click): + Use int, not unsigned, since we prefer signed and the signedness + doesn't matter here. + (get_next_display_element, next_element_from_display_vector): + Use int, not EMACS_INT, when int is wide enough. + (start_hourglass): Use duration_to_sec_usec to do proper + overflow checking on durations. + * xfaces.c (Fbitmap_spec_p): + Check that fixnums are in proper range for system types. + (compare_fonts_by_sort_order): + Avoid mishandling comparisons due to subtraction overflow. + (Fx_family_fonts, realize_basic_faces): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (Fx_family_fonts): + Don't assume fixnum fits in int. + Use SAFE_ALLOCA_LISP, not alloca. + (merge_face_heights): Remove unnecessary cast to EMACS_INT. + (Finternal_make_lisp_face): Don't allocate more than MAX_FACE_ID. + (face_at_buffer_position, face_for_overlay_string) + (face_at_string_position): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + (merge_faces): Use int, not EMACS_INT, where int is wide enough. + * xfns.c (x_set_menu_bar_lines, x_set_tool_bar_lines, x_icon_verify) + (Fx_show_tip): + Check that fixnums are in proper range for system types. + (Fx_create_frame, x_create_tip_frame, Fx_show_tip) + (Fx_hide_tip, Fx_file_dialog, Fx_select_font): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (Fx_change_window_property): Don't assume fixnums fit in int. + * xfont.c (xfont_chars_supported): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + * xmenu.c (Fx_popup_dialog, set_frame_menubar) + (create_and_show_popup_menu, create_and_show_dialog, xmenu_show): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + * xml.c (parse_region): + * xrdb.c (magic_file_p): + Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. + * xselect.c (TRACE1): Don't assume pid_t promotes to int. + (x_get_local_selection, x_reply_selection_request) + (x_handle_selection_request, wait_for_property_change): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + (selection_data_to_lisp_data): Use short, not EMACS_INT, where + short is wide enough. + (x_send_client_event): Don't assume fixnum fits in int. + * xterm.c (x_x_to_emacs_modifiers): + Don't assume EMACS_INT overflows nicely into int. + (x_emacs_to_x_modifiers): Use EMACS_INT, not int, because values + may come from Lisp. + (handle_one_xevent): NATNUMP can eval its arg twice. + (x_connection_closed): + Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. + * xterm.h: Adjust decls to match defn changes elsewhere. + (struct scroll_bar): Use struct vectorlike_header + rather than rolling our own approximation. + (SCROLL_BAR_VEC_SIZE): Remove; not used. + + 2012-05-25 Stefan Monnier + + * fileio.c, character.h: Minor style tweaks. + + 2012-05-24 Dmitry Antipov + + * window.h (clip_changed): Remove useless declaration. + + 2012-05-22 Juanma Barranquero + + * makefile.w32-in: Follow-up to 2012-05-22T16:20:27Z!eggert@cs.ucla.edu. + (TAGS, TAGS-gmake, CONFIG_H): Remove further references to m/intel386.h. + + 2012-05-22 Paul Eggert + + Remove src/m/*. + This directory predates autoconf and is no longer needed nowadays. + Move its few remaining bits of functionality to where they're needed. + * m/README, m/alpha.h, m/amdx86-64.h, m/ia64.h, m/ibmrs6000.h: + * m/ibms390x.h, m/intel386.h, m/m68k.h, m/macppc.h, m/sparc.h: + * m/template.h: Remove. + * Makefile.in (M_FILE): Remove. All uses removed. + * alloc.c (POINTERS_MIGHT_HIDE_IN_OBJECTS): + * lisp.h (USE_LSB_TAG): + * mem-limits.h (EXCEEDS_LISP_PTR): + Use VAL_MAX, not VALBITS, in #if. + * lisp.h (EMACS_INT_MAX): New macro, useful in #if. + (EMACS_UINT): Define unconditionally now. + (BITS_PER_CHAR, BITS_PER_SHORT, BITS_PER_INT, BITS_PER_LONG) + (BITS_PER_EMACS_INT): New constants, replacing + what used to be in config.h, but not useful in #if. + (GCTYPEBITS, VALBITS): Define unconditionally, since m/* files don't + define them any more. + (VAL_MAX): New macro. + (VALMASK): Use it. + * puresize.h (PURESIZE_RATIO): Use EMACS_INT_MAX, not + BITS_PER_EMACS_INT, in #if. + * s/aix4-2.h (BROKEN_FIONREAD, BROKEN_SIGAIO, BROKEN_SIGPTY) + (BROKEN_SIGPOLL): Move here from m/ibmrs6000.h, which was removed. + * s/gnu-linux.h (ULIMIT_BREAK_VALUE) [__i386__]: + * s/ms-w32.h (DATA_START): + Move here from removed file m/intel386.h. + * s/gnu.h (NLIST_STRUCT): Remove undef; 'configure' does this. + * s/irix6-5.h (_LP64): Remove; lisp.h no longer needs this. + + 2012-05-21 Paul Eggert + + Assume C89 or later. + * alloc.c, buffer.c, lisp.h: Replace POINTER_TYPE with void. + * alloc.c (overrun_check_malloc, overrun_check_realloc, xmalloc) + (xrealloc): + * buffer.c (mmap_free_1, mmap_enlarge): Omit needless casts. + * editfns.c, fns.c, gmalloc.c, insdel.c, sysdep.c, termcap.c (NULL): + * textprop.c, tparam.c (NULL): Remove. + * ralloc.c, vm-limit.c (POINTER): Assume void * works. + * regex.c (SIGN_EXTEND_CHAR): Assume signed char works. + * regex.h (_RE_ARGS): Remove. All uses rewritten to use prototypes. + * unexelf.c (ElfBitsW): Assume c89 preprocessor or better. + * xterm.c (input_signal_count): Assume volatile works. + + 2012-05-21 Ken Brown + + * xgselect.c (xg_select): Fix first argument in call to 'select' + (bug#11508). + + 2012-05-20 Ken Brown + + * gmalloc.c (_free_internal_nolock, _realloc_internal_nolock) + [CYGWIN]: Cast ptr to (char *) before comparing to _heapbase. + + 2012-05-19 Ken Brown + + * xfns.c (x_in_use): Remove `static' qualifier. + * xterm.h (x_in_use): Declare. + * xgselect.c: Include xterm.h. + (xg_select): Test `x_in_use' instead of `inhibit_window_system' + and `display_arg' (bug#9754). + + 2012-05-19 Paul Eggert + + * s/ms-w32.h (HAVE_GETDOMAINNAME): Remove; not needed. + + * m/vax.h: Remove; no longer needed since HAVE_FTIME is being removed. + * s/ms-w32.h (HAVE_FTIME): Remove; not needed. + + 2012-05-18 Eli Zaretskii + + Fix compilation with -DGLYPH_DEBUG=1 on MS-Windows. + + * w32term.c [GLYPH_DEBUG]: Add prototype for x_check_font. + (x_check_font) [GLYPH_DEBUG]: New function, copied from xterm.c + + * w32fns.c (unwind_create_frame) [GLYPH_DEBUG]: Fix broken + reference to image_cache->refcount. + (x_create_tip_frame): Fix broken use of FRAME_IMAGE_CACHE. + + 2012-05-17 Juri Linkov + + * search.c (Fword_search_regexp, Fword_search_backward) + (Fword_search_forward, Fword_search_backward_lax) + (Fword_search_forward_lax): Move functions to isearch.el + (bug#10145, bug#11381). + + 2012-05-16 Paul Eggert + + * xgselect.c (xg_select): Just invoke 'select' if -nw (Bug#9754). + + 2012-05-15 Stefan Monnier + + * lread.c (init_obarray): Declare Qt and Qnil as special. + + 2012-05-14 Glenn Morris + + * nsterm.m (ns_init_paths): Fix typo ("libexec" not "lib-exec"). + Put "libexec" before "bin", for the sake of init_callproc_1. + + 2012-05-14 Paul Eggert + + * keyboard.c (kbd_buffer_get_event) [!HAVE_DBUS]: Omit unused local. + + * unexaix.c: Port to more-recent AIX compilers. + (report_error, report_error_1, make_hdr, copy_sym) + (mark_x, adjust_lnnoptrs, unrelocate_symbols): + Make arguments const char *, not char *, to avoid violations of C + standard and to fix some AIX warnings reported by Gilles Pion. + + 2012-05-14 Eli Zaretskii + + * xdisp.c (handle_stop): Don't call get_overlay_strings_1 if we + already have overlays loaded. + (handle_single_display_spec): Before returning without displaying + fringe bitmap, synchronize the bidi iterator with the main display + iterator, by calling iterate_out_of_display_property. + (iterate_out_of_display_property): Detect buffer iteration by + testing that it->string is a Lisp string. + (get_next_display_element): When the current object is exhausted, + and there's something on it->stack, call set_iterator_to_next to + proceed with what's on the stack, instead of returning zero. + (set_iterator_to_next): If called at the end of a Lisp string, + proceed to consider_string_end without incrementing string + position. Don't increment display vector index past the end of + the display vector. (Bug#11417) + (pos_visible_p): Don't report a position visible when move_it_to + stopped at the last line of window, which happens to be scanned + backwards by the bidi iteration. (Bug#11464) + + 2012-05-14 Eli Zaretskii + + * xdisp.c (handle_single_display_spec): Return 1 for left-margin + and right-margin display specs even if the spec is invalid or we + are on a TTY, and thus unable to display on the fringes. That's + because the text with the property will not be displayed anyway, + so we need to signal to the caller that this is a "replacing" + display spec. This fixes display when the spec is invalid or we + are on a TTY. + + 2012-05-14 Paul Eggert + + * unexaix.c (make_hdr): Fix typo in prototype. + This bug broke the build on AIX. Problem reported by Gilles Pion. + + 2012-05-14 Michael Albinus + + * keyboard.c (kbd_buffer_get_event): Read special events also in + batch mode. (Bug#11415) + + 2012-05-12 Glenn Morris + + * ns.mk: Update for ns_appbindir no longer having trailing "/". + + 2012-05-12 Eli Zaretskii + + * lisp.mk (lisp): Add newcomment.elc. + + 2012-05-12 Glenn Morris + + * Makefile.in (MKDIR_P): New, set by configure. + * ns.mk (${ns_appdir}, ${ns_appbindir}Emacs): Use $MKDIR_P. + + 2012-05-11 Paul Eggert + + Remove unused function hourglass_started. + * dispextern.h (hourglass_started): + * w32fns.c (hourglass_started): + * xdisp.c (hourglass_started): Remove. + + 2012-05-10 Juanma Barranquero + + * makefile.w32-in ($(BLD)/gmalloc.$(O), $(BLD)/w32menu.$(O)): + Update dependencies. + + 2012-05-10 Paul Eggert + + * xgselect.c (xg_select): Put maxfds+1 into a var. + This is slightly clearer, and pacifies Ubuntu 12.04 gcc. + + * sound.c (DEFAULT_ALSA_SOUND_DEVICE): Define only if HAVE_ALSA. + + 2012-05-10 Dave Abrahams + + * filelock.c (syms_of_filelock): New boolean create-lockfiles. + (lock_file): If create_lockfiles is 0, do nothing. (Bug#11227) + + 2012-05-09 Michael Albinus + + * dbusbind.c (xd_registered_buses): New internal Lisp object. + Rename all occurences of Vdbus_registered_buses to xd_registered_buses. + (syms_of_dbusbind): Remove declaration of Vdbus_registered_buses. + Initialize xd_registered_buses. + + 2012-05-09 Paul Eggert + + Untag more efficiently if USE_LSB_TAG. + This is based on a proposal by YAMAMOTO Mitsuharu in + . + For an admittedly artificial (nth 8000 longlist) benchmark on + Fedora 15 x86-64, this yields a 25% CPU speedup. Also, it shrinks + Emacs's overall text size by 1%. + * lisp.h (XUNTAG): New macro. + (XCONS, XVECTOR, XSTRING, XSYMBOL, XFLOAT, XMISC, XPROCESS, XWINDOW) + (XTERMINAL, XSUBR, XBUFFER, XCHAR_TABLE, XSUB_CHAR_TABLE, XBOOL_VECTOR) + (XSETTYPED_PSEUDOVECTOR, XHASH_TABLE, TYPED_PSEUDOVECTORP): Use it. + * eval.c (Fautoload): + * font.h (XFONT_SPEC, XFONT_ENTITY, XFONT_OBJECT): + * frame.h (XFRAME): Use XUNTAG. + + Port recent dbusbind.c changes to 32-bit --with-wide-int. + * dbusbind.c (xd_append_arg, xd_retrieve_arg, Fdbus_message_internal): + Remove unportable assumptions about print widths of types like + dbus_uint32_t. + (xd_get_connection_address, Fdbus_init_bus): Cast Emacs integer to + intptr_t when converting between pointer and integer, to avoid GCC + warnings about wrong width. + + 2012-05-09 Eli Zaretskii + + * w32proc.c (new_child): Force Windows to reserve only 64KB of + stack for each reader_thread, instead of defaulting to 8MB + determined by the linker. This avoids failures in creating + subprocesses on Windows 7, see the discussion in this thread: + http://lists.gnu.org/archive/html/emacs-devel/2012-03/msg00119.html. + + 2012-05-07 Jérémy Compostella + + Fix up display of the *Minibuf-0* buffer in the mini window. + * keyboard.c (read_char): Don't clear the echo area if there's no + message to clear. + * xdisp.c (redisplay_internal): Redisplay the mini window (with the + contents of *Minibuf-0*) if there's no message displayed in its stead. + + 2012-05-07 Michael Albinus + + * dbusbind.c (XD_DEBUG_MESSAGE): Don't print message twice in + batch mode. + + 2012-05-06 Chong Yidong + + * lisp.mk (lisp): Update. + + 2012-05-05 Jim Meyering + + * w32font.c (fill_in_logfont): NUL-terminate a string (Bug#11372). + + 2012-05-04 Stefan Monnier + + * data.c (PUT_ERROR): New macro. + (syms_of_data): Use it. Add new error type `user-error'. + * undo.c (user_error): New function. + (Fprimitive_undo): Use it. + * print.c (print_error_message): Adjust print style for `user-error'. + * keyboard.c (user_error): New function. + (Fexit_recursive_edit, Fabort_recursive_edit): Use it. + + 2012-05-03 Paul Eggert + + Do not limit current-time-string to years 1000..9999. + * editfns.c (TM_YEAR_IN_ASCTIME_RANGE): Remove. + (Fcurrent_time_string): Support any year that is supported by the + underlying localtime representation. Don't use asctime, as it + has undefined behavior for years outside the range -999..9999. + + 2012-05-02 Paul Eggert + + Fix race conditions involving setenv, gmtime, localtime, asctime. + Without this fix, interrupts could mess up code that uses these + nonreentrant functions, since setting TZ invalidates existing + tm_zone or tzname values, and since most of these functions return + pointers to static storage. + * editfns.c (format_time_string, Fdecode_time, Fencode_time) + (Fcurrent_time_string, Fcurrent_time_zone, Fset_time_zone_rule): + Grow the critical sections to include not just invoking + localtime/gmtime, but also accessing these functions' results + including their tm_zone values if any, and any related TZ setting. + (format_time_string): Last arg is now struct tm *, not struct tm **, + so that the struct tm is saved in the critical section. + All callers changed. Simplify allocation of initial buffer, partly + motivated by the fact that memory allocation needs to be outside + the critical section. + + 2012-05-02 Dmitry Antipov + + * intervals.c (adjust_intervals_for_insertion): Initialize `newi' + with RESET_INTERVAL. + + * buffer.c (Fget_buffer_create, Fmake_indirect_buffer): + Remove duplicated buffer name initialization. + + 2012-05-02 Jim Meyering + + * xterm.c (x_term_init): Use memcpy instead of strncpy (Bug#11373). + + * xfns.c (x_window): Use xstrdup (Bug#11375). + + 2012-05-02 Eli Zaretskii + + * xdisp.c (pos_visible_p): If already at a newline from the + display string before the 'while' loop, don't walk back the glyphs + from it3.glyph_row. Solves assertion violation when the display + string begins with a newline (egg.el). (Bug#11367) + + 2012-05-01 Stefan Monnier + + * keyboard.c (Fexecute_extended_command, Vsuggest_key_bindings): + Move to simple.el. + + 2012-05-01 Glenn Morris + + * syssignal.h: Remove reference to BROKEN_SIGINFO (last used in + s/ptx4.h), BROKEN_SIGTSTP (last used in m/ustation.h, m/dpx2.h), + and BROKEN_SIGURG (was in s/gnu-linux.h prior to 2008-02-10). + All were removed before 23.1. + + * dispnew.c: Remove HAVE_LIBNCURSES test; + it is always true on relevant platforms. + + * Makefile.in (LD_SWITCH_X_SITE_RPATH): + Rename from LD_SWITCH_X_SITE_AUX_RPATH. + + * Makefile.in (LD_SWITCH_X_SITE_AUX): Remove; no longer used. + + 2012-04-30 Andreas Schwab + + * .gdbinit (xpr): Remove checks for no longer existing misc types. + (xintfwd, xboolfwd, xobjfwd, xbufobjfwd, xkbobjfwd, xbuflocal): + Remove. + + 2012-04-28 Paul Eggert + + Do not avoid creating empty evaporating overlays (Bug#9642). + * buffer.c (Fmove_overlay): Revert the change of 2012-04-23. + That is, do not delete an evaporating overlay if it becomes + empty after its bounds are adjusted to fit within its buffer. + This fix caused other problems, and I'm reverting it until we get + to the bottom of them. + + 2012-04-27 Chong Yidong + + * xselect.c (x_convert_selection): Initialize a pointer (Bug#11315). + + 2012-04-27 Eli Zaretskii + + * xdisp.c (pos_visible_p): If the window start position is beyond + ZV, start the display from buffer beginning. Prevents assertion + violation in init_iterator when the minibuffer window is scrolled + via the scroll bar. + + * window.c (window_scroll_pixel_based): Likewise. + + 2012-04-27 Chong Yidong + + * keymap.c (where_is_internal): Doc fix (Bug#10872). + + 2012-04-27 Glenn Morris + + * fileio.c (Fcopy_file, Fset_file_selinux_context): + Ignore ENOTSUP failures from setfilecon functions. (Bug#11245) + + 2012-04-27 Eli Zaretskii + + * dispnew.c (swap_glyph_pointers, copy_row_except_pointers): + Don't overrun array limits of glyph row's used[] array. (Bug#11288) + + 2012-04-26 Eli Zaretskii + + * xdisp.c (IT_DISPLAYING_WHITESPACE): In addition to the loaded + display element, check also the underlying string or buffer + character. (Bug#11341) + + * w32menu.c: Include w32heap.h. + (add_menu_item): If the call to AppendMenuW (via + unicode_append_menu) fails, disable Unicode menus only if we are + running on Windows 9X/Me. + + 2012-04-24 Andreas Schwab + + * .gdbinit (xpr): Handle USE_2_TAGS_FOR_INTS. + (xgetint): Add missing shift for LSB tags. + + 2012-04-24 Martin Rudalics + + * keyboard.c (read_char): Don't wipe echo area for select window + events: These might get delayed via `mouse-autoselect-window' + (Bug#11304). + + 2012-04-24 Juanma Barranquero + + * gnutls.c (init_gnutls_functions): Protect against (unlikely) + manipulation of :loaded-from data. + + 2012-04-23 Juanma Barranquero + + * gnutls.c (init_gnutls_functions): The value of :loaded-from is + now a cons (bug#11311). + + 2012-04-23 Paul Eggert + + Do not create empty overlays with the evaporate property (Bug#9642). + * buffer.c (Fmove_overlay): Delete an evaporating overlay + if it becomes empty after its bounds are adjusted to fit within + its buffer. Without this fix, in a nonempty buffer (let ((o + (make-overlay 1 2))) (overlay-put o 'evaporate t) (move-overlay o 0 1)) + yields an empty overlay that has the evaporate property, which is + not supposed to happen. + + Fix minor GTK3 problems found by static checking. + * emacsgtkfixed.c (EMACS_TYPE_FIXED, EMACS_FIXED, EmacsFixed) + (EmacsFixedPrivate, EmacsFixedClass, struct _EmacsFixed) + (struct _EmacsFixedClass, emacs_fixed_get_type): + Move decls here from emacsgtkfixed.h, since they needn't be public. + (emacs_fixed_get_type): Now static. + (emacs_fixed_class_init): Omit unused local. + (emacs_fixed_child_type): Remove; unused. + * emacsgtkfixed.h (EMACS_TYPE_FIXED, EMACS_FIXED, EmacsFixed) + (EmacsFixedPrivate, EmacsFixedClass, struct _EmacsFixed) + (struct _EmacsFixedClass): Move to emacsgtkfixed.c. + (EMACS_FIXED_CLASS, EMACS_IS_FIXED, EMACS_IS_FIXED_CLASS) + (EMACS_FIXED_GET_CLASS): Remove; unused. + * gtkutil.c (xg_create_frame_widgets) [!HAVE_GTK3]: Omit unused local. + + * keyboard.c (handle_async_input): Define only if SYNC_INPUT || SIGIO. + Problem reported by Juanma Barranquero for Windows -Wunused-function. + + 2012-04-22 Paul Eggert + + Modernize and clean up gmalloc.c to assume C89 (Bug#9119). + * gmalloc.c (_MALLOC_INTERNAL, _MALLOC_H, _PP, __ptr_t) + (__malloc_size_t, __malloc_ptrdiff_t): + Remove. All uses removed, replaced by the definiens if needed, + since we can assume C89 or better now. + Include , for PTRDIFF_MAX, uintptr_t. + (protect_malloc_state, align, get_contiguous_space) + (malloc_atfork_handler_prepare, malloc_atfork_handler_parent) + (malloc_atfork_handler_child, malloc_enable_thread) + (malloc_initialize_1, __malloc_initialize, morecore_nolock) + (_malloc_internal_nolock, _malloc_internal, malloc, _malloc) + (_free, _realloc, _free_internal_nolock, _free_internal, free, cfree) + (special_realloc, _realloc_internal_nolock, _realloc_internal) + (realloc, calloc, __default_morecore, memalign, valloc, checkhdr) + (freehook, mallochook, reallochook, mabort, mcheck, mprobe): + Define using prototypes, not old style. + (align, _malloc_internal_nolock, _free_internal_nolock, memalign): + Don't assume ptrdiff_t and uintptr_t are no wider than unsigned long. + (align): Don't assume that signed integer overflow wraps around. + Omit unused local var. + (malloc_initialize_1, morecore_nolock, _malloc_internal_nolock) + (_free_internal_nolock, memalign, mallochook, reallochook): + Omit no-longer-needed casts. + (valloc): Use getpagesize, not __getpagesize. + (MAGICWORD, MAGICFREE): Now randomish size_t values, not 32-bit. + (struct hdr): The 'magic' member is now size_t, not unsigned long. + + * dbusbind.c (XD_DBUS_VALIDATE_OBJECT): Define only if needed. + + 2012-04-22 Michael Albinus + + Move functions from C to Lisp. Make non-blocking method calls + the default. Implement further D-Bus standard interfaces. + + * dbusbind.c (DBUS_NUM_MESSAGE_TYPES): Declare. + (QCdbus_request_name_allow_replacement) + (QCdbus_request_name_replace_existing) + (QCdbus_request_name_do_not_queue) + (QCdbus_request_name_reply_primary_owner) + (QCdbus_request_name_reply_in_queue) + (QCdbus_request_name_reply_exists) + (QCdbus_request_name_reply_already_owner): Move to dbus.el. + (QCdbus_registered_serial, QCdbus_registered_method) + (QCdbus_registered_signal): New Lisp objects. + (XD_DEBUG_MESSAGE): Use sizeof. + (XD_MESSAGE_TYPE_TO_STRING, XD_OBJECT_TO_STRING) + (XD_DBUS_VALIDATE_BUS_ADDRESS, XD_DBUS_VALIDATE_OBJECT) + (XD_DBUS_VALIDATE_BUS_NAME, XD_DBUS_VALIDATE_PATH) + (XD_DBUS_VALIDATE_INTERFACE, XD_DBUS_VALIDATE_MEMBER): New macros. + (XD_CHECK_DBUS_SERIAL): Rename from CHECK_DBUS_SERIAL_GET_SERIAL. + (xd_signature, xd_append_arg): Allow float for integer types. + (xd_get_connection_references): New function. + (xd_get_connection_address): Rename from xd_initialize. + Return cached address. + (xd_remove_watch): Do not unset $DBUS_SESSION_BUS_ADDRESS. + (xd_close_bus): Rename from Fdbus_close_bus. Not needed on Lisp + level. + (Fdbus_init_bus): New optional arg PRIVATE. Cache address. + Return number of refcounts. + (Fdbus_get_unique_name): Make stronger parameter check. + (Fdbus_message_internal): New defun. + (Fdbus_call_method, Fdbus_call_method_asynchronously) + (Fdbus_method_return_internal, Fdbus_method_error_internal) + (Fdbus_send_signal, Fdbus_register_service) + (Fdbus_register_signal, Fdbus_register_method): Move to dbus.el. + (xd_read_message_1): Obey new structure of Vdbus_registered_objects. + (xd_read_queued_messages): Obey new structure of Vdbus_registered_buses. + (Vdbus_compiled_version, Vdbus_runtime_version) + (Vdbus_message_type_invalid, Vdbus_message_type_method_call) + (Vdbus_message_type_method_return, Vdbus_message_type_error) + (Vdbus_message_type_signal): New defvars. + (Vdbus_registered_buses, Vdbus_registered_objects_table): + Adapt docstring. + + 2012-04-22 Paul Eggert + + Fix GC_MALLOC_CHECK debugging output on 64-bit hosts. + * alloc.c (emacs_blocked_malloc) [GC_MALLOC_CHECK]: + Do not assume ptrdiff_t is the same width as 'int'. + + * alloc.c: Handle unusual debugging option combinations. + (GC_CHECK_MARKED_OBJECTS): Undef if ! GC_MARK_STACK, + since the two debugging options are incompatible. + (GC_MALLOC_CHECK): Similarly, undef if GC_CHECK_MARKED_OBJECTS + is defined. + (mem_init, mem_insert, mem_insert_fixup): + Define if GC_MARK_STACK || GC_MALLOC_CHECK. + (NEED_MEM_INSERT): Remove; no longer needed. + 2012-04-22 Leo Liu * sysdep.c (list_system_processes): Support Darwin (Bug#5725). diff --cc src/alloc.c index c07d5c929f9,1f422a6d3b0..05d2db274da --- a/src/alloc.c +++ b/src/alloc.c @@@ -379,8 -387,8 +387,8 @@@ static void *min_heap_address, *max_hea static struct mem_node mem_z; #define MEM_NIL &mem_z -static struct Lisp_Vector *allocate_vectorlike (EMACS_INT); +static struct Lisp_Vector *allocate_vectorlike (ptrdiff_t); - static void lisp_free (POINTER_TYPE *); + static void lisp_free (void *); static void mark_stack (void); static int live_vector_p (struct mem_node *, void *); static int live_buffer_p (struct mem_node *, void *); diff --cc src/buffer.c index d3d5bd268a2,4dcdf7bae69..dbaa9f0cc82 --- a/src/buffer.c +++ b/src/buffer.c @@@ -2052,18 -2051,18 +2050,18 @@@ DEFUN ("buffer-swap-text", Fbuffer_swap eassert (current_buffer->text == ¤t_buffer->own_text); eassert (other_buffer->text == &other_buffer->own_text); #ifdef REL_ALLOC - r_alloc_reset_variable ((POINTER_TYPE **) ¤t_buffer->own_text.beg, - (POINTER_TYPE **) &other_buffer->own_text.beg); - r_alloc_reset_variable ((POINTER_TYPE **) &other_buffer->own_text.beg, - (POINTER_TYPE **) ¤t_buffer->own_text.beg); + r_alloc_reset_variable ((void **) ¤t_buffer->own_text.beg, + (void **) &other_buffer->own_text.beg); + r_alloc_reset_variable ((void **) &other_buffer->own_text.beg, + (void **) ¤t_buffer->own_text.beg); #endif /* REL_ALLOC */ - swapfield (pt, EMACS_INT); - swapfield (pt_byte, EMACS_INT); - swapfield (begv, EMACS_INT); - swapfield (begv_byte, EMACS_INT); - swapfield (zv, EMACS_INT); - swapfield (zv_byte, EMACS_INT); + swapfield (pt, ptrdiff_t); + swapfield (pt_byte, ptrdiff_t); + swapfield (begv, ptrdiff_t); + swapfield (begv_byte, ptrdiff_t); + swapfield (zv, ptrdiff_t); + swapfield (zv_byte, ptrdiff_t); eassert (!current_buffer->base_buffer); eassert (!other_buffer->base_buffer); current_buffer->clip_changed = 1; other_buffer->clip_changed = 1; @@@ -4796,9 -4795,9 +4794,9 @@@ alloc_buffer_text (struct buffer *b, pt shrink it. */ void -enlarge_buffer_text (struct buffer *b, EMACS_INT delta) +enlarge_buffer_text (struct buffer *b, ptrdiff_t delta) { - POINTER_TYPE *p; + void *p; ptrdiff_t nbytes = (BUF_Z_BYTE (b) - BUF_BEG_BYTE (b) + BUF_GAP_SIZE (b) + 1 + delta); BLOCK_INPUT; diff --cc src/dbusbind.c index c4e57dad98a,62923b462b5..2ed7369c9dc --- a/src/dbusbind.c +++ b/src/dbusbind.c @@@ -451,6 -538,6 +538,54 @@@ xd_signature (char *signature, unsigne XD_DEBUG_MESSAGE ("%s", signature); } ++/* Convert X to a signed integer with bounds LO and HI. */ ++static intmax_t ++extract_signed (Lisp_Object x, intmax_t lo, intmax_t hi) ++{ ++ CHECK_NUMBER_OR_FLOAT (x); ++ if (INTEGERP (x)) ++ { ++ if (lo <= XINT (x) && XINT (x) <= hi) ++ return XINT (x); ++ } ++ else ++ { ++ double d = XFLOAT_DATA (x); ++ if (lo <= d && d <= hi) ++ { ++ intmax_t n = d; ++ if (n == d) ++ return n; ++ } ++ } ++ args_out_of_range_3 (x, ++ make_fixnum_or_float (lo), ++ make_fixnum_or_float (hi)); ++} ++ ++/* Convert X to an unsigned integer with bounds 0 and HI. */ ++static uintmax_t ++extract_unsigned (Lisp_Object x, uintmax_t hi) ++{ ++ CHECK_NUMBER_OR_FLOAT (x); ++ if (INTEGERP (x)) ++ { ++ if (0 <= XINT (x) && XINT (x) <= hi) ++ return XINT (x); ++ } ++ else ++ { ++ double d = XFLOAT_DATA (x); ++ if (0 <= d && d <= hi) ++ { ++ uintmax_t n = d; ++ if (n == d) ++ return n; ++ } ++ } ++ args_out_of_range_2 (x, make_fixnum_or_float (hi)); ++} ++ /* Append C value, extracted from Lisp OBJECT, to iteration ITER. DTYPE must be a valid DBusType. It is used to convert Lisp objects, being arguments of `dbus-call-method' or @@@ -485,30 -572,32 +620,34 @@@ xd_append_arg (unsigned int dtype, Lisp } case DBUS_TYPE_INT16: - CHECK_NUMBER (object); + CHECK_TYPE_RANGED_INTEGER (dbus_int16_t, object); { dbus_int16_t val = XINT (object); - XD_DEBUG_MESSAGE ("%c %d", dtype, (int) val); + int pval = val; + XD_DEBUG_MESSAGE ("%c %d", dtype, pval); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); return; } case DBUS_TYPE_UINT16: - CHECK_NATNUM (object); + CHECK_TYPE_RANGED_INTEGER (dbus_uint16_t, object); { dbus_uint16_t val = XFASTINT (object); - XD_DEBUG_MESSAGE ("%c %u", dtype, (unsigned int) val); + unsigned int pval = val; + XD_DEBUG_MESSAGE ("%c %u", dtype, pval); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); return; } case DBUS_TYPE_INT32: - CHECK_TYPE_RANGED_INTEGER (dbus_int32_t, object); { - dbus_int32_t val = XINT (object); - XD_DEBUG_MESSAGE ("%c %d", dtype, val); - dbus_int32_t val = extract_float (object); ++ dbus_int32_t val = extract_signed (object, ++ TYPE_MINIMUM (dbus_int32_t), ++ TYPE_MAXIMUM (dbus_int32_t)); + int pval = val; + XD_DEBUG_MESSAGE ("%c %d", dtype, pval); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); return; @@@ -518,30 -607,30 +657,35 @@@ #ifdef DBUS_TYPE_UNIX_FD case DBUS_TYPE_UNIX_FD: #endif - CHECK_TYPE_RANGED_INTEGER (dbus_uint32_t, object); { - dbus_uint32_t val = XFASTINT (object); - XD_DEBUG_MESSAGE ("%c %u", dtype, val); - dbus_uint32_t val = extract_float (object); ++ dbus_uint32_t val = extract_unsigned (object, ++ TYPE_MAXIMUM (dbus_uint32_t)); + unsigned int pval = val; + XD_DEBUG_MESSAGE ("%c %u", dtype, pval); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); return; } case DBUS_TYPE_INT64: - CHECK_NUMBER (object); ++ CHECK_TYPE_RANGED_INTEGER_OR_FLOAT (dbus_int64_t, object); { - dbus_int64_t val = XINT (object); - XD_DEBUG_MESSAGE ("%c %d", dtype, (int) val); - dbus_int64_t val = extract_float (object); ++ dbus_int64_t val = extract_signed (object, ++ TYPE_MINIMUM (dbus_int64_t), ++ TYPE_MAXIMUM (dbus_int64_t)); + printmax_t pval = val; + XD_DEBUG_MESSAGE ("%c %"pMd, dtype, pval); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); return; } case DBUS_TYPE_UINT64: - CHECK_TYPE_RANGED_INTEGER (dbus_uint64_t, object); { - dbus_uint64_t val = XFASTINT (object); - XD_DEBUG_MESSAGE ("%c %"pI"d", dtype, XFASTINT (object)); - dbus_uint64_t val = extract_float (object); ++ dbus_uint64_t val = extract_unsigned (object, ++ TYPE_MAXIMUM (dbus_uint64_t)); + uprintmax_t pval = val; + XD_DEBUG_MESSAGE ("%c %"pMu, dtype, pval); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); return; @@@ -1025,128 -1158,213 +1213,213 @@@ DEFUN ("dbus-get-unique-name", Fdbus_ge return build_string (name); } - DEFUN ("dbus-call-method", Fdbus_call_method, Sdbus_call_method, 5, MANY, 0, - doc: /* Call METHOD on the D-Bus BUS. - - BUS is either a Lisp symbol, `:system' or `:session', or a string - denoting the bus address. - - SERVICE is the D-Bus service name to be used. PATH is the D-Bus - object path SERVICE is registered at. INTERFACE is an interface - offered by SERVICE. It must provide METHOD. - - If the parameter `:timeout' is given, the following integer TIMEOUT - specifies the maximum number of milliseconds the method call must - return. The default value is 25,000. If the method call doesn't - return in time, a D-Bus error is raised. - - All other arguments ARGS are passed to METHOD as arguments. They are - converted into D-Bus types via the following rules: - - t and nil => DBUS_TYPE_BOOLEAN - number => DBUS_TYPE_UINT32 - integer => DBUS_TYPE_INT32 - float => DBUS_TYPE_DOUBLE - string => DBUS_TYPE_STRING - list => DBUS_TYPE_ARRAY - - All arguments can be preceded by a type symbol. For details about - type symbols, see Info node `(dbus)Type Conversion'. - - `dbus-call-method' returns the resulting values of METHOD as a list of - Lisp objects. The type conversion happens the other direction as for - input arguments. It follows the mapping rules: - - DBUS_TYPE_BOOLEAN => t or nil - DBUS_TYPE_BYTE => number - DBUS_TYPE_UINT16 => number - DBUS_TYPE_INT16 => integer - DBUS_TYPE_UINT32 => number or float - DBUS_TYPE_UNIX_FD => number or float - DBUS_TYPE_INT32 => integer or float - DBUS_TYPE_UINT64 => number or float - DBUS_TYPE_INT64 => integer or float - DBUS_TYPE_DOUBLE => float - DBUS_TYPE_STRING => string - DBUS_TYPE_OBJECT_PATH => string - DBUS_TYPE_SIGNATURE => string - DBUS_TYPE_ARRAY => list - DBUS_TYPE_VARIANT => list - DBUS_TYPE_STRUCT => list - DBUS_TYPE_DICT_ENTRY => list - - Example: - - \(dbus-call-method - :session "org.gnome.seahorse" "/org/gnome/seahorse/keys/openpgp" - "org.gnome.seahorse.Keys" "GetKeyField" - "openpgp:657984B8C7A966DD" "simple-name") - - => (t ("Philip R. Zimmermann")) - - If the result of the METHOD call is just one value, the converted Lisp - object is returned instead of a list containing this single Lisp object. - - \(dbus-call-method - :system "org.freedesktop.Hal" "/org/freedesktop/Hal/devices/computer" - "org.freedesktop.Hal.Device" "GetPropertyString" - "system.kernel.machine") - - => "i686" - - usage: (dbus-call-method BUS SERVICE PATH INTERFACE METHOD &optional :timeout TIMEOUT &rest ARGS) */) + DEFUN ("dbus-message-internal", Fdbus_message_internal, Sdbus_message_internal, + 4, MANY, 0, + doc: /* Send a D-Bus message. + This is an internal function, it shall not be used outside dbus.el. + + The following usages are expected: + + `dbus-call-method', `dbus-call-method-asynchronously': + \(dbus-message-internal + dbus-message-type-method-call BUS SERVICE PATH INTERFACE METHOD HANDLER + &optional :timeout TIMEOUT &rest ARGS) + + `dbus-send-signal': + \(dbus-message-internal + dbus-message-type-signal BUS SERVICE PATH INTERFACE SIGNAL &rest ARGS) + + `dbus-method-return-internal': + \(dbus-message-internal + dbus-message-type-method-return BUS SERVICE SERIAL &rest ARGS) + + `dbus-method-error-internal': + \(dbus-message-internal + dbus-message-type-error BUS SERVICE SERIAL &rest ARGS) + + usage: (dbus-message-internal &rest REST) */) (ptrdiff_t nargs, Lisp_Object *args) { - Lisp_Object bus, service, path, interface, method; + Lisp_Object message_type, bus, service, handler; + Lisp_Object path = Qnil; + Lisp_Object interface = Qnil; + Lisp_Object member = Qnil; Lisp_Object result; - struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; + struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, gcpro6; DBusConnection *connection; DBusMessage *dmessage; - DBusMessage *reply; DBusMessageIter iter; - DBusError derror; unsigned int dtype; + unsigned int mtype; + dbus_uint32_t serial = 0; + unsigned int ui_serial; int timeout = -1; - ptrdiff_t i = 5; + ptrdiff_t count; char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH]; + /* Initialize parameters. */ + message_type = args[0]; + bus = args[1]; + service = args[2]; + handler = Qnil; + + CHECK_NATNUM (message_type); + mtype = XFASTINT (message_type); + if ((mtype <= DBUS_MESSAGE_TYPE_INVALID) || (mtype >= DBUS_NUM_MESSAGE_TYPES)) + XD_SIGNAL2 (build_string ("Invalid message type"), message_type); + + if ((mtype == DBUS_MESSAGE_TYPE_METHOD_CALL) + || (mtype == DBUS_MESSAGE_TYPE_SIGNAL)) + { + path = args[3]; + interface = args[4]; + member = args[5]; + if (mtype == DBUS_MESSAGE_TYPE_METHOD_CALL) + handler = args[6]; + count = (mtype == DBUS_MESSAGE_TYPE_METHOD_CALL) ? 7 : 6; + } + else /* DBUS_MESSAGE_TYPE_METHOD_RETURN, DBUS_MESSAGE_TYPE_ERROR */ + { + XD_CHECK_DBUS_SERIAL (args[3], serial); + count = 4; + } + /* Check parameters. */ - bus = args[0]; - service = args[1]; - path = args[2]; - interface = args[3]; - method = args[4]; - - CHECK_STRING (service); - CHECK_STRING (path); - CHECK_STRING (interface); - CHECK_STRING (method); - GCPRO5 (bus, service, path, interface, method); - - XD_DEBUG_MESSAGE ("%s %s %s %s", - SDATA (service), - SDATA (path), - SDATA (interface), - SDATA (method)); - - /* Open a connection to the bus. */ - connection = xd_initialize (bus, TRUE); - - /* Create the message. */ - dmessage = dbus_message_new_method_call (SSDATA (service), - SSDATA (path), - SSDATA (interface), - SSDATA (method)); - UNGCPRO; + XD_DBUS_VALIDATE_BUS_ADDRESS (bus); + XD_DBUS_VALIDATE_BUS_NAME (service); + if (nargs < count) + xsignal2 (Qwrong_number_of_arguments, + Qdbus_message_internal, + make_number (nargs)); + + if ((mtype == DBUS_MESSAGE_TYPE_METHOD_CALL) + || (mtype == DBUS_MESSAGE_TYPE_SIGNAL)) + { + XD_DBUS_VALIDATE_PATH (path); + XD_DBUS_VALIDATE_INTERFACE (interface); + XD_DBUS_VALIDATE_MEMBER (member); + if (!NILP (handler) && (!FUNCTIONP (handler))) + wrong_type_argument (Qinvalid_function, handler); + } + + /* Protect Lisp variables. */ + GCPRO6 (bus, service, path, interface, member, handler); + + /* Trace parameters. */ + switch (mtype) + { + case DBUS_MESSAGE_TYPE_METHOD_CALL: + XD_DEBUG_MESSAGE ("%s %s %s %s %s %s %s", + XD_MESSAGE_TYPE_TO_STRING (mtype), + XD_OBJECT_TO_STRING (bus), + XD_OBJECT_TO_STRING (service), + XD_OBJECT_TO_STRING (path), + XD_OBJECT_TO_STRING (interface), + XD_OBJECT_TO_STRING (member), + XD_OBJECT_TO_STRING (handler)); + break; + case DBUS_MESSAGE_TYPE_SIGNAL: + XD_DEBUG_MESSAGE ("%s %s %s %s %s %s", + XD_MESSAGE_TYPE_TO_STRING (mtype), + XD_OBJECT_TO_STRING (bus), + XD_OBJECT_TO_STRING (service), + XD_OBJECT_TO_STRING (path), + XD_OBJECT_TO_STRING (interface), + XD_OBJECT_TO_STRING (member)); + break; + default: /* DBUS_MESSAGE_TYPE_METHOD_RETURN, DBUS_MESSAGE_TYPE_ERROR */ + ui_serial = serial; + XD_DEBUG_MESSAGE ("%s %s %s %u", + XD_MESSAGE_TYPE_TO_STRING (mtype), + XD_OBJECT_TO_STRING (bus), + XD_OBJECT_TO_STRING (service), + ui_serial); + } + + /* Retrieve bus address. */ + connection = xd_get_connection_address (bus); + + /* Create the D-Bus message. */ + dmessage = dbus_message_new (mtype); if (dmessage == NULL) - XD_SIGNAL1 (build_string ("Unable to create a new message")); + { + UNGCPRO; + XD_SIGNAL1 (build_string ("Unable to create a new message")); + } + + if (STRINGP (service)) + { + if (mtype != DBUS_MESSAGE_TYPE_SIGNAL) + /* Set destination. */ + { + if (!dbus_message_set_destination (dmessage, SSDATA (service))) + { + UNGCPRO; + XD_SIGNAL2 (build_string ("Unable to set the destination"), + service); + } + } + + else + /* Set destination for unicast signals. */ + { + Lisp_Object uname; + + /* If it is the same unique name as we are registered at the + bus or an unknown name, we regard it as broadcast message + due to backward compatibility. */ + if (dbus_bus_name_has_owner (connection, SSDATA (service), NULL)) + uname = call2 (intern ("dbus-get-name-owner"), bus, service); + else + uname = Qnil; + + if (STRINGP (uname) + && (strcmp (dbus_bus_get_unique_name (connection), SSDATA (uname)) + != 0) + && (!dbus_message_set_destination (dmessage, SSDATA (service)))) + { + UNGCPRO; + XD_SIGNAL2 (build_string ("Unable to set signal destination"), + service); + } + } + } + + /* Set message parameters. */ + if ((mtype == DBUS_MESSAGE_TYPE_METHOD_CALL) + || (mtype == DBUS_MESSAGE_TYPE_SIGNAL)) + { + if ((!dbus_message_set_path (dmessage, SSDATA (path))) + || (!dbus_message_set_interface (dmessage, SSDATA (interface))) + || (!dbus_message_set_member (dmessage, SSDATA (member)))) + { + UNGCPRO; + XD_SIGNAL1 (build_string ("Unable to set the message parameter")); + } + } + + else /* DBUS_MESSAGE_TYPE_METHOD_RETURN, DBUS_MESSAGE_TYPE_ERROR */ + { + if (!dbus_message_set_reply_serial (dmessage, serial)) + { + UNGCPRO; + XD_SIGNAL1 (build_string ("Unable to create a return message")); + } + + if ((mtype == DBUS_MESSAGE_TYPE_ERROR) + && (!dbus_message_set_error_name (dmessage, DBUS_ERROR_FAILED))) + { + UNGCPRO; + XD_SIGNAL1 (build_string ("Unable to create a error message")); + } + } /* Check for timeout parameter. */ - if ((i+2 <= nargs) && (EQ ((args[i]), QCdbus_timeout))) + if ((count+2 <= nargs) && (EQ ((args[count]), QCdbus_timeout))) { - CHECK_NATNUM (args[i+1]); - timeout = min (XFASTINT (args[i+1]), INT_MAX); - i = i+2; + CHECK_NATNUM (args[count+1]); - timeout = XFASTINT (args[count+1]); ++ timeout = min (XFASTINT (args[count+1]), INT_MAX); + count = count+2; } /* Initialize parameter list of message. */ diff --cc src/editfns.c index 7e7f82c5992,c5ba280c178..6d59b89513c --- a/src/editfns.c +++ b/src/editfns.c @@@ -86,9 -75,9 +75,9 @@@ extern Lisp_Object w32_get_internal_run static void time_overflow (void) NO_RETURN; static Lisp_Object format_time_string (char const *, ptrdiff_t, Lisp_Object, - int, time_t *, struct tm **); + int, time_t *, struct tm *); static int tm_diff (struct tm *, struct tm *); -static void update_buffer_properties (EMACS_INT, EMACS_INT); +static void update_buffer_properties (ptrdiff_t, ptrdiff_t); static Lisp_Object Qbuffer_access_fontify_functions; static Lisp_Object Fuser_full_name (Lisp_Object); @@@ -1708,8 -1714,10 +1701,9 @@@ format_time_string (char const *format int usec; int ns; struct tm *tm; + USE_SAFE_ALLOCA; - if (! (lisp_time_argument (timeval, tval, &usec) - && 0 <= usec && usec < 1000000)) + if (! lisp_time_argument (timeval, tval, &usec)) error ("Invalid time specification"); ns = usec * 1000; diff --cc src/insdel.c index 748e2d54109,373b3848f05..148ba221940 --- a/src/insdel.c +++ b/src/insdel.c @@@ -31,19 -31,15 +31,15 @@@ along with GNU Emacs. If not, see 32 + #if EMACS_INT_MAX >> 31 != 0 +#if PTRDIFF_MAX >> 31 != 0 #define PURESIZE_RATIO 10/6 /* Don't surround with `()'. */ #else +#define PURESIZE_RATIO 8/6 /* Don't surround with `()'. */ +#endif +#else #define PURESIZE_RATIO 1 #endif #endif diff --cc src/xdisp.c index 43b92bcf536,e7ecd2c1d91..0a25eab1cbc --- a/src/xdisp.c +++ b/src/xdisp.c @@@ -834,11 -844,12 +844,12 @@@ static struct glyph_row *get_overlay_ar static void extend_face_to_end_of_line (struct it *); static int append_space_for_newline (struct it *, int); static int cursor_row_fully_visible_p (struct window *, int, int); -static int try_scrolling (Lisp_Object, int, EMACS_INT, EMACS_INT, int, int); +static int try_scrolling (Lisp_Object, int, ptrdiff_t, ptrdiff_t, int, int); static int try_cursor_movement (Lisp_Object, struct text_pos, int *); -static int trailing_whitespace_p (EMACS_INT); -static intmax_t message_log_check_duplicate (EMACS_INT, EMACS_INT); +static int trailing_whitespace_p (ptrdiff_t); +static intmax_t message_log_check_duplicate (ptrdiff_t, ptrdiff_t); static void push_it (struct it *, struct text_pos *); + static void iterate_out_of_display_property (struct it *); static void pop_it (struct it *); static void sync_frame_with_window_matrix_rows (struct window *); static void select_frame_for_redisplay (Lisp_Object); @@@ -5602,9 -5675,9 +5683,9 @@@ push_it (struct it *it, struct text_po static void iterate_out_of_display_property (struct it *it) { - int buffer_p = BUFFERP (it->object); + int buffer_p = !STRINGP (it->string); - EMACS_INT eob = (buffer_p ? ZV : it->end_charpos); - EMACS_INT bob = (buffer_p ? BEGV : 0); + ptrdiff_t eob = (buffer_p ? ZV : it->end_charpos); + ptrdiff_t bob = (buffer_p ? BEGV : 0); xassert (eob >= CHARPOS (it->position) && CHARPOS (it->position) >= bob);