From: Stefan Monnier Date: Fri, 18 Apr 2008 03:26:55 +0000 (+0000) Subject: (Fmultibyte_char_to_unibyte): Return latin1 chars unchanged. X-Git-Tag: emacs-pretest-23.0.90~6225 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5556875b184999982de635af7ae1371719699f7b;p=emacs.git (Fmultibyte_char_to_unibyte): Return latin1 chars unchanged. --- diff --git a/src/ChangeLog b/src/ChangeLog index cf9bbe2d8bc..a0583ac0ce2 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -159,6 +159,8 @@ 2008-04-18 Stefan Monnier + * 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'. diff --git a/src/character.c b/src/character.c index a4e142e371c..828e2208132 100644 --- a/src/character.c +++ b/src/character.c @@ -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,