Raymond Toy pushed to branch master at cmucl / cmucl
Commits:
-
23f66902
by Raymond Toy at 2022-11-14T05:09:37+00:00
-
6764053d
by Raymond Toy at 2022-11-14T05:09:38+00:00
5 changed files:
- src/code/intl.lisp
- src/code/unix.lisp
- src/general-info/release-21e.md
- src/i18n/locale/cmucl-unix.pot
- src/lisp/os-common.c
Changes:
... | ... | @@ -520,10 +520,7 @@ |
520 | 520 | |
521 | 521 | (defun setlocale (&optional locale)
|
522 | 522 | (setf *locale* (or locale
|
523 | - (getenv "LANGUAGE")
|
|
524 | - (getenv "LC_ALL")
|
|
525 | - (getenv "LC_MESSAGES")
|
|
526 | - (getenv "LANG")
|
|
523 | + (unix::unix-get-lc-messages)
|
|
527 | 524 | *locale*)))
|
528 | 525 | |
529 | 526 | (defmacro textdomain (domain)
|
... | ... | @@ -2899,3 +2899,19 @@ |
2899 | 2899 | (alien:alien-funcall
|
2900 | 2900 | (alien:extern-alien "os_setlocale"
|
2901 | 2901 | (function c-call:int))))
|
2902 | + |
|
2903 | +(defun unix-get-lc-messages ()
|
|
2904 | + _N"Get LC_MESSAGES from the current locale. If we can't, return
|
|
2905 | + NIL. A call to UNIX-SETLOCALE must have been done previously before
|
|
2906 | + calling this so that the correct locale is returned."
|
|
2907 | + (with-alien ((buf (array c-call:char 256)))
|
|
2908 | + (let ((result
|
|
2909 | + (alien-funcall
|
|
2910 | + (extern-alien "os_get_lc_messages"
|
|
2911 | + (function c-call:int
|
|
2912 | + (* c-call:char)
|
|
2913 | + c-call:int))
|
|
2914 | + (cast buf (* c-call:char))
|
|
2915 | + 256)))
|
|
2916 | + (when (zerop result)
|
|
2917 | + (cast buf c-call:c-string))))) |
... | ... | @@ -60,6 +60,7 @@ public domain. |
60 | 60 | * ~~#134~~ Handle the case of `(expt complex complex-rational)`
|
61 | 61 | * ~~#136~~ `ensure-directories-exist` should return the given pathspec
|
62 | 62 | * #139 `*default-external-format*` defaults to `:utf-8`
|
63 | + * ~~#141~~ Disallow locales that are pathnames to a localedef file
|
|
63 | 64 | * ~~#142~~ `(random 0)` signals incorrect error
|
64 | 65 | * ~~#147~~ `stream-line-column` method missing for `fundamental-character-output-stream`
|
65 | 66 | * ~~#149~~ Call setlocale(3C) on startup
|
... | ... | @@ -1428,3 +1428,10 @@ msgstr "" |
1428 | 1428 | msgid "Call setlocale(3c) with fixed args. Returns 0 on success."
|
1429 | 1429 | msgstr ""
|
1430 | 1430 | |
1431 | +#: src/code/unix.lisp
|
|
1432 | +msgid ""
|
|
1433 | +"Get LC_MESSAGES from the current locale. If we can't, return\n"
|
|
1434 | +" NIL. A call to UNIX-SETLOCALE must have been done previously before\n"
|
|
1435 | +" calling this so that the correct locale is returned."
|
|
1436 | +msgstr ""
|
|
1437 | + |
... | ... | @@ -783,3 +783,16 @@ os_setlocale(void) |
783 | 783 | /* Return 0 if setlocale suceeded; otherwise -1. */
|
784 | 784 | return result != NULL ? 0 : -1;
|
785 | 785 | }
|
786 | + |
|
787 | +int
|
|
788 | +os_get_lc_messages(char *buf, int len)
|
|
789 | +{
|
|
790 | + char *locale = setlocale(LC_MESSAGES, NULL);
|
|
791 | + if (locale) {
|
|
792 | + strncpy(buf, locale, len - 1);
|
|
793 | + buf[len - 1] = '\0';
|
|
794 | + }
|
|
795 | + |
|
796 | + /* Return -1 if setlocale failed. */
|
|
797 | + return locale ? 0 : -1;
|
|
798 | +} |