aboutsummaryrefslogtreecommitdiffstats
path: root/src/editfns.c
diff options
context:
space:
mode:
authorPaul Eggert2011-09-21 10:41:20 -0700
committerPaul Eggert2011-09-21 10:41:20 -0700
commitd311d28c3f8a3c43e6ef33d68b852c5ea7f13239 (patch)
tree84b390c8bd472074294a31d51e790437f0a9a75d /src/editfns.c
parent4768be09c9866add356a0a9b47ecd42346442b9f (diff)
downloademacs-d311d28c3f8a3c43e6ef33d68b852c5ea7f13239.tar.gz
emacs-d311d28c3f8a3c43e6ef33d68b852c5ea7f13239.zip
* 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. * 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 (exec_byte_code): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. Remove unnecessary memory-full test. 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. * 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. (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_CHARACTER, 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 or unsigned int. (load_charset_map_from_vector, Fmap_charset_chars): Remove now-unnecessary CHECK_NATNUMs. (Fdefine_charset_internal): Check ranges here, more carefully. * 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, internal_self_insert): 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) (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): 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): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (Ffind_operation_coding_system): NATNUMP can eval its arg twice. (Fdefine_coding_system_internal): Check for charset-id overflow. * 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. * 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): 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. * 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. * 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. (Fdo_auto_save, Fset_buffer_auto_saved) (Fclear_buffer_auto_save_failure): Don't assume time_t is signed, or that it fits in int. * 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. Remove no-longer-needed lint_assume. * 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 proper 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. (XSETSUBR): Use size of 0 since the actual size doesn't matter, and using 0 avoids overflow. (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. * 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): 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. (PRINTFINISH): Use SAFE_ALLOCA, not alloca. (printchar, strout): Use xpalloc to catch size calculation overflow. (Fexternal_debugging_output): Use CHECK_CHARACTER, not CHECK_NUMBER, to avoid mishandling large integers. (print_error_message): Use SAFE_ALLOCA, not alloca. (print_object): Use int, not EMACS_INT, where int is 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) (Fsignal_process, sigchld_handler): Check that fixnums are in proper range for system types. (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. * 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 (ST_COMMENT_STYLE, ST_STRING_STYLE): In definitions, make it clearer that these values must be out of range for the respective integer ranges. This fixes a bug with ST_STRING_STYLE and non-ASCII characters. (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. * 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, and double all fit in int or even EMACS_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): 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): 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.
Diffstat (limited to 'src/editfns.c')
-rw-r--r--src/editfns.c209
1 files changed, 99 insertions, 110 deletions
diff --git a/src/editfns.c b/src/editfns.c
index 3dd58377ada..ac9c20ced65 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -86,7 +86,7 @@ extern Lisp_Object w32_get_internal_run_time (void);
86 86
87static void time_overflow (void) NO_RETURN; 87static void time_overflow (void) NO_RETURN;
88static int tm_diff (struct tm *, struct tm *); 88static int tm_diff (struct tm *, struct tm *);
89static void update_buffer_properties (EMACS_INT, EMACS_INT); 89static void update_buffer_properties (ptrdiff_t, ptrdiff_t);
90 90
91static Lisp_Object Qbuffer_access_fontify_functions; 91static Lisp_Object Qbuffer_access_fontify_functions;
92static Lisp_Object Fuser_full_name (Lisp_Object); 92static Lisp_Object Fuser_full_name (Lisp_Object);
@@ -146,8 +146,14 @@ init_editfns (void)
146 /* If the user name claimed in the environment vars differs from 146 /* If the user name claimed in the environment vars differs from
147 the real uid, use the claimed name to find the full name. */ 147 the real uid, use the claimed name to find the full name. */
148 tem = Fstring_equal (Vuser_login_name, Vuser_real_login_name); 148 tem = Fstring_equal (Vuser_login_name, Vuser_real_login_name);
149 Vuser_full_name = Fuser_full_name (NILP (tem)? make_number (geteuid ()) 149 if (! NILP (tem))
150 : Vuser_login_name); 150 tem = Vuser_login_name;
151 else
152 {
153 uid_t euid = geteuid ();
154 tem = make_fixnum_or_float (euid);
155 }
156 Vuser_full_name = Fuser_full_name (tem);
151 157
152 p = getenv ("NAME"); 158 p = getenv ("NAME");
153 if (p) 159 if (p)
@@ -212,7 +218,7 @@ DEFUN ("string-to-char", Fstring_to_char, Sstring_to_char, 1, 1, 0,
212} 218}
213 219
214static Lisp_Object 220static Lisp_Object
215buildmark (EMACS_INT charpos, EMACS_INT bytepos) 221buildmark (ptrdiff_t charpos, ptrdiff_t bytepos)
216{ 222{
217 register Lisp_Object mark; 223 register Lisp_Object mark;
218 mark = Fmake_marker (); 224 mark = Fmake_marker ();
@@ -237,17 +243,6 @@ DEFUN ("point-marker", Fpoint_marker, Spoint_marker, 0, 0, 0,
237 return buildmark (PT, PT_BYTE); 243 return buildmark (PT, PT_BYTE);
238} 244}
239 245
240EMACS_INT
241clip_to_bounds (EMACS_INT lower, EMACS_INT num, EMACS_INT upper)
242{
243 if (num < lower)
244 return lower;
245 else if (num > upper)
246 return upper;
247 else
248 return num;
249}
250
251DEFUN ("goto-char", Fgoto_char, Sgoto_char, 1, 1, "NGoto char: ", 246DEFUN ("goto-char", Fgoto_char, Sgoto_char, 1, 1, "NGoto char: ",
252 doc: /* Set point to POSITION, a number or marker. 247 doc: /* Set point to POSITION, a number or marker.
253Beginning of buffer is position (point-min), end is (point-max). 248Beginning of buffer is position (point-min), end is (point-max).
@@ -255,7 +250,7 @@ Beginning of buffer is position (point-min), end is (point-max).
255The return value is POSITION. */) 250The return value is POSITION. */)
256 (register Lisp_Object position) 251 (register Lisp_Object position)
257{ 252{
258 EMACS_INT pos; 253 ptrdiff_t pos;
259 254
260 if (MARKERP (position) 255 if (MARKERP (position)
261 && current_buffer == XMARKER (position)->buffer) 256 && current_buffer == XMARKER (position)->buffer)
@@ -335,7 +330,7 @@ overlays_around (EMACS_INT pos, Lisp_Object *vec, ptrdiff_t len)
335{ 330{
336 Lisp_Object overlay, start, end; 331 Lisp_Object overlay, start, end;
337 struct Lisp_Overlay *tail; 332 struct Lisp_Overlay *tail;
338 EMACS_INT startpos, endpos; 333 ptrdiff_t startpos, endpos;
339 ptrdiff_t idx = 0; 334 ptrdiff_t idx = 0;
340 335
341 for (tail = current_buffer->overlays_before; tail; tail = tail->next) 336 for (tail = current_buffer->overlays_before; tail; tail = tail->next)
@@ -484,7 +479,7 @@ get_pos_property (Lisp_Object position, register Lisp_Object prop, Lisp_Object o
484static void 479static void
485find_field (Lisp_Object pos, Lisp_Object merge_at_boundary, 480find_field (Lisp_Object pos, Lisp_Object merge_at_boundary,
486 Lisp_Object beg_limit, 481 Lisp_Object beg_limit,
487 EMACS_INT *beg, Lisp_Object end_limit, EMACS_INT *end) 482 ptrdiff_t *beg, Lisp_Object end_limit, ptrdiff_t *end)
488{ 483{
489 /* Fields right before and after the point. */ 484 /* Fields right before and after the point. */
490 Lisp_Object before_field, after_field; 485 Lisp_Object before_field, after_field;
@@ -600,7 +595,7 @@ A field is a region of text with the same `field' property.
600If POS is nil, the value of point is used for POS. */) 595If POS is nil, the value of point is used for POS. */)
601 (Lisp_Object pos) 596 (Lisp_Object pos)
602{ 597{
603 EMACS_INT beg, end; 598 ptrdiff_t beg, end;
604 find_field (pos, Qnil, Qnil, &beg, Qnil, &end); 599 find_field (pos, Qnil, Qnil, &beg, Qnil, &end);
605 if (beg != end) 600 if (beg != end)
606 del_range (beg, end); 601 del_range (beg, end);
@@ -613,7 +608,7 @@ A field is a region of text with the same `field' property.
613If POS is nil, the value of point is used for POS. */) 608If POS is nil, the value of point is used for POS. */)
614 (Lisp_Object pos) 609 (Lisp_Object pos)
615{ 610{
616 EMACS_INT beg, end; 611 ptrdiff_t beg, end;
617 find_field (pos, Qnil, Qnil, &beg, Qnil, &end); 612 find_field (pos, Qnil, Qnil, &beg, Qnil, &end);
618 return make_buffer_string (beg, end, 1); 613 return make_buffer_string (beg, end, 1);
619} 614}
@@ -624,7 +619,7 @@ A field is a region of text with the same `field' property.
624If POS is nil, the value of point is used for POS. */) 619If POS is nil, the value of point is used for POS. */)
625 (Lisp_Object pos) 620 (Lisp_Object pos)
626{ 621{
627 EMACS_INT beg, end; 622 ptrdiff_t beg, end;
628 find_field (pos, Qnil, Qnil, &beg, Qnil, &end); 623 find_field (pos, Qnil, Qnil, &beg, Qnil, &end);
629 return make_buffer_string (beg, end, 0); 624 return make_buffer_string (beg, end, 0);
630} 625}
@@ -639,7 +634,7 @@ If LIMIT is non-nil, it is a buffer position; if the beginning of the field
639is before LIMIT, then LIMIT will be returned instead. */) 634is before LIMIT, then LIMIT will be returned instead. */)
640 (Lisp_Object pos, Lisp_Object escape_from_edge, Lisp_Object limit) 635 (Lisp_Object pos, Lisp_Object escape_from_edge, Lisp_Object limit)
641{ 636{
642 EMACS_INT beg; 637 ptrdiff_t beg;
643 find_field (pos, escape_from_edge, limit, &beg, Qnil, 0); 638 find_field (pos, escape_from_edge, limit, &beg, Qnil, 0);
644 return make_number (beg); 639 return make_number (beg);
645} 640}
@@ -654,7 +649,7 @@ If LIMIT is non-nil, it is a buffer position; if the end of the field
654is after LIMIT, then LIMIT will be returned instead. */) 649is after LIMIT, then LIMIT will be returned instead. */)
655 (Lisp_Object pos, Lisp_Object escape_from_edge, Lisp_Object limit) 650 (Lisp_Object pos, Lisp_Object escape_from_edge, Lisp_Object limit)
656{ 651{
657 EMACS_INT end; 652 ptrdiff_t end;
658 find_field (pos, escape_from_edge, Qnil, 0, limit, &end); 653 find_field (pos, escape_from_edge, Qnil, 0, limit, &end);
659 return make_number (end); 654 return make_number (end);
660} 655}
@@ -689,7 +684,7 @@ Field boundaries are not noticed if `inhibit-field-text-motion' is non-nil. */)
689 (Lisp_Object new_pos, Lisp_Object old_pos, Lisp_Object escape_from_edge, Lisp_Object only_in_line, Lisp_Object inhibit_capture_property) 684 (Lisp_Object new_pos, Lisp_Object old_pos, Lisp_Object escape_from_edge, Lisp_Object only_in_line, Lisp_Object inhibit_capture_property)
690{ 685{
691 /* If non-zero, then the original point, before re-positioning. */ 686 /* If non-zero, then the original point, before re-positioning. */
692 EMACS_INT orig_point = 0; 687 ptrdiff_t orig_point = 0;
693 int fwd; 688 int fwd;
694 Lisp_Object prev_old, prev_new; 689 Lisp_Object prev_old, prev_new;
695 690
@@ -703,10 +698,10 @@ Field boundaries are not noticed if `inhibit-field-text-motion' is non-nil. */)
703 CHECK_NUMBER_COERCE_MARKER (new_pos); 698 CHECK_NUMBER_COERCE_MARKER (new_pos);
704 CHECK_NUMBER_COERCE_MARKER (old_pos); 699 CHECK_NUMBER_COERCE_MARKER (old_pos);
705 700
706 fwd = (XFASTINT (new_pos) > XFASTINT (old_pos)); 701 fwd = (XINT (new_pos) > XINT (old_pos));
707 702
708 prev_old = make_number (XFASTINT (old_pos) - 1); 703 prev_old = make_number (XINT (old_pos) - 1);
709 prev_new = make_number (XFASTINT (new_pos) - 1); 704 prev_new = make_number (XINT (new_pos) - 1);
710 705
711 if (NILP (Vinhibit_field_text_motion) 706 if (NILP (Vinhibit_field_text_motion)
712 && !EQ (new_pos, old_pos) 707 && !EQ (new_pos, old_pos)
@@ -731,7 +726,7 @@ Field boundaries are not noticed if `inhibit-field-text-motion' is non-nil. */)
731 /* It is possible that NEW_POS is not within the same field as 726 /* It is possible that NEW_POS is not within the same field as
732 OLD_POS; try to move NEW_POS so that it is. */ 727 OLD_POS; try to move NEW_POS so that it is. */
733 { 728 {
734 EMACS_INT shortage; 729 ptrdiff_t shortage;
735 Lisp_Object field_bound; 730 Lisp_Object field_bound;
736 731
737 if (fwd) 732 if (fwd)
@@ -786,8 +781,8 @@ boundaries bind `inhibit-field-text-motion' to t.
786This function does not move point. */) 781This function does not move point. */)
787 (Lisp_Object n) 782 (Lisp_Object n)
788{ 783{
789 EMACS_INT orig, orig_byte, end; 784 ptrdiff_t orig, orig_byte, end;
790 int count = SPECPDL_INDEX (); 785 ptrdiff_t count = SPECPDL_INDEX ();
791 specbind (Qinhibit_point_motion_hooks, Qt); 786 specbind (Qinhibit_point_motion_hooks, Qt);
792 787
793 if (NILP (n)) 788 if (NILP (n))
@@ -827,15 +822,17 @@ boundaries bind `inhibit-field-text-motion' to t.
827This function does not move point. */) 822This function does not move point. */)
828 (Lisp_Object n) 823 (Lisp_Object n)
829{ 824{
830 EMACS_INT end_pos; 825 ptrdiff_t clipped_n;
831 EMACS_INT orig = PT; 826 ptrdiff_t end_pos;
827 ptrdiff_t orig = PT;
832 828
833 if (NILP (n)) 829 if (NILP (n))
834 XSETFASTINT (n, 1); 830 XSETFASTINT (n, 1);
835 else 831 else
836 CHECK_NUMBER (n); 832 CHECK_NUMBER (n);
837 833
838 end_pos = find_before_next_newline (orig, 0, XINT (n) - (XINT (n) <= 0)); 834 clipped_n = clip_to_bounds (PTRDIFF_MIN + 1, XINT (n), PTRDIFF_MAX);
835 end_pos = find_before_next_newline (orig, 0, clipped_n - (clipped_n <= 0));
839 836
840 /* Return END_POS constrained to the current input field. */ 837 /* Return END_POS constrained to the current input field. */
841 return Fconstrain_to_field (make_number (end_pos), make_number (orig), 838 return Fconstrain_to_field (make_number (end_pos), make_number (orig),
@@ -962,7 +959,7 @@ usage: (save-excursion &rest BODY) */)
962 (Lisp_Object args) 959 (Lisp_Object args)
963{ 960{
964 register Lisp_Object val; 961 register Lisp_Object val;
965 int count = SPECPDL_INDEX (); 962 ptrdiff_t count = SPECPDL_INDEX ();
966 963
967 record_unwind_protect (save_excursion_restore, save_excursion_save ()); 964 record_unwind_protect (save_excursion_restore, save_excursion_save ());
968 965
@@ -977,7 +974,7 @@ usage: (save-current-buffer &rest BODY) */)
977 (Lisp_Object args) 974 (Lisp_Object args)
978{ 975{
979 Lisp_Object val; 976 Lisp_Object val;
980 int count = SPECPDL_INDEX (); 977 ptrdiff_t count = SPECPDL_INDEX ();
981 978
982 record_unwind_protect (set_buffer_if_live, Fcurrent_buffer ()); 979 record_unwind_protect (set_buffer_if_live, Fcurrent_buffer ());
983 980
@@ -1103,7 +1100,7 @@ At the beginning of the buffer or accessible region, return 0. */)
1103 XSETFASTINT (temp, 0); 1100 XSETFASTINT (temp, 0);
1104 else if (!NILP (BVAR (current_buffer, enable_multibyte_characters))) 1101 else if (!NILP (BVAR (current_buffer, enable_multibyte_characters)))
1105 { 1102 {
1106 EMACS_INT pos = PT_BYTE; 1103 ptrdiff_t pos = PT_BYTE;
1107 DEC_POS (pos); 1104 DEC_POS (pos);
1108 XSETFASTINT (temp, FETCH_CHAR (pos)); 1105 XSETFASTINT (temp, FETCH_CHAR (pos));
1109 } 1106 }
@@ -1157,7 +1154,7 @@ POS is an integer or a marker and defaults to point.
1157If POS is out of range, the value is nil. */) 1154If POS is out of range, the value is nil. */)
1158 (Lisp_Object pos) 1155 (Lisp_Object pos)
1159{ 1156{
1160 register EMACS_INT pos_byte; 1157 register ptrdiff_t pos_byte;
1161 1158
1162 if (NILP (pos)) 1159 if (NILP (pos))
1163 { 1160 {
@@ -1190,7 +1187,7 @@ If POS is out of range, the value is nil. */)
1190 (Lisp_Object pos) 1187 (Lisp_Object pos)
1191{ 1188{
1192 register Lisp_Object val; 1189 register Lisp_Object val;
1193 register EMACS_INT pos_byte; 1190 register ptrdiff_t pos_byte;
1194 1191
1195 if (NILP (pos)) 1192 if (NILP (pos))
1196 { 1193 {
@@ -1277,14 +1274,7 @@ DEFUN ("user-uid", Fuser_uid, Suser_uid, 0, 0, 0,
1277Value is an integer or a float, depending on the value. */) 1274Value is an integer or a float, depending on the value. */)
1278 (void) 1275 (void)
1279{ 1276{
1280 /* Assignment to EMACS_INT stops GCC whining about limited range of 1277 uid_t euid = geteuid ();
1281 data type. */
1282 EMACS_INT euid = geteuid ();
1283
1284 /* Make sure we don't produce a negative UID due to signed integer
1285 overflow. */
1286 if (euid < 0)
1287 return make_float (geteuid ());
1288 return make_fixnum_or_float (euid); 1278 return make_fixnum_or_float (euid);
1289} 1279}
1290 1280
@@ -1293,14 +1283,7 @@ DEFUN ("user-real-uid", Fuser_real_uid, Suser_real_uid, 0, 0, 0,
1293Value is an integer or a float, depending on the value. */) 1283Value is an integer or a float, depending on the value. */)
1294 (void) 1284 (void)
1295{ 1285{
1296 /* Assignment to EMACS_INT stops GCC whining about limited range of 1286 uid_t uid = getuid ();
1297 data type. */
1298 EMACS_INT uid = getuid ();
1299
1300 /* Make sure we don't produce a negative UID due to signed integer
1301 overflow. */
1302 if (uid < 0)
1303 return make_float (getuid ());
1304 return make_fixnum_or_float (uid); 1287 return make_fixnum_or_float (uid);
1305} 1288}
1306 1289
@@ -1385,10 +1368,11 @@ get_system_name (void)
1385} 1368}
1386 1369
1387DEFUN ("emacs-pid", Femacs_pid, Semacs_pid, 0, 0, 0, 1370DEFUN ("emacs-pid", Femacs_pid, Semacs_pid, 0, 0, 0,
1388 doc: /* Return the process ID of Emacs, as an integer. */) 1371 doc: /* Return the process ID of Emacs, as a number. */)
1389 (void) 1372 (void)
1390{ 1373{
1391 return make_number (getpid ()); 1374 pid_t pid = getpid ();
1375 return make_fixnum_or_float (pid);
1392} 1376}
1393 1377
1394 1378
@@ -1428,7 +1412,7 @@ hi_time (time_t t)
1428} 1412}
1429 1413
1430/* Return the bottom 16 bits of the time T. */ 1414/* Return the bottom 16 bits of the time T. */
1431static EMACS_INT 1415static int
1432lo_time (time_t t) 1416lo_time (time_t t)
1433{ 1417{
1434 return t & ((1 << 16) - 1); 1418 return t & ((1 << 16) - 1);
@@ -1546,6 +1530,8 @@ lisp_time_argument (Lisp_Object specified_time, time_t *result, int *usec)
1546 else 1530 else
1547 { 1531 {
1548 CHECK_NUMBER (usec_l); 1532 CHECK_NUMBER (usec_l);
1533 if (! (0 <= XINT (usec_l) && XINT (usec_l) < 1000000))
1534 return 0;
1549 *usec = XINT (usec_l); 1535 *usec = XINT (usec_l);
1550 } 1536 }
1551 } 1537 }
@@ -1883,9 +1869,12 @@ usage: (encode-time SECOND MINUTE HOUR DAY MONTH YEAR &optional ZONE) */)
1883 tzstring = SSDATA (zone); 1869 tzstring = SSDATA (zone);
1884 else if (INTEGERP (zone)) 1870 else if (INTEGERP (zone))
1885 { 1871 {
1886 int abszone = eabs (XINT (zone)); 1872 EMACS_INT abszone = eabs (XINT (zone));
1887 sprintf (tzbuf, "XXX%s%d:%02d:%02d", "-" + (XINT (zone) < 0), 1873 EMACS_INT zone_hr = abszone / (60*60);
1888 abszone / (60*60), (abszone/60) % 60, abszone % 60); 1874 int zone_min = (abszone/60) % 60;
1875 int zone_sec = abszone % 60;
1876 sprintf (tzbuf, "XXX%s%"pI"d:%02d:%02d", "-" + (XINT (zone) < 0),
1877 zone_hr, zone_min, zone_sec);
1889 tzstring = tzbuf; 1878 tzstring = tzbuf;
1890 } 1879 }
1891 else 1880 else
@@ -2187,10 +2176,10 @@ set_time_zone_rule (const char *tzstring)
2187 2176
2188static void 2177static void
2189general_insert_function (void (*insert_func) 2178general_insert_function (void (*insert_func)
2190 (const char *, EMACS_INT), 2179 (const char *, ptrdiff_t),
2191 void (*insert_from_string_func) 2180 void (*insert_from_string_func)
2192 (Lisp_Object, EMACS_INT, EMACS_INT, 2181 (Lisp_Object, ptrdiff_t, ptrdiff_t,
2193 EMACS_INT, EMACS_INT, int), 2182 ptrdiff_t, ptrdiff_t, int),
2194 int inherit, ptrdiff_t nargs, Lisp_Object *args) 2183 int inherit, ptrdiff_t nargs, Lisp_Object *args)
2195{ 2184{
2196 ptrdiff_t argnum; 2185 ptrdiff_t argnum;
@@ -2326,7 +2315,7 @@ from adjoining text, if those properties are sticky. */)
2326 (Lisp_Object character, Lisp_Object count, Lisp_Object inherit) 2315 (Lisp_Object character, Lisp_Object count, Lisp_Object inherit)
2327{ 2316{
2328 int i, stringlen; 2317 int i, stringlen;
2329 register EMACS_INT n; 2318 register ptrdiff_t n;
2330 int c, len; 2319 int c, len;
2331 unsigned char str[MAX_MULTIBYTE_LENGTH]; 2320 unsigned char str[MAX_MULTIBYTE_LENGTH];
2332 char string[4000]; 2321 char string[4000];
@@ -2402,10 +2391,10 @@ from adjoining text, if those properties are sticky. */)
2402 buffer substrings. */ 2391 buffer substrings. */
2403 2392
2404Lisp_Object 2393Lisp_Object
2405make_buffer_string (EMACS_INT start, EMACS_INT end, int props) 2394make_buffer_string (ptrdiff_t start, ptrdiff_t end, int props)
2406{ 2395{
2407 EMACS_INT start_byte = CHAR_TO_BYTE (start); 2396 ptrdiff_t start_byte = CHAR_TO_BYTE (start);
2408 EMACS_INT end_byte = CHAR_TO_BYTE (end); 2397 ptrdiff_t end_byte = CHAR_TO_BYTE (end);
2409 2398
2410 return make_buffer_string_both (start, start_byte, end, end_byte, props); 2399 return make_buffer_string_both (start, start_byte, end, end_byte, props);
2411} 2400}
@@ -2426,8 +2415,8 @@ make_buffer_string (EMACS_INT start, EMACS_INT end, int props)
2426 buffer substrings. */ 2415 buffer substrings. */
2427 2416
2428Lisp_Object 2417Lisp_Object
2429make_buffer_string_both (EMACS_INT start, EMACS_INT start_byte, 2418make_buffer_string_both (ptrdiff_t start, ptrdiff_t start_byte,
2430 EMACS_INT end, EMACS_INT end_byte, int props) 2419 ptrdiff_t end, ptrdiff_t end_byte, int props)
2431{ 2420{
2432 Lisp_Object result, tem, tem1; 2421 Lisp_Object result, tem, tem1;
2433 2422
@@ -2460,7 +2449,7 @@ make_buffer_string_both (EMACS_INT start, EMACS_INT start_byte,
2460 in the current buffer, if necessary. */ 2449 in the current buffer, if necessary. */
2461 2450
2462static void 2451static void
2463update_buffer_properties (EMACS_INT start, EMACS_INT end) 2452update_buffer_properties (ptrdiff_t start, ptrdiff_t end)
2464{ 2453{
2465 /* If this buffer has some access functions, 2454 /* If this buffer has some access functions,
2466 call them, specifying the range of the buffer being accessed. */ 2455 call them, specifying the range of the buffer being accessed. */
@@ -2499,7 +2488,7 @@ into the result string; if you don't want the text properties,
2499use `buffer-substring-no-properties' instead. */) 2488use `buffer-substring-no-properties' instead. */)
2500 (Lisp_Object start, Lisp_Object end) 2489 (Lisp_Object start, Lisp_Object end)
2501{ 2490{
2502 register EMACS_INT b, e; 2491 register ptrdiff_t b, e;
2503 2492
2504 validate_region (&start, &end); 2493 validate_region (&start, &end);
2505 b = XINT (start); 2494 b = XINT (start);
@@ -2515,7 +2504,7 @@ The two arguments START and END are character positions;
2515they can be in either order. */) 2504they can be in either order. */)
2516 (Lisp_Object start, Lisp_Object end) 2505 (Lisp_Object start, Lisp_Object end)
2517{ 2506{
2518 register EMACS_INT b, e; 2507 register ptrdiff_t b, e;
2519 2508
2520 validate_region (&start, &end); 2509 validate_region (&start, &end);
2521 b = XINT (start); 2510 b = XINT (start);
@@ -2599,8 +2588,8 @@ determines whether case is significant or ignored. */)
2599 register Lisp_Object trt 2588 register Lisp_Object trt
2600 = (!NILP (BVAR (current_buffer, case_fold_search)) 2589 = (!NILP (BVAR (current_buffer, case_fold_search))
2601 ? BVAR (current_buffer, case_canon_table) : Qnil); 2590 ? BVAR (current_buffer, case_canon_table) : Qnil);
2602 EMACS_INT chars = 0; 2591 ptrdiff_t chars = 0;
2603 EMACS_INT i1, i2, i1_byte, i2_byte; 2592 ptrdiff_t i1, i2, i1_byte, i2_byte;
2604 2593
2605 /* Find the first buffer and its substring. */ 2594 /* Find the first buffer and its substring. */
2606 2595
@@ -2761,21 +2750,21 @@ and don't mark the buffer as really changed.
2761Both characters must have the same length of multi-byte form. */) 2750Both characters must have the same length of multi-byte form. */)
2762 (Lisp_Object start, Lisp_Object end, Lisp_Object fromchar, Lisp_Object tochar, Lisp_Object noundo) 2751 (Lisp_Object start, Lisp_Object end, Lisp_Object fromchar, Lisp_Object tochar, Lisp_Object noundo)
2763{ 2752{
2764 register EMACS_INT pos, pos_byte, stop, i, len, end_byte; 2753 register ptrdiff_t pos, pos_byte, stop, i, len, end_byte;
2765 /* Keep track of the first change in the buffer: 2754 /* Keep track of the first change in the buffer:
2766 if 0 we haven't found it yet. 2755 if 0 we haven't found it yet.
2767 if < 0 we've found it and we've run the before-change-function. 2756 if < 0 we've found it and we've run the before-change-function.
2768 if > 0 we've actually performed it and the value is its position. */ 2757 if > 0 we've actually performed it and the value is its position. */
2769 EMACS_INT changed = 0; 2758 ptrdiff_t changed = 0;
2770 unsigned char fromstr[MAX_MULTIBYTE_LENGTH], tostr[MAX_MULTIBYTE_LENGTH]; 2759 unsigned char fromstr[MAX_MULTIBYTE_LENGTH], tostr[MAX_MULTIBYTE_LENGTH];
2771 unsigned char *p; 2760 unsigned char *p;
2772 int count = SPECPDL_INDEX (); 2761 ptrdiff_t count = SPECPDL_INDEX ();
2773#define COMBINING_NO 0 2762#define COMBINING_NO 0
2774#define COMBINING_BEFORE 1 2763#define COMBINING_BEFORE 1
2775#define COMBINING_AFTER 2 2764#define COMBINING_AFTER 2
2776#define COMBINING_BOTH (COMBINING_BEFORE | COMBINING_AFTER) 2765#define COMBINING_BOTH (COMBINING_BEFORE | COMBINING_AFTER)
2777 int maybe_byte_combining = COMBINING_NO; 2766 int maybe_byte_combining = COMBINING_NO;
2778 EMACS_INT last_changed = 0; 2767 ptrdiff_t last_changed = 0;
2779 int multibyte_p = !NILP (BVAR (current_buffer, enable_multibyte_characters)); 2768 int multibyte_p = !NILP (BVAR (current_buffer, enable_multibyte_characters));
2780 int fromc, toc; 2769 int fromc, toc;
2781 2770
@@ -2835,7 +2824,7 @@ Both characters must have the same length of multi-byte form. */)
2835 stop = min (stop, GPT_BYTE); 2824 stop = min (stop, GPT_BYTE);
2836 while (1) 2825 while (1)
2837 { 2826 {
2838 EMACS_INT pos_byte_next = pos_byte; 2827 ptrdiff_t pos_byte_next = pos_byte;
2839 2828
2840 if (pos_byte >= stop) 2829 if (pos_byte >= stop)
2841 { 2830 {
@@ -2938,7 +2927,7 @@ Both characters must have the same length of multi-byte form. */)
2938} 2927}
2939 2928
2940 2929
2941static Lisp_Object check_translation (EMACS_INT, EMACS_INT, EMACS_INT, 2930static Lisp_Object check_translation (ptrdiff_t, ptrdiff_t, ptrdiff_t,
2942 Lisp_Object); 2931 Lisp_Object);
2943 2932
2944/* Helper function for Ftranslate_region_internal. 2933/* Helper function for Ftranslate_region_internal.
@@ -2948,7 +2937,7 @@ static Lisp_Object check_translation (EMACS_INT, EMACS_INT, EMACS_INT,
2948 element is found, return it. Otherwise return Qnil. */ 2937 element is found, return it. Otherwise return Qnil. */
2949 2938
2950static Lisp_Object 2939static Lisp_Object
2951check_translation (EMACS_INT pos, EMACS_INT pos_byte, EMACS_INT end, 2940check_translation (ptrdiff_t pos, ptrdiff_t pos_byte, ptrdiff_t end,
2952 Lisp_Object val) 2941 Lisp_Object val)
2953{ 2942{
2954 int buf_size = 16, buf_used = 0; 2943 int buf_size = 16, buf_used = 0;
@@ -2957,7 +2946,7 @@ check_translation (EMACS_INT pos, EMACS_INT pos_byte, EMACS_INT end,
2957 for (; CONSP (val); val = XCDR (val)) 2946 for (; CONSP (val); val = XCDR (val))
2958 { 2947 {
2959 Lisp_Object elt; 2948 Lisp_Object elt;
2960 EMACS_INT len, i; 2949 ptrdiff_t len, i;
2961 2950
2962 elt = XCAR (val); 2951 elt = XCAR (val);
2963 if (! CONSP (elt)) 2952 if (! CONSP (elt))
@@ -3010,8 +2999,8 @@ It returns the number of characters changed. */)
3010 register unsigned char *tt; /* Trans table. */ 2999 register unsigned char *tt; /* Trans table. */
3011 register int nc; /* New character. */ 3000 register int nc; /* New character. */
3012 int cnt; /* Number of changes made. */ 3001 int cnt; /* Number of changes made. */
3013 EMACS_INT size; /* Size of translate table. */ 3002 ptrdiff_t size; /* Size of translate table. */
3014 EMACS_INT pos, pos_byte, end_pos; 3003 ptrdiff_t pos, pos_byte, end_pos;
3015 int multibyte = !NILP (BVAR (current_buffer, enable_multibyte_characters)); 3004 int multibyte = !NILP (BVAR (current_buffer, enable_multibyte_characters));
3016 int string_multibyte IF_LINT (= 0); 3005 int string_multibyte IF_LINT (= 0);
3017 3006
@@ -3289,7 +3278,7 @@ save_restriction_restore (Lisp_Object data)
3289 /* The restriction has changed from the saved one, so restore 3278 /* The restriction has changed from the saved one, so restore
3290 the saved restriction. */ 3279 the saved restriction. */
3291 { 3280 {
3292 EMACS_INT pt = BUF_PT (buf); 3281 ptrdiff_t pt = BUF_PT (buf);
3293 3282
3294 SET_BUF_BEGV_BOTH (buf, beg->charpos, beg->bytepos); 3283 SET_BUF_BEGV_BOTH (buf, beg->charpos, beg->bytepos);
3295 SET_BUF_ZV_BOTH (buf, end->charpos, end->bytepos); 3284 SET_BUF_ZV_BOTH (buf, end->charpos, end->bytepos);
@@ -3347,7 +3336,7 @@ usage: (save-restriction &rest BODY) */)
3347 (Lisp_Object body) 3336 (Lisp_Object body)
3348{ 3337{
3349 register Lisp_Object val; 3338 register Lisp_Object val;
3350 int count = SPECPDL_INDEX (); 3339 ptrdiff_t count = SPECPDL_INDEX ();
3351 3340
3352 record_unwind_protect (save_restriction_restore, save_restriction_save ()); 3341 record_unwind_protect (save_restriction_restore, save_restriction_save ());
3353 val = Fprogn (body); 3342 val = Fprogn (body);
@@ -3565,12 +3554,12 @@ usage: (format STRING &rest OBJECTS) */)
3565 ptrdiff_t n; /* The number of the next arg to substitute */ 3554 ptrdiff_t n; /* The number of the next arg to substitute */
3566 char initial_buffer[4000]; 3555 char initial_buffer[4000];
3567 char *buf = initial_buffer; 3556 char *buf = initial_buffer;
3568 EMACS_INT bufsize = sizeof initial_buffer; 3557 ptrdiff_t bufsize = sizeof initial_buffer;
3569 EMACS_INT max_bufsize = STRING_BYTES_BOUND + 1; 3558 ptrdiff_t max_bufsize = STRING_BYTES_BOUND + 1;
3570 char *p; 3559 char *p;
3571 Lisp_Object buf_save_value IF_LINT (= {0}); 3560 Lisp_Object buf_save_value IF_LINT (= {0});
3572 register char *format, *end, *format_start; 3561 register char *format, *end, *format_start;
3573 EMACS_INT formatlen, nchars; 3562 ptrdiff_t formatlen, nchars;
3574 /* Nonzero if the format is multibyte. */ 3563 /* Nonzero if the format is multibyte. */
3575 int multibyte_format = 0; 3564 int multibyte_format = 0;
3576 /* Nonzero if the output should be a multibyte string, 3565 /* Nonzero if the output should be a multibyte string,
@@ -3597,7 +3586,7 @@ usage: (format STRING &rest OBJECTS) */)
3597 info[0] is unused. Unused elements have -1 for start. */ 3586 info[0] is unused. Unused elements have -1 for start. */
3598 struct info 3587 struct info
3599 { 3588 {
3600 EMACS_INT start, end; 3589 ptrdiff_t start, end;
3601 int converted_to_string; 3590 int converted_to_string;
3602 int intervals; 3591 int intervals;
3603 } *info = 0; 3592 } *info = 0;
@@ -3654,7 +3643,7 @@ usage: (format STRING &rest OBJECTS) */)
3654 char *format0 = format; 3643 char *format0 = format;
3655 3644
3656 /* Bytes needed to represent the output of this conversion. */ 3645 /* Bytes needed to represent the output of this conversion. */
3657 EMACS_INT convbytes; 3646 ptrdiff_t convbytes;
3658 3647
3659 if (*format == '%') 3648 if (*format == '%')
3660 { 3649 {
@@ -3681,7 +3670,7 @@ usage: (format STRING &rest OBJECTS) */)
3681 int space_flag = 0; 3670 int space_flag = 0;
3682 int sharp_flag = 0; 3671 int sharp_flag = 0;
3683 int zero_flag = 0; 3672 int zero_flag = 0;
3684 EMACS_INT field_width; 3673 ptrdiff_t field_width;
3685 int precision_given; 3674 int precision_given;
3686 uintmax_t precision = UINTMAX_MAX; 3675 uintmax_t precision = UINTMAX_MAX;
3687 char *num_end; 3676 char *num_end;
@@ -3788,11 +3777,11 @@ usage: (format STRING &rest OBJECTS) */)
3788 { 3777 {
3789 /* handle case (precision[n] >= 0) */ 3778 /* handle case (precision[n] >= 0) */
3790 3779
3791 EMACS_INT width, padding, nbytes; 3780 ptrdiff_t width, padding, nbytes;
3792 EMACS_INT nchars_string; 3781 ptrdiff_t nchars_string;
3793 3782
3794 EMACS_INT prec = -1; 3783 ptrdiff_t prec = -1;
3795 if (precision_given && precision <= TYPE_MAXIMUM (EMACS_INT)) 3784 if (precision_given && precision <= TYPE_MAXIMUM (ptrdiff_t))
3796 prec = precision; 3785 prec = precision;
3797 3786
3798 /* lisp_string_width ignores a precision of 0, but GNU 3787 /* lisp_string_width ignores a precision of 0, but GNU
@@ -3805,7 +3794,7 @@ usage: (format STRING &rest OBJECTS) */)
3805 width = nchars_string = nbytes = 0; 3794 width = nchars_string = nbytes = 0;
3806 else 3795 else
3807 { 3796 {
3808 EMACS_INT nch, nby; 3797 ptrdiff_t nch, nby;
3809 width = lisp_string_width (args[n], prec, &nch, &nby); 3798 width = lisp_string_width (args[n], prec, &nch, &nby);
3810 if (prec < 0) 3799 if (prec < 0)
3811 { 3800 {
@@ -3902,7 +3891,7 @@ usage: (format STRING &rest OBJECTS) */)
3902 verify (0 < USEFUL_PRECISION_MAX); 3891 verify (0 < USEFUL_PRECISION_MAX);
3903 3892
3904 int prec; 3893 int prec;
3905 EMACS_INT padding, sprintf_bytes; 3894 ptrdiff_t padding, sprintf_bytes;
3906 uintmax_t excess_precision, numwidth; 3895 uintmax_t excess_precision, numwidth;
3907 uintmax_t leading_zeros = 0, trailing_zeros = 0; 3896 uintmax_t leading_zeros = 0, trailing_zeros = 0;
3908 3897
@@ -4217,8 +4206,8 @@ usage: (format STRING &rest OBJECTS) */)
4217 4206
4218 if (CONSP (props)) 4207 if (CONSP (props))
4219 { 4208 {
4220 EMACS_INT bytepos = 0, position = 0, translated = 0; 4209 ptrdiff_t bytepos = 0, position = 0, translated = 0;
4221 EMACS_INT argn = 1; 4210 ptrdiff_t argn = 1;
4222 Lisp_Object list; 4211 Lisp_Object list;
4223 4212
4224 /* Adjust the bounds of each text property 4213 /* Adjust the bounds of each text property
@@ -4236,7 +4225,7 @@ usage: (format STRING &rest OBJECTS) */)
4236 for (list = props; CONSP (list); list = XCDR (list)) 4225 for (list = props; CONSP (list); list = XCDR (list))
4237 { 4226 {
4238 Lisp_Object item; 4227 Lisp_Object item;
4239 EMACS_INT pos; 4228 ptrdiff_t pos;
4240 4229
4241 item = XCAR (list); 4230 item = XCAR (list);
4242 4231
@@ -4367,12 +4356,12 @@ Case is ignored if `case-fold-search' is non-nil in the current buffer. */)
4367 It's the caller's job to ensure that START1 <= END1 <= START2 <= END2. */ 4356 It's the caller's job to ensure that START1 <= END1 <= START2 <= END2. */
4368 4357
4369static void 4358static void
4370transpose_markers (EMACS_INT start1, EMACS_INT end1, 4359transpose_markers (ptrdiff_t start1, ptrdiff_t end1,
4371 EMACS_INT start2, EMACS_INT end2, 4360 ptrdiff_t start2, ptrdiff_t end2,
4372 EMACS_INT start1_byte, EMACS_INT end1_byte, 4361 ptrdiff_t start1_byte, ptrdiff_t end1_byte,
4373 EMACS_INT start2_byte, EMACS_INT end2_byte) 4362 ptrdiff_t start2_byte, ptrdiff_t end2_byte)
4374{ 4363{
4375 register EMACS_INT amt1, amt1_byte, amt2, amt2_byte, diff, diff_byte, mpos; 4364 register ptrdiff_t amt1, amt1_byte, amt2, amt2_byte, diff, diff_byte, mpos;
4376 register struct Lisp_Marker *marker; 4365 register struct Lisp_Marker *marker;
4377 4366
4378 /* Update point as if it were a marker. */ 4367 /* Update point as if it were a marker. */
@@ -4446,9 +4435,9 @@ any markers that happen to be located in the regions.
4446Transposing beyond buffer boundaries is an error. */) 4435Transposing beyond buffer boundaries is an error. */)
4447 (Lisp_Object startr1, Lisp_Object endr1, Lisp_Object startr2, Lisp_Object endr2, Lisp_Object leave_markers) 4436 (Lisp_Object startr1, Lisp_Object endr1, Lisp_Object startr2, Lisp_Object endr2, Lisp_Object leave_markers)
4448{ 4437{
4449 register EMACS_INT start1, end1, start2, end2; 4438 register ptrdiff_t start1, end1, start2, end2;
4450 EMACS_INT start1_byte, start2_byte, len1_byte, len2_byte; 4439 ptrdiff_t start1_byte, start2_byte, len1_byte, len2_byte;
4451 EMACS_INT gap, len1, len_mid, len2; 4440 ptrdiff_t gap, len1, len_mid, len2;
4452 unsigned char *start1_addr, *start2_addr, *temp; 4441 unsigned char *start1_addr, *start2_addr, *temp;
4453 4442
4454 INTERVAL cur_intv, tmp_interval1, tmp_interval_mid, tmp_interval2, tmp_interval3; 4443 INTERVAL cur_intv, tmp_interval1, tmp_interval_mid, tmp_interval2, tmp_interval3;
@@ -4469,7 +4458,7 @@ Transposing beyond buffer boundaries is an error. */)
4469 /* Swap the regions if they're reversed. */ 4458 /* Swap the regions if they're reversed. */
4470 if (start2 < end1) 4459 if (start2 < end1)
4471 { 4460 {
4472 register EMACS_INT glumph = start1; 4461 register ptrdiff_t glumph = start1;
4473 start1 = start2; 4462 start1 = start2;
4474 start2 = glumph; 4463 start2 = glumph;
4475 glumph = end1; 4464 glumph = end1;