+(defun native-filename (pathname)
+ (let ((directory (pathname-directory pathname))
+ (name (pathname-name pathname))
+ (type (pathname-type pathname)))
+ (with-output-to-string (s nil :element-type 'base-char)
+ (etypecase directory
+ (string (write-string directory s))
+ (list
+ (when (eq (car directory) :absolute)
+ (write-char #\/ s))
+ (dolist (piece (cdr directory))
+ (etypecase piece
+ (string (write-string piece s) (write-char #\/ s))
+ ((member :up) (write-string "../" s))))))
+ (etypecase name
+ (null)
+ (string (write-string name s)))
+ (etypecase type
+ (null)
+ (string (write-char #\. s) (write-string type s))))))