Raymond Toy pushed to branch issue-120-software-type-in-c at cmucl / cmucl
Commits:
-
a47e8963
by Raymond Toy at 2023-03-13T07:31:19-07:00
-
98ae551c
by Raymond Toy at 2023-03-13T07:33:45-07:00
4 changed files:
- src/code/misc.lisp
- src/i18n/locale/cmucl-linux-os.pot
- src/i18n/locale/cmucl.pot
- src/lisp/os-common.c
Changes:
| ... | ... | @@ -199,9 +199,7 @@ |
| 199 | 199 | (alien:extern-alien "os_software_type"
|
| 200 | 200 | (function (alien:* c-call:c-string)))))
|
| 201 | 201 | (unless (zerop (sap-int (alien:alien-sap software-type)))
|
| 202 | - (alien:cast software-type c-call:c-string)))
|
|
| 203 | - (when software-type
|
|
| 204 | - (alien:free-alien software-type))))))
|
|
| 202 | + (alien:cast software-type c-call:c-string)))))))
|
|
| 205 | 203 | *software-type*)
|
| 206 | 204 | |
| 207 | 205 | (defvar *software-version* nil
|
| ... | ... | @@ -219,9 +217,7 @@ |
| 219 | 217 | (alien:extern-alien "os_software_version"
|
| 220 | 218 | (function (alien:* c-call:c-string)))))
|
| 221 | 219 | (unless (zerop (sap-int (alien:alien-sap version)))
|
| 222 | - (alien:cast version c-call:c-string)))
|
|
| 223 | - (when version
|
|
| 224 | - (alien:free-alien version)))))
|
|
| 220 | + (alien:cast version c-call:c-string))))))
|
|
| 225 | 221 | *software-version*))
|
| 226 | 222 | |
| 227 | 223 | (defvar *short-site-name* (intl:gettext "Unknown")
|
| ... | ... | @@ -15,10 +15,6 @@ msgstr "" |
| 15 | 15 | "Content-Type: text/plain; charset=UTF-8\n"
|
| 16 | 16 | "Content-Transfer-Encoding: 8bit\n"
|
| 17 | 17 | |
| 18 | -#: src/code/linux-os.lisp
|
|
| 19 | -msgid "Returns a string describing version of the supporting software."
|
|
| 20 | -msgstr ""
|
|
| 21 | - |
|
| 22 | 18 | #: src/code/linux-os.lisp
|
| 23 | 19 | msgid "Unix system call getrusage failed: ~A."
|
| 24 | 20 | msgstr ""
|
| ... | ... | @@ -5605,14 +5605,14 @@ msgid "" |
| 5605 | 5605 | " NIL if no such character exists."
|
| 5606 | 5606 | msgstr ""
|
| 5607 | 5607 | |
| 5608 | -#: src/code/misc.lisp
|
|
| 5608 | +#: src/code/misc-doc.lisp src/code/misc.lisp
|
|
| 5609 | 5609 | msgid ""
|
| 5610 | 5610 | "Returns the documentation string of Doc-Type for X, or NIL if\n"
|
| 5611 | 5611 | " none exists. System doc-types are VARIABLE, FUNCTION, STRUCTURE, TYPE,\n"
|
| 5612 | 5612 | " SETF, and T."
|
| 5613 | 5613 | msgstr ""
|
| 5614 | 5614 | |
| 5615 | -#: src/code/misc.lisp
|
|
| 5615 | +#: src/code/misc-doc.lisp src/code/misc.lisp
|
|
| 5616 | 5616 | msgid "~S is not the name of a structure type."
|
| 5617 | 5617 | msgstr ""
|
| 5618 | 5618 | |
| ... | ... | @@ -5643,13 +5643,21 @@ msgid "Returns a string giving the name of the local machine." |
| 5643 | 5643 | msgstr ""
|
| 5644 | 5644 | |
| 5645 | 5645 | #: src/code/misc.lisp
|
| 5646 | -msgid "The value of SOFTWARE-TYPE. Set in FOO-os.lisp."
|
|
| 5646 | +msgid "The value of SOFTWARE-TYPE."
|
|
| 5647 | 5647 | msgstr ""
|
| 5648 | 5648 | |
| 5649 | 5649 | #: src/code/misc.lisp
|
| 5650 | 5650 | msgid "Returns a string describing the supporting software."
|
| 5651 | 5651 | msgstr ""
|
| 5652 | 5652 | |
| 5653 | +#: src/code/misc.lisp
|
|
| 5654 | +msgid "Version string for supporting software"
|
|
| 5655 | +msgstr ""
|
|
| 5656 | + |
|
| 5657 | +#: src/code/misc.lisp
|
|
| 5658 | +msgid "Returns a string describing version of the supporting software."
|
|
| 5659 | +msgstr ""
|
|
| 5660 | + |
|
| 5653 | 5661 | #: src/code/misc.lisp
|
| 5654 | 5662 | msgid "The value of SHORT-SITE-NAME. Set in library:site-init.lisp."
|
| 5655 | 5663 | msgstr ""
|
| ... | ... | @@ -817,43 +817,47 @@ os_get_locale_codeset() |
| 817 | 817 | #endif
|
| 818 | 818 | |
| 819 | 819 | char*
|
| 820 | -os_software_version()
|
|
| 820 | +os_software_version(void)
|
|
| 821 | 821 | {
|
| 822 | - int status;
|
|
| 823 | 822 | struct utsname uts;
|
| 824 | - char *version = NULL;
|
|
| 823 | + /*
|
|
| 824 | + * Buffer large enough to hold the release and version that's used
|
|
| 825 | + * for Linux and Solaris.
|
|
| 826 | + */
|
|
| 827 | + static char result[sizeof(uts.release) + sizeof(uts.version)];
|
|
| 828 | + |
|
| 829 | + int status;
|
|
| 825 | 830 | |
| 826 | 831 | status = uname(&uts);
|
| 827 | - if (status == 0) {
|
|
| 828 | - int version_length;
|
|
| 832 | + if (status != 0) {
|
|
| 833 | + return NULL;
|
|
| 834 | + }
|
|
| 835 | +
|
|
| 829 | 836 | #if defined(UNAME_RELEASE_AND_VERSION)
|
| 830 | - version_length = strlen(uts.release) + strlen(uts.version) + 2;
|
|
| 831 | - version = malloc(version_length);
|
|
| 832 | - if (version) {
|
|
| 833 | - strcpy(version, uts.release);
|
|
| 834 | - strcat(version, " ");
|
|
| 835 | - strcat(version, uts.version);
|
|
| 836 | - }
|
|
| 837 | + strcpy(result, uts.release);
|
|
| 838 | + strcat(result, " ");
|
|
| 839 | + strcat(result, uts.version);
|
|
| 837 | 840 | #else
|
| 838 | - version = strdup(uts.version);
|
|
| 841 | + strcpy(result, uts.version);
|
|
| 839 | 842 | #endif
|
| 840 | - }
|
|
| 841 | 843 | |
| 842 | - return version;
|
|
| 844 | + return result;
|
|
| 843 | 845 | }
|
| 844 | 846 | #undef UNAME_RELEASE_AND_VERSION
|
| 845 | 847 | |
| 846 | 848 | char*
|
| 847 | -os_software_type()
|
|
| 849 | +os_software_type(void)
|
|
| 848 | 850 | {
|
| 849 | 851 | int status;
|
| 850 | 852 | struct utsname uts;
|
| 851 | - char *os_name = NULL;
|
|
| 853 | + static char os_name[sizeof(uts.sysname)];
|
|
| 852 | 854 |
|
| 853 | 855 | status = uname(&uts);
|
| 854 | - if (status == 0) {
|
|
| 855 | - os_name = strdup(uts.sysname);
|
|
| 856 | + if (status != 0) {
|
|
| 857 | + return NULL;
|
|
| 856 | 858 | }
|
| 859 | +
|
|
| 860 | + strcpy(os_name, uts.sysname);
|
|
| 857 | 861 | |
| 858 | 862 | return os_name;
|
| 859 | 863 | } |