From 792feae8f96272b37c2102917ccfc63371536153 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Mon, 4 Apr 2016 16:23:05 +1000 Subject: [PATCH] iplist: Add helper to mmap in a packed blocklist --- iplist/packed.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/iplist/packed.go b/iplist/packed.go index e6ab41ad..2282b75e 100644 --- a/iplist/packed.go +++ b/iplist/packed.go @@ -4,6 +4,9 @@ import ( "encoding/binary" "io" "net" + "os" + + "github.com/edsrzf/mmap-go" ) // The packed format is an 8 byte integer of the number of ranges. Then 20 @@ -110,3 +113,21 @@ func (me PackedIPList) Lookup(ip net.IP) (r Range, ok bool) { } return lookup(me.getFirst, me.getRange, me.len(), ip4) } + +func MMapPacked(filename string) (ret Ranger, err error) { + f, err := os.Open(filename) + if os.IsNotExist(err) { + err = nil + return + } + if err != nil { + return + } + defer f.Close() + mm, err := mmap.Map(f, mmap.RDONLY, 0) + if err != nil { + return + } + ret = NewFromPacked(mm) + return +} -- 2.48.1