aboutsummaryrefslogtreecommitdiffstats
path: root/geoip
diff options
context:
space:
mode:
Diffstat (limited to 'geoip')
-rw-r--r--geoip/ip.lisp12
1 files changed, 11 insertions, 1 deletions
diff --git a/geoip/ip.lisp b/geoip/ip.lisp
index 95d2ae2..8db396d 100644
--- a/geoip/ip.lisp
+++ b/geoip/ip.lisp
@@ -142,6 +142,12 @@
(incf-pointer db-ptr size)
r)))
+(defun mread-int32 (db-ptr length)
+ (let ((uval (mread-unsigned db-ptr length)))
+ (if (and (= length 4) (logbitp 31 uval))
+ (- uval #.(expt 2 32))
+ uval)))
+
(5am:test reader
(with-foreign-array (a #(0 0 1 23 126 195 159 195 156) '(:array :uint8 9))
(let ((r (make-db-reader :db-ptr a)))
@@ -183,9 +189,13 @@
(destructuring-bind (type length) (mread-datafield-metadata db-ptr)
(ecase type
(2 (mread-uft8 db-ptr length))
+ (4 (bytes-from-foreign db-ptr length))
((5 6 9 10) (mread-unsigned db-ptr length))
(7 (mread-map db-ptr length))
- (11 (mread-list db-ptr length)))))
+ (8 (mread-int32 db-ptr length))
+ (11 (mread-list db-ptr length))
+ (14 (< 0 length)) ; bool
+ )))
(defvar *refdb*
(cl-maxminddb:make-mmdb "GeoLite2-Country.mmdb"))