]> code.delx.au - gnu-emacs/commitdiff
Let charset tick grow past USHRT_MAX
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 20 Dec 2014 23:20:56 +0000 (15:20 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 20 Dec 2014 23:50:45 +0000 (15:50 -0800)
* charset.c, charset.h (charset_ordered_list_tick):
Now EMACS_UINT, not unsigned short.
* fontset.c (reorder_font_vector): Allow the tick to grow to the
maximum representable Emacs integer value before wrapping it around.

src/ChangeLog
src/charset.c
src/charset.h
src/fontset.c

index e21d9ee05e1c04005f504fd84f346a4c3b91f971..4c2f2ec59d64667b3c9eace0fd7c8bb80c0d272c 100644 (file)
@@ -1,5 +1,11 @@
 2014-12-20  Paul Eggert  <eggert@cs.ucla.edu>
 
+       Let charset tick grow past USHRT_MAX
+       * charset.c, charset.h (charset_ordered_list_tick):
+       Now EMACS_UINT, not unsigned short.
+       * fontset.c (reorder_font_vector): Allow the tick to grow to the
+       maximum representable Emacs integer value before wrapping it around.
+
        Simplify unexec file mode setting
        * unexaix.c, unexcoff.c, unexelf.c, unexmacosx.c:
        Don't include <sys/stat.h> when no longer needed.
index 171a00f23d1116164885dc688a5198cd1a7cdfd1..9ad7de671467b4476c588de3a66d27b2f14776f8 100644 (file)
@@ -101,10 +101,9 @@ Lisp_Object Vcharset_ordered_list;
    charsets.  */
 Lisp_Object Vcharset_non_preferred_head;
 
-/* Incremented everytime we change Vcharset_ordered_list.  This is
-   unsigned short so that it fits in Lisp_Int and never matches
-   -1.  */
-unsigned short charset_ordered_list_tick;
+/* Incremented every time we change the priority of charsets.
+   Wraps around.  */*/
+EMACS_UINT charset_ordered_list_tick;
 
 /* List of iso-2022 charsets.  */
 Lisp_Object Viso_2022_charset_list;
index 4176ce5ecc63d36787552381ea6f9654d41937b4..6c6c3e6479fc681dbf041dc8c9f13b9ec92edf14 100644 (file)
@@ -253,8 +253,7 @@ extern struct charset *charset_table;
 extern Lisp_Object Vcharset_ordered_list;
 extern Lisp_Object Vcharset_non_preferred_head;
 
-/* Incremented everytime we change the priority of charsets.  */
-extern unsigned short charset_ordered_list_tick;
+extern EMACS_UINT charset_ordered_list_tick;
 
 extern Lisp_Object Viso_2022_charset_list;
 extern Lisp_Object Vemacs_mule_charset_list;
index d08d68fa28d0a936d16a49be12ea9fe1ffec6feb..ac50be1c925650ff3960b9f45333945cd56250f1 100644 (file)
@@ -389,7 +389,7 @@ reorder_font_vector (Lisp_Object font_group, struct font *font)
   Lisp_Object vec, font_object;
   int size;
   int i;
-  bool score_changed = 0;
+  bool score_changed = false;
 
   if (font)
     XSETFONT (font_object, font);
@@ -444,14 +444,15 @@ reorder_font_vector (Lisp_Object font_group, struct font *font)
       if (RFONT_DEF_SCORE (rfont_def) != score)
        {
          RFONT_DEF_SET_SCORE (rfont_def, score);
-         score_changed = 1;
+         score_changed = true;
        }
     }
 
   if (score_changed)
     qsort (XVECTOR (vec)->contents, size, word_size,
           fontset_compare_rfontdef);
-  XSETCAR (font_group, make_number (charset_ordered_list_tick));
+  EMACS_INT low_tick_bits = charset_ordered_list_tick & MOST_POSITIVE_FIXNUM;
+  XSETCAR (font_group, make_number (low_tick_bits));
 }
 
 /* Return a font-group (actually a cons (-1 . FONT-GROUP-VECTOR)) for