Fix system error message decoding on Windows.
[sbcl.git] / src / code / misc-aliens.lisp
index bcebb22..f3a55c3 100644 (file)
 (in-package "SB!IMPL")
 
 (declaim (inline memmove))
-(def-alien-routine ("memmove" memmove) void
+(define-alien-routine ("memmove" memmove) void
   (dest (* char))
   (src (* char))
   (n unsigned-int))
+
+(define-alien-routine ("os_get_errno" get-errno) integer)
+(setf (fdocumentation 'get-errno 'function)
+      "Return the value of the C library pseudo-variable named \"errno\".")
+
+;;; Decode errno into a string.
+#!-win32
+(defun strerror (&optional (errno (get-errno)))
+  (alien-funcall (extern-alien "strerror" (function c-string int)) errno))
+
+#!+win32
+(defun strerror (&optional (errno (sb!win32:get-last-error)))
+  (sb!win32:format-system-message errno))