summary refs log tree commit diff
path: root/.vim/after/snippets/go.snippets
blob: 84df9a1062c485c1f45867bc0a33ab53353c3556 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
snippet memfd
	func newMemFd(data []byte) (*io.File, error) {
	  fd, err := unix.MemfdCreate("memfd", 0)
	  if err != nil {
		  return nil, err
	  }
	  if err := unix.Ftruncate(fd, int64(len(data))); err != nil {
		  return nil, err
	  }
	  var mem []byte
	  mem, err = unix.Mmap(fd, 0, len(data), unix.PROT_READ|unix.PROT_WRITE, unix.MAP_SHARED)
	  if err != nil {
		  return nil, err
	  }
	  copy(mem, data)
	  if err := unix.Munmap(mem); err != nil {
		  return nil, err
	  }
	  return os.NewFile(uintptr(fd), fmt.Sprintf("/proc/self/fd/%d", fd)), nil
	}