From ae7e9d7b87b44f99b7609837a0d43764da47b4aa Mon Sep 17 00:00:00 2001
From: rtoy <rtoy>
Date: Mon, 1 Feb 2010 19:27:07 +0000
Subject: [PATCH] Simplify UNICODE conditionalization by using
 convert_lisp_string everywhere, not just for unicode.  Non-unicode takes a
 small hit from doing an unnecessary strcpy, but that should not be critical.

---
 lisp/backtrace.c | 24 +-----------------------
 lisp/os-common.c | 34 ++++++++++++----------------------
 2 files changed, 13 insertions(+), 45 deletions(-)

diff --git a/lisp/backtrace.c b/lisp/backtrace.c
index 789455eb8..68b62f53a 100644
--- a/lisp/backtrace.c
+++ b/lisp/backtrace.c
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/backtrace.c,v 1.20 2009/11/02 15:05:07 rtoy Exp $
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/backtrace.c,v 1.21 2010/02/01 19:27:07 rtoy Rel $
  *
  * Simple backtrace facility.  More or less from Rob's lisp version.
  */
@@ -214,16 +214,10 @@ backtrace(int nframes)
 		    }
 		    if (TypeOf(*object) == type_SimpleString) {
 			struct vector *string;
-#ifdef UNICODE
                         char c_string[1000];
-#endif                        
 			string = (struct vector *) object;
-#ifdef UNICODE
                         convert_lisp_string(c_string, string->data, string->length >> 2);
 			printf("%s, ", c_string);
-#else
-                        printf("%s, ", (char *) string->data);
-#endif
 		    } else
 			printf("(Not simple string??\?), ");
 		} else
@@ -295,42 +289,26 @@ print_entry_name(lispobj name)
 	if (TypeOf(*object) == type_SymbolHeader) {
 	    struct symbol *symbol = (struct symbol *) object;
 	    struct vector *string;
-#ifdef UNICODE
 	    char c_string[1000];
-#endif
 
 	    if (symbol->package != NIL) {
 		struct instance *pkg = (struct instance *) PTR(symbol->package);
 		lispobj pkg_name = pkg->slots[2];
 
 		string = (struct vector *) PTR(pkg_name);
-#ifndef UNICODE
-		printf("%s::", (char *) string->data);
-#else
 		convert_lisp_string(c_string, string->data, string->length >> 2);
 		printf("%s:;", c_string);
-#endif
 	    }
 
 	    object = (lispobj *) PTR(symbol->name);
 	    string = (struct vector *) object;
-#ifndef UNICODE
-	    printf("%s", (char *) string->data);
-#else
 	    convert_lisp_string(c_string, string->data, string->length >> 2);
 	    printf("%s:;", c_string);
-#endif
 	} else if (TypeOf(*object) == type_SimpleString) {
 	    struct vector *string = (struct vector *) object;
-#ifdef UNICODE
 	    char c_string[1000];
-#endif
-#ifndef UNICODE
-	    printf("\"%s\"", (char *) string->data);
-#else
 	    convert_lisp_string(c_string, string->data, string->length >> 2);
 	    printf("\"%s\"", c_string);
-#endif
 	} else
 	    printf("<??? type %d>", (int) TypeOf(*object));
     } else
diff --git a/lisp/os-common.c b/lisp/os-common.c
index bf7db703c..d27c7ddcb 100644
--- a/lisp/os-common.c
+++ b/lisp/os-common.c
@@ -1,6 +1,6 @@
 /*
 
- $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/os-common.c,v 1.30 2009/07/16 13:02:16 rtoy Rel $
+ $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/os-common.c,v 1.31 2010/02/01 19:27:07 rtoy Rel $
 
  This code was written as part of the CMU Common Lisp project at
  Carnegie Mellon University, and has been placed in the public domain.
@@ -145,15 +145,16 @@ extern void call_into_c(void);
 #define LINKAGE_DATA_ENTRY_SIZE 3
 #endif
 
-#ifdef UNICODE
-/*
- * FIXME:
- * Unicode hack to convert Lisp 16-bit string to 8-bit string by lopping off the high bits.
- */
 
 char*
 convert_lisp_string(char* c_string, void* lisp_string, int len)
 {
+#ifdef UNICODE    
+   /*
+    * FIXME: Unicode hack to convert Lisp 16-bit string to 8-bit string
+    * by lopping off the high bits.
+    */
+
     int k;
     unsigned short int* wide_string = (unsigned short int*) lisp_string;
 
@@ -161,10 +162,12 @@ convert_lisp_string(char* c_string, void* lisp_string, int len)
         c_string[k] = (wide_string[k]) & 0xff;
     }
     c_string[k] = 0;
-    
+#else
+    strcpy(c_string, lisp_string);
+#endif
+
     return c_string;
 }
-#endif
 
 void
 os_foreign_linkage_init(void)
@@ -184,7 +187,6 @@ os_foreign_linkage_init(void)
 	    = (struct vector *) PTR(data_vector->data[i]);
 	long type = fixnum_value(data_vector->data[i + 1]);
 	lispobj lib_list = data_vector->data[i + 2];
-#ifdef UNICODE
         /* FIXME:  1000 may not be long enough.  Add checks to make sure it's ok!!!!*/
         char c_symbol_name[1000];
 	/*
@@ -193,9 +195,6 @@ os_foreign_linkage_init(void)
 	 */
 
         convert_lisp_string(c_symbol_name, symbol_name->data, (symbol_name->length >> 2));
-#else
-#define c_symbol_name ((char*) symbol_name->data)
-#endif                            
 	if (i == 0) {
 #if defined(sparc)
 	    if (type != LINKAGE_CODE_TYPE || strcmp(c_symbol_name, "call_into_c")) {
@@ -261,13 +260,10 @@ os_resolve_data_linkage(void)
 	    = (struct vector *) PTR(data_vector->data[i]);
 	long type = fixnum_value(data_vector->data[i + 1]);
 	lispobj lib_list = data_vector->data[i + 2];
-#ifdef UNICODE
         char c_symbol_name[1000];
 
         convert_lisp_string(c_symbol_name, symbol_name->data, (symbol_name->length >> 2));
-#else
-#define c_symbol_name ((char*) symbol_name->data)
-#endif
+
 	if (type == LINKAGE_DATA_TYPE && lib_list != NIL) {
 	    void *target_addr = os_dlsym(c_symbol_name, lib_list);
 
@@ -299,9 +295,7 @@ os_link_one_symbol(long entry)
     long type;
     void *target_addr;
     long table_index = entry * LINKAGE_DATA_ENTRY_SIZE;
-#ifdef UNICODE
     char c_symbol_name[1000];
-#endif    
 
     linkage_data = (struct array *) PTR(linkage_data_obj);
     table_size = fixnum_value(linkage_data->fill_pointer);
@@ -312,11 +306,7 @@ os_link_one_symbol(long entry)
     symbol_name = (struct vector *) PTR(data_vector->data[table_index]);
     type = fixnum_value(data_vector->data[table_index + 1]);
 
-#ifdef UNICODE
     convert_lisp_string(c_symbol_name, symbol_name->data, (symbol_name->length >> 2));
-#else
-#define c_symbol_name ((char*) symbol_name->data)
-#endif
     
     target_addr = os_dlsym(c_symbol_name,
 			   data_vector->data[table_index + 2]);
-- 
GitLab