]> git.eshelyaron.com Git - emacs.git/commitdiff
(Fmultibyte_char_to_unibyte): Return latin1 chars unchanged.
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 18 Apr 2008 03:26:55 +0000 (03:26 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 18 Apr 2008 03:26:55 +0000 (03:26 +0000)
src/ChangeLog
src/character.c

index cf9bbe2d8bc7331b2e9e92cc283ef15672094c59..a0583ac0ce20f5c06f1bb5e03ed4482b4d74f47d 100644 (file)
 
 2008-04-18  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * character.c (Fmultibyte_char_to_unibyte): Return latin1 chars unchanged.
+
        * fileio.c (Fexpand_file_name): Refine last fix so `nm' is only
        relocated if it points to `name'.
 
index a4e142e371cdafb2bbee6b363eb0cac3b3d93587..828e22081322ffd136637fcdf18ed7a020e7417c 100644 (file)
@@ -326,9 +326,7 @@ DEFUN ("max-char", Fmax_char, Smax_char, 0, 0, 0,
 
 DEFUN ("unibyte-char-to-multibyte", Funibyte_char_to_multibyte,
        Sunibyte_char_to_multibyte, 1, 1, 0,
-       doc: /* Convert the unibyte character CH to multibyte character.
-The multibyte character is a result of decoding CH by
-the current unibyte charset (see `unibyte-charset').  */)
+       doc: /* Convert the byte CH to multibyte character.  */)
      (ch)
      Lisp_Object ch;
 {
@@ -348,18 +346,24 @@ the current unibyte charset (see `unibyte-charset').  */)
 
 DEFUN ("multibyte-char-to-unibyte", Fmultibyte_char_to_unibyte,
        Smultibyte_char_to_unibyte, 1, 1, 0,
-       doc: /* Convert the multibyte character CH to unibyte character.\n\
-The unibyte character is a result of encoding CH by
-the current primary charset (value of `charset-primary').  */)
+       doc: /* Convert the multibyte character CH to a byte.
+If the multibyte character does not represent a byte, return -1.  */)
      (ch)
      Lisp_Object ch;
 {
-  int c;
+  int cm;
 
   CHECK_CHARACTER (ch);
-  c = XFASTINT (ch);
-  c = CHAR_TO_BYTE8 (c);
-  return make_number (c);
+  cm = XFASTINT (ch);
+  if (cm < 256)
+    /* Can't distinguish a byte read from a unibyte buffer from
+       a latin1 char, so let's let it slide.  */
+    return ch;
+  else
+    {
+      int cu = CHAR_TO_BYTE8 (cm);
+      return make_number (cu);
+    }
 }
 
 DEFUN ("char-bytes", Fchar_bytes, Schar_bytes, 1, 1, 0,