]> git.eshelyaron.com Git - emacs.git/commitdiff
merge count_size_as_multibyte, parse_str_to_multibyte
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 21 May 2011 04:33:23 +0000 (21:33 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 21 May 2011 04:33:23 +0000 (21:33 -0700)
* character.c, character.h (count_size_as_multibyte):
Renamed from parse_str_to_multibyte; all uses changed.
Check for integer overflow.
* insdel.c, lisp.h (count_size_as_multibyte): Remove,
since it's now a duplicate of the other.  This is more of
a character than a buffer op, so better that it's in character.c.
* fns.c, print.c: Adjust to above changes.

src/ChangeLog
src/character.c
src/character.h
src/fns.c
src/insdel.c
src/lisp.h
src/print.c

index bef6c1593a738fcb86d1ae81dceda81c04024c05..8bd4426781d7ef34aaa6908835de9ed24c4fb220 100644 (file)
@@ -1,3 +1,14 @@
+2011-05-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+       merge count_size_as_multibyte, parse_str_to_multibyte
+       * character.c, character.h (count_size_as_multibyte):
+       Renamed from parse_str_to_multibyte; all uses changed.
+       Check for integer overflow.
+       * insdel.c, lisp.h (count_size_as_multibyte): Remove,
+       since it's now a duplicate of the other.  This is more of
+       a character than a buffer op, so better that it's in character.c.
+       * fns.c, print.c: Adjust to above changes.
+
 2011-05-20  Eli Zaretskii  <eliz@gnu.org>
 
        * callproc.c (Fcall_process) [MSDOS]: Fix arguments to
index b9595f97ec7ef456fb139ff10103a5a77d2e54cd..34e69da9cc53b60e1b9129b3c362190a6c40e2f9 100644 (file)
@@ -672,13 +672,18 @@ str_as_multibyte (unsigned char *str, EMACS_INT len, EMACS_INT nbytes,
    `str_to_multibyte'.  */
 
 EMACS_INT
-parse_str_to_multibyte (const unsigned char *str, EMACS_INT len)
+count_size_as_multibyte (const unsigned char *str, EMACS_INT len)
 {
   const unsigned char *endp = str + len;
   EMACS_INT bytes;
 
   for (bytes = 0; str < endp; str++)
-    bytes += (*str < 0x80) ? 1 : 2;
+    {
+      int n = *str < 0x80 ? 1 : 2;
+      if (INT_ADD_OVERFLOW (bytes, n))
+        string_overflow ();
+      bytes += n;
+    }
   return bytes;
 }
 
index 5877d145d9ed5d78d16eb16dc782a78785f45f24..31e3b0a9416164a065f2c6975b47d6853f5ee68d 100644 (file)
@@ -602,7 +602,7 @@ extern int translate_char (Lisp_Object, int c);
 extern int char_printable_p (int c);
 extern void parse_str_as_multibyte (const unsigned char *,
                                    EMACS_INT, EMACS_INT *, EMACS_INT *);
-extern EMACS_INT parse_str_to_multibyte (const unsigned char *, EMACS_INT);
+extern EMACS_INT count_size_as_multibyte (const unsigned char *, EMACS_INT);
 extern EMACS_INT str_as_multibyte (unsigned char *, EMACS_INT, EMACS_INT,
                             EMACS_INT *);
 extern EMACS_INT str_to_multibyte (unsigned char *, EMACS_INT, EMACS_INT);
index 16dc0fe0de2403a08b769884ae94bc7052775f4d..d61c1ac7ba9e5a96c3deaae231e3be9b62e05bbb 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -898,7 +898,7 @@ string_to_multibyte (Lisp_Object string)
   if (STRING_MULTIBYTE (string))
     return string;
 
-  nbytes = parse_str_to_multibyte (SDATA (string), SBYTES (string));
+  nbytes = count_size_as_multibyte (SDATA (string), SBYTES (string));
   /* If all the chars are ASCII, they won't need any more bytes once
      converted.  */
   if (nbytes == SBYTES (string))
index de9e8aa570a1c0eb0d587cdbb8225c0e74e07b36..c0cccc65d6a5c5d683bd998bbb3fec305c7f0b7b 100644 (file)
@@ -570,37 +570,6 @@ copy_text (const unsigned char *from_addr, unsigned char *to_addr,
       return to_addr - initial_to_addr;
     }
 }
-
-/* Return the number of bytes it would take
-   to convert some single-byte text to multibyte.
-   The single-byte text consists of NBYTES bytes at PTR.  */
-
-EMACS_INT
-count_size_as_multibyte (const unsigned char *ptr, EMACS_INT nbytes)
-{
-  EMACS_INT i;
-  EMACS_INT outgoing_nbytes = 0;
-
-  for (i = 0; i < nbytes; i++)
-    {
-      unsigned int c = *ptr++;
-      int n;
-
-      if (ASCII_CHAR_P (c))
-       n = 1;
-      else
-       {
-         c = BYTE8_TO_CHAR (c);
-         n = CHAR_BYTES (c);
-       }
-
-      if (INT_ADD_OVERFLOW (outgoing_nbytes, n))
-       string_overflow ();
-      outgoing_nbytes += n;
-    }
-
-  return outgoing_nbytes;
-}
 \f
 /* Insert a string of specified length before point.
    This function judges multibyteness based on
index b6bf2bdb50241fa9a4e9abd7918b65a1fc4b9039..b2beeffa79e8e8500d9f225d901d4179fd61cb76 100644 (file)
@@ -2574,7 +2574,6 @@ extern void move_gap_both (EMACS_INT, EMACS_INT);
 extern void make_gap (EMACS_INT);
 extern EMACS_INT copy_text (const unsigned char *, unsigned char *,
                            EMACS_INT, int, int);
-extern EMACS_INT count_size_as_multibyte (const unsigned char *, EMACS_INT);
 extern int count_combining_before (const unsigned char *,
                                   EMACS_INT, EMACS_INT, EMACS_INT);
 extern int count_combining_after (const unsigned char *,
index f0624d5d16e4c8be961d5de5c852472b5f69f5e7..20c3e8ae52624bd2edb30b356c029cbbe92d4085 100644 (file)
@@ -381,7 +381,7 @@ print_string (Lisp_Object string, Lisp_Object printcharfun)
          EMACS_INT bytes;
 
          chars = SBYTES (string);
-         bytes = parse_str_to_multibyte (SDATA (string), chars);
+         bytes = count_size_as_multibyte (SDATA (string), chars);
          if (chars < bytes)
            {
              newstr = make_uninit_multibyte_string (chars, bytes);