[Git][cmucl/cmucl][issue-120-software-type-in-c] Implement software-type in C

Raymond Toy (@rtoy) gitlab at common-lisp.net
Tue Aug 30 13:30:33 UTC 2022



Raymond Toy pushed to branch issue-120-software-type-in-c at cmucl / cmucl


Commits:
3c1f5538 by Raymond Toy at 2022-08-30T06:27:12-07:00
Implement software-type in C

Add function software-type to misc.lisp, and initialize to
*software-type* to NIL so that (software-type) will set it
appropriately.

Add function os_software_type to os-common.c that returns the sysname
slot of struct utsname.   On Linux and macos, this value matches the
value that we previously returned.

In linux-os.lisp and bsd-os.lisp, comment out the code that sets
*software-type*.  (We need to do this for other OSes, still)

- - - - -


4 changed files:

- src/code/bsd-os.lisp
- src/code/linux-os.lisp
- src/code/misc.lisp
- src/lisp/os-common.c


Changes:

=====================================
src/code/bsd-os.lisp
=====================================
@@ -42,6 +42,7 @@
 #+executable
 (register-lisp-runtime-feature :executable)
 
+#+nil
 (setq *software-type* #+OpenBSD "OpenBSD"
                       #+NetBSD "NetBSD"
                       #+freebsd "FreeBSD"


=====================================
src/code/linux-os.lisp
=====================================
@@ -26,7 +26,7 @@
 (register-lisp-feature :elf)
 (register-lisp-runtime-feature :executable)
 
-(setq *software-type* "Linux")
+;;(setq *software-type* "Linux")
 
 (defvar *software-version* nil
   "Version string for supporting software")


=====================================
src/code/misc.lisp
=====================================
@@ -183,11 +183,25 @@
   "Returns a string giving the name of the local machine."
   (unix:unix-gethostname))
 
-(defvar *software-type* "Unix"
-  "The value of SOFTWARE-TYPE.  Set in FOO-os.lisp.")
+(defvar *software-type* nil
+  _N"The value of SOFTWARE-TYPE.")
 
 (defun software-type ()
-  "Returns a string describing the supporting software."
+  _N"Returns a string describing the supporting software."
+  (unless *software-type*
+    (setf *software-type*
+	  (let (software-type)
+	    ;; Get the software-type from the C function os_software_type.
+	    (unwind-protect
+		 (progn
+		   (setf software-type
+			 (alien:alien-funcall
+			  (alien:extern-alien "os_software_type"
+					      (function (alien:* c-call:c-string)))))
+		   (unless (zerop (sap-int (alien:alien-sap software-type)))
+		     (alien:cast software-type c-call:c-string)))
+	      (when software-type
+		(alien:free-alien software-type))))))
   *software-type*)
 
 (defvar *short-site-name* (intl:gettext "Unknown")


=====================================
src/lisp/os-common.c
=====================================
@@ -757,3 +757,23 @@ os_software_version()
 
     return version;
 }
+#undef UNAME_RELEASE_AND_VERSION
+
+char*
+os_software_type()
+{
+    int status;
+    struct utsname uts;
+    char *os_name = NULL;
+    
+    status = uname(&uts);
+    if (status == 0) {
+        os_name = malloc(strlen(uts.sysname) + 1);
+        if (os_name) {
+            strcpy(os_name, uts.sysname);
+        }
+    }
+
+    return os_name;
+}
+    



View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/3c1f5538b09c6256480aac2c82e67f6331f19db5

-- 
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/3c1f5538b09c6256480aac2c82e67f6331f19db5
You're receiving this email because of your account on gitlab.common-lisp.net.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cmucl-cvs/attachments/20220830/6a4711e9/attachment-0001.html>


More information about the cmucl-cvs mailing list