]> Sergey Matveev's repositories - btrtrc.git/commitdiff
iplist: Add helper to mmap in a packed blocklist
authorMatt Joiner <anacrolix@gmail.com>
Mon, 4 Apr 2016 06:23:05 +0000 (16:23 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Mon, 4 Apr 2016 06:23:05 +0000 (16:23 +1000)
iplist/packed.go

index e6ab41ad23506afb95a9b270df6693e465a30753..2282b75ed9d77e72d9ac7248f1abc036b738e335 100644 (file)
@@ -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
+}