From: Matt Joiner Date: Mon, 4 Apr 2016 06:23:05 +0000 (+1000) Subject: iplist: Add helper to mmap in a packed blocklist X-Git-Tag: v1.0.0~783 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=792feae8f96272b37c2102917ccfc63371536153;p=btrtrc.git iplist: Add helper to mmap in a packed blocklist --- 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 +}