(f *os.File)
| 12 | ) |
| 13 | |
| 14 | func mmapFile(f *os.File) mmapData { |
| 15 | st, err := f.Stat() |
| 16 | if err != nil { |
| 17 | log.Fatal(err) |
| 18 | } |
| 19 | size := st.Size() |
| 20 | if int64(int(size+4095)) != size+4095 { |
| 21 | log.Fatalf("%s: too large for mmap", f.Name()) |
| 22 | } |
| 23 | if size == 0 { |
| 24 | return mmapData{f, nil} |
| 25 | } |
| 26 | h, err := syscall.CreateFileMapping(syscall.Handle(f.Fd()), nil, syscall.PAGE_READONLY, uint32(size>>32), uint32(size), nil) |
| 27 | if err != nil { |
| 28 | log.Fatalf("CreateFileMapping %s: %v", f.Name(), err) |
| 29 | } |
| 30 | |
| 31 | addr, err := syscall.MapViewOfFile(h, syscall.FILE_MAP_READ, 0, 0, 0) |
| 32 | if err != nil { |
| 33 | log.Fatalf("MapViewOfFile %s: %v", f.Name(), err) |
| 34 | } |
| 35 | data := (*[1 << 30]byte)(unsafe.Pointer(addr)) |
| 36 | return mmapData{f, data[:size]} |
| 37 | } |
nothing calls this directly
no test coverage detected
searching dependent graphs…