language = "C"
header = """
// SPDX-License-Identifier: MPL-2.0 OR LGPL-3.0-or-later
/*
* libpathrs: safe path resolution on Linux
* Copyright (C) 2019-2025 SUSE LLC
* Copyright (C) 2026 Aleksa Sarai <cyphar@cyphar.com>
*
* == MPL-2.0 ==
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* Alternatively, this Source Code Form may also (at your option) be used
* under the terms of the GNU Lesser General Public License Version 3, as
* described below:
*
* == LGPL-3.0-or-later ==
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#ifdef __CBINDGEN_ALIGNED
#undef __CBINDGEN_ALIGNED
#endif
#define __CBINDGEN_ALIGNED(n) __attribute__((aligned(n)))
"""
trailer = """
#ifdef __CBINDGEN_ALIGNED
#undef __CBINDGEN_ALIGNED
#endif
"""
include_guard = "LIBPATHRS_H"
autogen_warning = """
/*
* WARNING: This file was auto-generated by rust-cbindgen. Don't modify it.
* Instead, re-generate it with:
* % cbindgen -c cbindgen.toml -o include/pathrs.h
*/
"""
sys_includes = [
"sys/types.h",
]
after_includes = """
/*
* Returns whether the given numerical value is a libpathrs error (which can be
* passed to pathrs_errorinfo()). Users are recommended to use this instead of
* a bare `<0` comparison because some functions may return a negative number
* even in a success condition.
*/
#define IS_PATHRS_ERR(ret) ((ret) < __PATHRS_MAX_ERR_VALUE)
/*
* Used to construct pathrs_proc_base_t values for a PID (or TID). Passing
* PATHRS_PROC_PID(pid) to pathrs_proc_*() as pathrs_proc_base_t will cause
* libpathrs to use /proc/$pid as the base of the operation.
*
* This is essentially functionally equivalent to prefixing "$pid/" to the
* subpath argument and using PATHRS_PROC_ROOT.
*
* Note that this operation is inherently racy -- the process referenced by this
* PID may have died and the PID recycled with a different process. In
* principle, this means that it is only really safe to use this with:
*
* - PID 1 (the init process), as that PID cannot ever get recycled.
* - Your current PID (though you should just use PATHRS_PROC_SELF).
* - Your current TID (though you should just use PATHRS_PROC_THREAD_SELF),
* or _possibly_ other TIDs in your thread-group if you are absolutely sure
* they have not been reaped (typically with pthread_join(3), though there
* are other ways).
* - PIDs of child processes (as long as you are sure that no other part of
* your program incorrectly catches or ignores SIGCHLD, and that you do it
* *before* you call wait(2) or any equivalent method that could reap
* zombies).
*
* Outside of those specific uses, users should probably avoid using this.
*/
#define PATHRS_PROC_PID(n) (__PATHRS_PROC_TYPE_PID | (n))
/*
* A sentinel value to tell `pathrs_proc_*` methods to use the default procfs
* root handle (which may be globally cached).
*/
#define PATHRS_PROC_DEFAULT_ROOTFD -9 /* (-EBADF) */
"""
line_length = 80
tab_width = 4
usize_is_size_t = true
style = "type"
[layout]
aligned_n = "__CBINDGEN_ALIGNED"
[export]
exclude = [
"CBorrowedFd",
"CReturn",
"RESOLVE_NO_XDEV",
"RESOLVE_NO_MAGICLINKS",
"RESOLVE_NO_SYMLINKS",
"RESOLVE_BENEATH",
"RESOLVE_IN_ROOT",
]
[export.rename]
"CProcfsBase" = "pathrs_proc_base_t"
"ProcfsOpenFlags" = "uint64_t"
"ProcfsOpenHow" = "pathrs_procfs_open_how"
"CError" = "pathrs_error_t"
"RawFd" = "int"
"BorrowedFd" = "int"
"CBorrowedFd" = "int"