Add C interface for Unicode character property table.
[bpt/emacs.git] / src / ChangeLog
index 8bff8e5..1a56298 100644 (file)
@@ -1,5 +1,142 @@
-2011-06-20  Paul Eggert  <eggert@cs.ucla.edu>
+2011-07-06  Kenichi Handa  <handa@m17n.org>
+
+       * character.h (unicode_category_t): New enum type.
+
+       * chartab.c (uniprop_decoder_t, uniprop_encoder_t): New types.
+       (Qchar_code_property_table): New variable.
+       (UNIPROP_TABLE_P, UNIPROP_GET_DECODER)
+       (UNIPROP_COMPRESSED_FORM_P): New macros.
+       (char_table_ascii): Uncompress the compressed values.
+       (sub_char_table_ref): New arg is_uniprop.  Callers changed.
+       Uncompress the compressed values.
+       (sub_char_table_ref_and_range):  Likewise.
+       (char_table_ref_and_range): Uncompress the compressed values.
+       (sub_char_table_set): New arg is_uniprop.  Callers changed.
+       Uncompress the compressed values.
+       (sub_char_table_set_range): Args changed.  Callers changed.
+       (char_table_set_range): Adjuted for the above change.
+       (map_sub_char_table): Delete args default_val and parent.  Add arg
+       top.  Give decoded values to a Lisp function.
+       (map_char_table): Adjusted for the above change.  Give decoded
+       values to a Lisp function.  Gcpro more variables.
+       (uniprop_table_uncompress)
+       (uniprop_decode_value_run_length): New functions.
+       (uniprop_decoder, uniprop_decoder_count): New variables.
+       (uniprop_get_decoder, uniprop_encode_value_character)
+       (uniprop_encode_value_run_length, uniprop_encode_value_numeric):
+       New functions.
+       (uniprop_encoder, uniprop_encoder_count): New variables.
+       (uniprop_get_encoder, uniprop_table)
+       (Funicode_property_table_internal, Fget_unicode_property_internal)
+       (Fput_unicode_property_internal): New functions.
+       (syms_of_chartab): DEFSYM Qchar_code_property_table, defsubr
+       Sunicode_property_table_internal, Sget_unicode_property_internal,
+       and Sput_unicode_property_internal. Defvar_lisp
+       char-code-property-alist.
+
+       * composite.c (CHAR_COMPOSABLE_P): Adjusted for the change of
+       Vunicode_category_table.
+
+       * font.c (font_range): Adjusted for the change of
+       Vunicode_category_table.
+
+2011-06-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fixes for GLYPH_DEBUG found by GCC 4.6.0 static checking.
+       The following patches are for when GLYPH_DEBUG && !XASSERT.
+       * dispextern.h (trace_redisplay_p, dump_glyph_string):
+       * dispnew.c (flush_stdout):
+       * xdisp.c (dump_glyph_row, dump_glyph_matrix, dump_glyph):
+       Mark as externally visible.
+       * dispnew.c (check_window_matrix_pointers): Now static.
+       * dispnew.c (window_to_frame_vpos):
+       * xfns.c (unwind_create_frame):
+       * xterm.c (x_check_font): Remove unused local.
+       * scroll.c (CHECK_BOUNDS):
+       * xfaces.c (cache_fache): Rename local to avoid shadowing.
+       * xfns.c, w32fns.c (image_cache_refcount, dpyinfo_refcount): Now static.
+       * xdisp.c (check_window_end): Now a no-op if !XASSERTS.
+       (debug_first_unchanged_at_end_vpos, debug_last_unchanged_at_beg_vpos)
+       (debug_dvpos, debug_dy, debug_delta, debug_delta_bytes, debug_end_vpos):
+       Now static.
+       (debug_method_add): Use va_list and vsprintf rather than relying
+       on undefined behavior with wrong number of arguments.
+       (dump_glyph, dump_glyph_row, Fdump_glyph_matrix):
+       Don't assume ptrdiff_t and EMACS_INT are the same width as int.
+       In this code, it's OK to assume C99 behavior for ptrdiff_t formats
+       since we're not interested in debugging glyphs with old libraries.
+       * xfaces.c (cache_face): Move debugging code earlier; this pacifies
+       GCC 4.6.0's static checking.
 
+2011-06-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Integer overflow and signedness fixes (Bug#8873).
+       A few related buffer overrun fixes, too.
+
+       * font.c (font_score): Use EMACS_INT, not int, to store XINT value.
+
+       * dispextern.h (struct face.stipple):
+       * image.c (x_bitmap_height, x_bitmap_width, x_bitmap_pixmap)
+       (x_bitmap_mask, x_allocate_bitmap_record)
+       (x_create_bitmap_from_data, x_create_bitmap_from_file)
+       (x_destroy_bitmap, x_destroy_all_bitmaps, x_create_bitmap_mask)
+       (x_create_bitmap_from_xpm_data):
+       * nsterm.h (struct ns_display_info.bitmaps_size, .bitmaps_last):
+       * w32term.h (struct w32_display_info.icon_bitmap_id, .bitmaps_size)
+       (.bitmaps_last):
+       * xfaces.c (load_pixmap):
+       * xterm.c (x_bitmap_icon, x_wm_set_icon_pixmap):
+       * xterm.h (struct x_display_info.icon_bitmap_id, .bitmaps_size)
+       (.bitmaps_last, struct x_output.icon_bitmap):
+       Use ptrdiff_t, not int, for bitmap indexes.
+       (x_allocate_bitmap_record): Check for size overflow.
+       * dispextern.h, lisp.h: Adjust to API changes elsewhere.
+
+       Use ptrdiff_t, not int, for overlay counts.
+       * buffer.h (overlays_at, sort_overlays, GET_OVERLAYS_AT):
+       * editfns.c (overlays_around, get_pos_property):
+       * textprop.c (get_char_property_and_overlay):
+       * xdisp.c (next_overlay_change, note_mouse_highlight):
+       * xfaces.c (face_at_buffer_position):
+       * buffer.c (OVERLAY_COUNT_MAX): New macro.
+       (overlays_at, overlays_in, sort_overlays, Foverlays_at)
+       (Fnext_overlay_change, Fprevious_overlay_change)
+       (mouse_face_overlay_overlaps, Foverlays_in):
+       Use ptrdiff_t, not int, for sizes.
+       (overlays_at, overlays_in): Check for size-calculation overflow.
+
+       * xterm.c (xim_initialize, same_x_server): Strlen may not fit in int.
+
+       * xsmfns.c (smc_save_yourself_CB, x_session_initialize): Avoid strlen.
+       (x_session_initialize): Do not assume string length fits in int.
+
+       * xsettings.c (apply_xft_settings): Fix potential buffer overrun.
+       This is unlikely, but can occur if DPI is outlandish.
+
+       * xsettings.c (Ffont_get_system_normal_font, Ffont_get_system_font):
+       * xselect.c (Fx_get_atom_name): Avoid need for strlen.
+
+       * xrdb.c: Don't assume strlen fits in int; avoid some strlens.
+       * xrdb.c (magic_file_p, search_magic_path):
+       Omit last arg SUFFIX; it was always 0.  All callers changed.
+       (magic_file_p): Use ptrdiff_t, not int.  Check for size overflow.
+
+       * xfont.c (xfont_match): Avoid need for strlen.
+
+       * xfns.c: Don't assume strlen fits in int.
+       (xic_create_fontsetname, x_window): Use ptrdiff_t, not int.
+
+       * xdisp.c (message_log_check_duplicate): Return intmax_t,
+       not unsigned long, as we prefer signed integers.  All callers changed.
+       Detect integer overflow in repeat count.
+       (message_dolog): Don't assume print length fits in 39 bytes.
+       (display_mode_element): Don't assume strlen fits in int.
+
+       * termcap.c: Don't assume sizes fit in int and never overflow.
+       (struct termcap_buffer, tgetent): Use ptrdiff_t, not int, for sizes.
+       (gobble_line): Check for size-calculation overflow.
+
+       * minibuf.c (Fread_buffer):
        * lread.c (intern, intern_c_string):
        * image.c (xpm_scan) [HAVE_NS && !HAVE_XPM]:
        Don't assume string length fits in int.
        * font.h (font_intern_prop): 2nd arg is now ptrdiff_t, not int.
 
        * filelock.c: Fix some buffer overrun and integer overflow issues.
-       (get_boot_time): Don't assume that gzip command string fits in 100 bytes.
+       (get_boot_time): Don't assume gzip command string fits in 100 bytes.
        Reformulate so as not to need the command string.
        Invoke gzip -cd rather than gunzip, as it's more portable.
        (lock_info_type, lock_file_1, lock_file):
        Check for time_t and/or pid_t out of range, e.g., via a network share.
        Don't alloca where an auto var works fine.
 
-2011-06-19  Paul Eggert  <eggert@cs.ucla.edu>
-
        * fileio.c: Fix some integer overflow issues.
        (file_name_as_directory, Fexpand_file_name, Fsubstitute_in_file_name):
        Don't assume string length fits in int.
        All uses changed.  This doesn't fix a bug, but it simplifies the
        code away from its former Hollerith-constant appearance, and it's
        one less 'int' to worry about when looking at integer-overflow issues.
-       (string_to_number): Simplify the 2011-04-26 change by invoking xsignal1.
+       (string_to_number): Simplify 2011-04-26 change by invoking xsignal1.
 
        * lisp.h (DEFUN): Remove bogus use of sizeof (struct Lisp_Subr).
        This didn't break anything, but it didn't help either.
        (LIST_END_P): Remove unused macro and its bogus comment.
        (make_fixnum_or_float): Remove unnecessary cast to EMACS_INT.
 
-2011-06-18  Paul Eggert  <eggert@cs.ucla.edu>
-
        * lisp.h (union Lisp_Object.i): EMACS_INT, not EMACS_UINT.
        This is for consistency with the ordinary, non-USE_LISP_UNION_TYPE,
        implementation.
        (compute_motion): Use it.  This is just for clarity.
        (Fcompute_motion): Don't assume hscroll and tab offset fit in int.
 
-       * image.c (xbm_image_p): Don't assume stated width and height fit in int.
+       * image.c (xbm_image_p): Don't assume stated width, height fit in int.
 
        * lisp.h (lint_assume): New macro.
        * composite.c (composition_gstring_put_cache):
        * fns.c (concat): Catch string overflow earlier.
        Do not rely on integer wraparound.
 
-       * dispextern.h (struct it.overlay_strings_charpos): EMACS_INT, not int.
-
-2011-06-17  Paul Eggert  <eggert@cs.ucla.edu>
-
-       * dispextern.h (struct it.selective): Now EMACS_INT, not int.
+       * dispextern.h (struct it.overlay_strings_charpos)
+       (struct it.selective): Now EMACS_INT, not int.
        * xdisp.c (forward_to_next_line_start)
        (back_to_previous_visible_line_start)
        (reseat_at_next_visible_line_start, next_element_from_buffer):
        (record_overlay_string): Check for size-calculation overflow.
        (init_buffer_once): Check at compile-time, not run-time.
 
+2011-06-22  Jim Meyering  <meyering@redhat.com>
+
+       don't leak an XBM-image-sized buffer
+       * image.c (xbm_load): Free the image buffer after using it.
+
+2011-06-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port to Sun C.
+       * composite.c (find_automatic_composition): Omit needless 'return 0;'
+       that Sun C diagnosed.
+       * fns.c (secure_hash): Fix pointer signedness issue.
+       * intervals.c (static_offset_intervals): New function.
+       (offset_intervals): Use it.
+
+2011-06-21  Leo Liu  <sdl.web@gmail.com>
+
+       * deps.mk (fns.o):
+       * makefile.w32-in ($(BLD)/fns.$(O)): Include sha256.h and
+       sha512.h.
+
+       * fns.c (secure_hash): Rename from crypto_hash_function and change
+       the first arg to accept symbols.
+       (Fsecure_hash): New primtive.
+       (syms_of_fns): New symbols.
+
+2011-06-20  Deniz Dogan  <deniz@dogan.se>
+
+       * process.c (Fset_process_buffer): Clarify return value in
+       docstring.
+
+2011-06-18  Chong Yidong  <cyd@stupidchicken.com>
+
+       * dispnew.c (add_window_display_history): Use BVAR.
+
+       * xdisp.c (debug_method_add): Use BVAR.
+       (check_window_end, dump_glyph_matrix, dump_glyph)
+       (dump_glyph_row, dump_glyph_string): Convert arglist to ANSI C.
+
+       * xfaces.c (check_lface_attrs, check_lface, dump_realized_face):
+       Likewise.
+
+       * xfns.c (Fx_create_frame, x_create_tip_frame): Delay image cache
+       check till after the cache is created in init_frame_faces.
+
+2011-06-17  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * fns.c (Fsafe_length): Yet another int/Lisp_Object mixup.
+
 2011-06-16  Paul Eggert  <eggert@cs.ucla.edu>
 
        * lisp.h: Include <limits.h>, for INT_MAX, LONG_MAX, LLONG_MAX.