+#!+darwin
+(defun sysctlbyname (type name)
+ #!+sb-doc
+ "Retrieves an integer or string value with the given name."
+ (with-alien ((result-len sb!unix:size-t))
+ (ecase type
+ (:int
+ (with-alien ((result int))
+ (setf result-len (alien-size int :bytes))
+ (unless (minusp (%sysctlbyname name (addr result)
+ (addr result-len) nil 0))
+ result)))
+ (:str
+ (unless (minusp (%sysctlbyname name nil (addr result-len) nil 0))
+ (with-alien ((result (* char) (make-alien char result-len)))
+ (if (minusp (%sysctlbyname name result (addr result-len) nil 0))
+ (free-alien result)
+ (sb!unix::newcharstar-string result))))))))
+