file_default.go 872 B

1234567891011121314151617181920212223242526272829
  1. //go:build !linux
  2. // +build !linux
  3. /*
  4. * SPDX-FileCopyrightText: © Hypermode Inc. <hello@hypermode.com>
  5. * SPDX-License-Identifier: Apache-2.0
  6. */
  7. package z
  8. import "fmt"
  9. // Truncate would truncate the mmapped file to the given size. On Linux, we truncate
  10. // the underlying file and then call mremap, but on other systems, we unmap first,
  11. // then truncate, then re-map.
  12. func (m *MmapFile) Truncate(maxSz int64) error {
  13. if err := m.Sync(); err != nil {
  14. return fmt.Errorf("while sync file: %s, error: %v\n", m.Fd.Name(), err)
  15. }
  16. if err := Munmap(m.Data); err != nil {
  17. return fmt.Errorf("while munmap file: %s, error: %v\n", m.Fd.Name(), err)
  18. }
  19. if err := m.Fd.Truncate(maxSz); err != nil {
  20. return fmt.Errorf("while truncate file: %s, error: %v\n", m.Fd.Name(), err)
  21. }
  22. var err error
  23. m.Data, err = Mmap(m.Fd, true, maxSz) // Mmap up to max size.
  24. return err
  25. }