zone.lisp: Choose first matching record for preferred subnet.
authorMark Wooding <mdw@distorted.org.uk>
Sat, 8 Dec 2012 15:07:43 +0000 (15:07 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 8 Dec 2012 15:07:43 +0000 (15:07 +0000)
The old (overly imperative) algorithm picked the last, which doesn't fit
with the fallback to the first record if none is preferred.

zone.lisp

index 751baff..8769fa3 100644 (file)
--- a/zone.lisp
+++ b/zone.lisp
           (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