diff options
-rw-r--r-- | geoip/ip.lisp | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/geoip/ip.lisp b/geoip/ip.lisp index 6b8fad7..e00ba89 100644 --- a/geoip/ip.lisp +++ b/geoip/ip.lisp @@ -18,23 +18,21 @@ (5am:is (= (octet-to-int '(1 5) :big-endian nil) #x501))) (defun parse-ipv4 (ip-address) - (reduce (lambda (acc part) - (let ((n (parse-integer part))) - (assert (<= 0 n 255)) - (+ (ash acc 8) n))) + (reduce (lambda (acc n) + (assert (<= 0 n 255)) + (+ (ash acc 8) n)) (split-sequence #\. ip-address) + :key #'parse-integer :initial-value 0)) (defun parse-ipv6 (ip-address) - (reduce (lambda (acc part) - (let ((n (if (string= part "") 0 - (parse-integer part :radix 16)))) - (assert (<= 0 n #xFFFF)) - (+ (ash acc 16) n))) + (reduce (lambda (acc n) + (assert (<= 0 n #xFFFF)) + (+ (ash acc 16) n)) (split-sequence #\: ip-address) + :key (lambda (part)(if (string= part "") 0 (parse-integer part :radix 16)) ) :initial-value 0)) - (defun parse-ip (ip-address) (if (find #\. ip-address) (cons 4 (parse-ipv4 ip-address)) |