hare

[hare] The Hare programming language
git clone https://git.torresjrjr.com/hare.git
Log | Files | Refs | README | LICENSE

memfd.ha (970B)


      1 // SPDX-License-Identifier: MPL-2.0
      2 // (c) Hare authors <https://harelang.org>
      3 
      4 use errors;
      5 use io;
      6 use rt;
      7 
      8 // Flags for [[memfd]].
      9 export type memfd_flag = enum uint {
     10 	NONE = 0,
     11 	// Unsets the close-on-exec flag when creating a memfd.
     12 	NOCLOEXEC = rt::MFD_CLOEXEC,
     13 	// ALlows sealing operations on this file.
     14 	ALLOW_SEALING = rt::MFD_ALLOW_SEALING,
     15 	// Create the memfd with huge pages using hugetlbfs. Linux-only.
     16 	HUGETLB = rt::MFD_HUGETLB,
     17 };
     18 
     19 // Creates a new anonyomous [[io::file]] backed by memory.
     20 //
     21 // The initial file size is zero. It can be written to normally, or the size can
     22 // be set manually with [[trunc]].
     23 //
     24 // This function is available on Linux and FreeBSD.
     25 export fn memfd(
     26 	name: str,
     27 	flags: memfd_flag = memfd_flag::NONE,
     28 ) (io::file | errors::error) = {
     29 	flags ^= memfd_flag::NOCLOEXEC;
     30 	match (rt::memfd_create(name, flags: uint)) {
     31 	case let i: int =>
     32 		return i: io::file;
     33 	case let err: rt::errno =>
     34 		return errors::errno(err);
     35 	};
     36 };