The old (overly imperative) algorithm picked the last, which doesn't fit
with the fallback to the first record if none is preferred.
(process (rec dom ttl)
(multiple-value-bind (top sub) (sift rec ttl)
(if (and dom (null top) sub)
(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
(when preferred
(process (zs-records preferred)
dom