From 51a6847e534bc908f97f068c5ed82ed11c85ce15 Mon Sep 17 00:00:00 2001 Message-Id: <51a6847e534bc908f97f068c5ed82ed11c85ce15.1715264989.git.mdw@distorted.org.uk> From: Mark Wooding Date: Sun, 10 Dec 2006 15:11:28 +0000 Subject: [PATCH] portability: Supply system-specific wossname for CLisp and ECL. Organization: Straylight/Edgeware From: Mark Wooding This involves some unpleasant CFFI hacking for ECL. --- net.lisp | 17 ++++++++++------- zone.asd | 2 +- zone.lisp | 11 ++++++++++- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/net.lisp b/net.lisp index d957f53..64c796d 100644 --- a/net.lisp +++ b/net.lisp @@ -259,17 +259,20 @@ (defun ipnet-changeable-bytes (mask) (defun resolve-hostname (name) "Resolve a hostname to an IP address using the DNS, or return nil." #+cmu (let ((he (ext:lookup-host-entry name))) - (and he - (ext:host-entry-addr he))) - #-cmu nil -) + (and he (ext:host-entry-addr he))) + #+clisp (let ((he (ext:resolve-host-ipaddr name))) + (and he (string-ipaddr (car (ext:hostent-addr-list he))))) + #+ecl (nth-value 2 (ext:lookup-host-entry name)) + #-(or cmu clisp ecl) nil) (defun canonify-hostname (name) "Resolve a hostname to canonical form using the DNS, or return nil." #+cmu (let ((he (ext:lookup-host-entry name))) - (and he - (ext:host-entry-name he))) - #-cmu nil) + (and he (ext:host-entry-name he))) + #+clisp (let ((he (ext:resolve-host-ipaddr name))) + (and he (ext:hostent-name he))) + #+ecl (nth-value 0 (ext:lookup-host-entry name)) + #-(or cmu clisp ecl) name) ;;;-------------------------------------------------------------------------- ;;; Host names and specifiers. diff --git a/zone.asd b/zone.asd index b49cc79..0396a19 100644 --- a/zone.asd +++ b/zone.asd @@ -4,7 +4,7 @@ :description "Generation of DNS zone files" :version "1.0.0" :author "Mark Wooding " - :depends-on ("mdw") + :depends-on ("mdw" #+ecl "cffi") :components ((:file "net") (:file "zone") (:file "frontend")) diff --git a/zone.lisp b/zone.lisp index 64488c2..37e7499 100644 --- a/zone.lisp +++ b/zone.lisp @@ -144,9 +144,18 @@ (defstruct (zone (:predicate zonep)) ;;;-------------------------------------------------------------------------- ;;; Zone defaults. It is intended that scripts override these. +#+ecl +(cffi:defcfun gethostname :int + (name :pointer) + (len :uint)) + (defvar *default-zone-source* (let ((hn #+cmu (unix:unix-gethostname) - #+clisp (unix:get-host-name))) + #+clisp (unix:get-host-name) + #+ecl (cffi:with-foreign-pointer-as-string (buffer 256 len) + (let ((rc (gethostname buffer len))) + (unless (zerop rc) + (error "gethostname(2) failed (rc = ~A)." rc)))))) (and hn (concatenate 'string (canonify-hostname hn) "."))) "The default zone source: the current host's name.") -- [mdw]