github.com/fiatjaf/generic-ristretto@v0.0.1/z/file_default.go (about) 1 // +build !linux 2 3 /* 4 * Copyright 2020 Dgraph Labs, Inc. and Contributors 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 package z 20 21 import "fmt" 22 23 // Truncate would truncate the mmapped file to the given size. On Linux, we truncate 24 // the underlying file and then call mremap, but on other systems, we unmap first, 25 // then truncate, then re-map. 26 func (m *MmapFile) Truncate(maxSz int64) error { 27 if err := m.Sync(); err != nil { 28 return fmt.Errorf("while sync file: %s, error: %v\n", m.Fd.Name(), err) 29 } 30 if err := Munmap(m.Data); err != nil { 31 return fmt.Errorf("while munmap file: %s, error: %v\n", m.Fd.Name(), err) 32 } 33 if err := m.Fd.Truncate(maxSz); err != nil { 34 return fmt.Errorf("while truncate file: %s, error: %v\n", m.Fd.Name(), err) 35 } 36 var err error 37 m.Data, err = Mmap(m.Fd, true, maxSz) // Mmap up to max size. 38 return err 39 }