(defmacro define-stat-call (name arg designator-fun type)
;; FIXME: this isn't the documented way of doing this, surely?
- (let ((lisp-name (lisp-for-c-symbol name)))
+ (let ((lisp-name (lisp-for-c-symbol name))
+ (real-name #+inode64 (format nil "~A$INODE64" name)
+ #-inode64 name))
`(progn
(export ',lisp-name :sb-posix)
(declaim (inline ,lisp-name))
(declare (type (or null stat) stat))
(with-alien-stat a-stat ()
(let ((r (alien-funcall
- (extern-alien ,(real-c-name (list name :options :largefile)) ,type)
+ (extern-alien ,(real-c-name (list real-name :options :largefile)) ,type)
(,designator-fun ,arg)
a-stat)))
(when (minusp r)
;;; environment
-(export 'getenv :sb-posix)
+(eval-when (:compile-toplevel :load-toplevel)
+ ;; Do this at compile-time as Win32 code below refers to it as
+ ;; sb-posix:getenv.
+ (export 'getenv :sb-posix))
(defun getenv (name)
(let ((r (alien-funcall
(extern-alien "getenv" (function (* char) c-string))
(progn
;; Windows doesn't define a POSIX setenv, but happily their _putenv is sane.
(define-call* "putenv" int minusp (string c-string))
+ (export 'setenv :sb-posix)
(defun setenv (name value overwrite)
(declare (string name value))
(if (and (zerop overwrite) (sb-posix:getenv name))
0
(putenv (concatenate 'string name "=" value))))
+ (export 'unsetenv :sb-posix)
(defun unsetenv (name)
(declare (string name))
(putenv (concatenate 'string name "="))))