file_default.go raw

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