]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Skip mapping files with length 0
authorMatt Joiner <anacrolix@gmail.com>
Tue, 2 Dec 2014 01:13:08 +0000 (19:13 -0600)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 2 Dec 2014 01:13:08 +0000 (19:13 -0600)
misc.go
torrent.go

diff --git a/misc.go b/misc.go
index 6b589e2490c0606fc8283aa781a44729bc1f01c8..7e8b70fb9c220fa8f02ec917593cd756d7133636 100644 (file)
--- a/misc.go
+++ b/misc.go
@@ -125,6 +125,7 @@ func mmapTorrentData(md *metainfo.Info, location string) (mms mmap_span.MMapSpan
                fileName := filepath.Join(append([]string{location, md.Name}, miFile.Path...)...)
                err = os.MkdirAll(filepath.Dir(fileName), 0777)
                if err != nil {
+                       err = fmt.Errorf("error creating data directory %q: %s", filepath.Dir(fileName), err)
                        return
                }
                var file *os.File
@@ -145,9 +146,14 @@ func mmapTorrentData(md *metainfo.Info, location string) (mms mmap_span.MMapSpan
                                        return
                                }
                        }
+                       if miFile.Length == 0 {
+                               // Can't mmap() regions with length 0.
+                               return
+                       }
                        var mMap gommap.MMap
                        mMap, err = gommap.MapRegion(file.Fd(), 0, miFile.Length, gommap.PROT_READ|gommap.PROT_WRITE, gommap.MAP_SHARED)
                        if err != nil {
+                               err = fmt.Errorf("error mapping file %q, length %d: %s", file.Name(), miFile.Length, err)
                                return
                        }
                        if int64(len(mMap)) != miFile.Length {
index a4c002d42620b46d07815eb3dcc89ec0f13ec963..5d13d6a91326bb3cd3d53e8b4852dea21f40e01f 100644 (file)
@@ -206,6 +206,7 @@ func (t *torrent) setMetadata(md metainfo.Info, dataDir string, infoBytes []byte
        t.metadataHave = nil
        t.Data, err = mmapTorrentData(&md, dataDir)
        if err != nil {
+               err = fmt.Errorf("error mmap'ing torrent data: %s", err)
                return
        }
        t.length = t.Data.Size()