From 540824f5d0de0cedb7157dda6c9bec9b9cccba96 Mon Sep 17 00:00:00 2001 From: Juho Snellman Date: Sun, 24 Sep 2006 15:47:27 +0000 Subject: [PATCH] 0.9.16.46: Fix regressions: * Installation was broken with non-bash /bin/sh (thanks to Niimi Satoshi for the patch) * DEFAULT-EXTERNAL-FORMAT would now try to print a warning for an invalid external format before streams had been initialized, causing an infinite error loop (reported by Hannu Koivisto). Temporary fix is just not printing the warning, a better fix will wait until after the freeze. * Also stop autodetecting the external format from the locale on non-unicode builds. Having a default external format that's incompatible with CHARACTER doesn't seem very sensible, especially now that the external formats are also used for SB-ALIEN:C-STRING instead of just streams. --- NEWS | 3 +++ install.sh | 5 +---- src/code/octets.lisp | 21 ++++++++++++++++++--- version.lisp-expr | 2 +- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/NEWS b/NEWS index ba9c047..67243b4 100644 --- a/NEWS +++ b/NEWS @@ -21,6 +21,9 @@ changes in sbcl-0.9.17 (0.9.99?) relative to sbcl-0.9.16: class-precedence-lists of GENERIC-FUNCTION and STANDARD-GENERIC-FUNCTION comply with the requirement of ANSI 1.4.4.5. + * minor incompatible change: the default stream external format on + non-unicode SBCL is no longer detected from the locale, but is always + ISO-8859-1 * new feature: Add a version of evaluator that uses an interpreter instead of the compiler. EVAL still uses the compiler by default, to switch it to use the interpreter, set the value of the variable diff --git a/install.sh b/install.sh index 0265a4d..3ee1ffb 100644 --- a/install.sh +++ b/install.sh @@ -5,12 +5,9 @@ set -e ensure_dirs () { - OLD_IFS=$IFS - IFS='' - for j in $*; do + for j in "$@"; do test -d "$j" || mkdir -p "$j" done; - IFS=$OLD_IFS } if [ "$OSTYPE" = "cygwin" -o "$OSTYPE" = "msys" ] ; then diff --git a/src/code/octets.lisp b/src/code/octets.lisp index 5aca4f8..247f685 100644 --- a/src/code/octets.lisp +++ b/src/code/octets.lisp @@ -641,6 +641,12 @@ one-past-the-end" (defun default-external-format () (or *default-external-format* + ;; On non-unicode, use iso-8859-1 instead of detecting it from + ;; the locale settings. Defaulting to an external-format which + ;; can represent characters that the CHARACTER type can't + ;; doesn't seem very sensible. + #!-sb-unicode + (setf *default-external-format* :latin-1) (let ((external-format #!-win32 (intern (or (sb!alien:alien-funcall (extern-alien "nl_langinfo" @@ -649,15 +655,24 @@ one-past-the-end" sb!unix:codeset) "LATIN-1") "KEYWORD") - #!+win32 - #!+sb-unicode (sb!win32::ansi-codepage) - #!-sb-unicode :LATIN-1)) + #!+win32 (sb!win32::ansi-codepage))) (/show0 "cold-printing defaulted external-format:") #!+sb-show (cold-print external-format) (/show0 "matching to known aliases") (dolist (entry *external-formats* (progn + ;;; FIXME! This WARN would try to do printing + ;;; before the streams have been initialized, + ;;; causing an infinite erroring loop. We should + ;;; either print it by calling to C, or delay the + ;;; warning until later. Since we're in freeze + ;;; right now, and the warning isn't really + ;;; essential, I'm doing what's least likely to + ;;; cause damage, and commenting it out. This + ;;; should be revisited after 0.9.17. -- JES, + ;;; 2006-09-21 + #+nil (warn "Invalid external-format ~A; using LATIN-1" external-format) (setf external-format :latin-1))) diff --git a/version.lisp-expr b/version.lisp-expr index 8c42600..7e1cce5 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.9.16.45" +"0.9.16.46" -- 1.7.10.4