// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef NET_BASE_APPLE_GUARDED_FD_H_
#define NET_BASE_APPLE_GUARDED_FD_H_
#include <stdint.h>
// "Guarded" file descriptors are a macOS SPI allowing a guard value to be
// assigned to a file descriptor, so as to prevent unwanted interference with
// its operation.
//
// Declarations from
// https://github.com/apple-oss-distributions/xnu/blob/rel/xnu-10002/bsd/sys/guarded.h
extern "C" {
using guardid_t = uint64_t;
const unsigned int GUARD_CLOSE = 1u << 0;
const unsigned int GUARD_DUP = 1u << 1;
int guarded_close_np(int fd, // in: file descriptor
const guardid_t* guard); // in: current guard value
int change_fdguard_np(int fd, // in: file descriptor
const guardid_t* guard, // in: current guard value
unsigned int guardflags, // in: current guard flags
const guardid_t* nguard, // in: new guard value
unsigned int nguardflags, // in: new guard flags
int* fdflagsp); // in/out: fd flags (fcntl:F_SETFD)
} // extern "C"
#endif // NET_BASE_APPLE_GUARDED_FD_H_