|
|
@ -25,16 +25,23 @@ type MmapFile struct { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func OpenMmapFile(path string) (*MmapFile, error) { |
|
|
|
func OpenMmapFile(path string) (*MmapFile, error) { |
|
|
|
|
|
|
|
return OpenMmapFileWithSize(path, 0) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func OpenMmapFileWithSize(path string, size int) (*MmapFile, error) { |
|
|
|
f, err := os.Open(path) |
|
|
|
f, err := os.Open(path) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
return nil, errors.Wrap(err, "try lock file") |
|
|
|
return nil, errors.Wrap(err, "try lock file") |
|
|
|
} |
|
|
|
} |
|
|
|
info, err := f.Stat() |
|
|
|
if size <= 0 { |
|
|
|
if err != nil { |
|
|
|
info, err := f.Stat() |
|
|
|
return nil, errors.Wrap(err, "stat") |
|
|
|
if err != nil { |
|
|
|
|
|
|
|
return nil, errors.Wrap(err, "stat") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
size = int(info.Size()) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
b, err := mmap(f, int(info.Size())) |
|
|
|
b, err := mmap(f, size) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
return nil, errors.Wrap(err, "mmap") |
|
|
|
return nil, errors.Wrap(err, "mmap") |
|
|
|
} |
|
|
|
} |
|
|
|