Date: Sunday, October 10, 2010 @ 08:52:58 Author: rtoy Path: /project/cmucl/cvsroot/src/lisp
Modified: print.c
In brief_otherptr, the name slot of a symbol was not printing out the name correctly for unicode strings. It stopped after the first 0 byte, which basically means either nothing or a single byte is printed. Just dump out the entire UTF-16 octets in native byte order.
---------+ print.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-)
Index: src/lisp/print.c diff -u src/lisp/print.c:1.25 src/lisp/print.c:1.26 --- src/lisp/print.c:1.25 Thu Jun 11 12:04:01 2009 +++ src/lisp/print.c Sun Oct 10 08:52:58 2010 @@ -1,4 +1,4 @@ -/* $Header: /project/cmucl/cvsroot/src/lisp/print.c,v 1.25 2009-06-11 16:04:01 rtoy Rel $ */ +/* $Header: /project/cmucl/cvsroot/src/lisp/print.c,v 1.26 2010-10-10 12:52:58 rtoy Exp $ */
#include <stdio.h> #include <string.h> @@ -376,11 +376,28 @@ case type_SymbolHeader: symbol = (struct symbol *) ptr; vector = (struct vector *) PTR(symbol->name); +#ifndef UNICODE for (charptr = (char *) vector->data; *charptr != '\0'; charptr++) { if (*charptr == '"') putchar('\'); putchar(*charptr); } +#else + { + char *charptr = (char *) vector->data; + int len = (int) (vector->length >> 2); + + while (len-- > 0) { + if ((charptr[0] == 0) + && (charptr[1] = '"')) { + putchar('\'); + } + /* Just dump out the UTF-16 data */ + putchar(*charptr++); + putchar(*charptr++); + } + } +#endif break;
case type_SimpleString: