From: Mark Wooding Date: Sat, 8 Dec 2012 15:07:43 +0000 (+0000) Subject: zone.lisp: Choose first matching record for preferred subnet. X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/zone/commitdiff_plain/64e34a970f8a28e8317b9e5faa1e608639aada7f zone.lisp: Choose first matching record for preferred subnet. The old (overly imperative) algorithm picked the last, which doesn't fit with the fallback to the first record if none is preferred. --- diff --git a/zone.lisp b/zone.lisp index 751baff..8769fa3 100644 --- a/zone.lisp +++ b/zone.lisp @@ -274,13 +274,12 @@ (defun zone-process-records (rec ttl func) (process (rec dom ttl) (multiple-value-bind (top sub) (sift rec ttl) (if (and dom (null top) sub) - (let ((preferred nil)) - (dolist (s sub) - (when (some #'zone-preferred-subnet-p - (listify (zs-name s))) - (setf preferred s))) - (unless preferred - (setf preferred (car sub))) + (let ((preferred + (or (find-if (lambda (s) + (some #'zone-preferred-subnet-p + (listify (zs-name s)))) + sub) + (car sub)))) (when preferred (process (zs-records preferred) dom