aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--geoip/geoip.asd1
-rw-r--r--geoip/ip.lisp7
2 files changed, 7 insertions, 1 deletions
diff --git a/geoip/geoip.asd b/geoip/geoip.asd
index 53826dd..a25cb8c 100644
--- a/geoip/geoip.asd
+++ b/geoip/geoip.asd
@@ -5,6 +5,7 @@
:license "GPL-3"
:depends-on ("cffi"
"mmap"
+ "ieee-floats"
"split-sequence")
:components ((:file "ip"))
:description "Query maxminddb for ip information"
diff --git a/geoip/ip.lisp b/geoip/ip.lisp
index 7b6a23e..d97f5c2 100644
--- a/geoip/ip.lisp
+++ b/geoip/ip.lisp
@@ -172,13 +172,14 @@
(ecase type
(1 (mread-pointer db-ptr length))
(2 (mread-uft8 db-ptr length))
- (3 (cons 'double (mread-unsigned db-ptr 8)))
+ (3 (ieee-floats:decode-float64 (mread-unsigned db-ptr 8)))
(4 (bytes-from-foreign db-ptr length))
((5 6 9 10) (mread-unsigned db-ptr length))
(7 (mread-map db-ptr length))
(8 (mread-int32 db-ptr length))
(11 (mread-list db-ptr length))
(14 (< 0 length)) ; bool
+ (15 (ieee-floats:decode-float32 (mread-unsigned db-ptr 4)))
)))
(defun read-node-record (mmdb node-number bit)
@@ -243,3 +244,7 @@
(with-slots (ptr fd size) mmdb
(mmap:munmap ptr fd size)))
+(defmacro with-mmdb ((mmdb file) &body body)
+ `(mmap:with-mmap (ptr fd size ,file)
+ (let ((,mmdb (mmap->mmdb ,file ptr fd size)))
+ ,@body)))