pathrs 0.0.2

C-friendly API to make path resolution safer on Linux.
Documentation
# libpathrs: safe path resolution on Linux
# Copyright (C) 2019, 2020 Aleksa Sarai <cyphar@cyphar.com>
# Copyright (C) 2019, 2020 SUSE LLC
#
# 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/>.

language = "C"

header = """
/*
 * libpathrs: safe path resolution on Linux
 * Copyright (C) 2019, 2020 Aleksa Sarai <cyphar@cyphar.com>
 * Copyright (C) 2019, 2020 SUSE LLC
 *
 * 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
 */
"""

# Needed for dev_t.
sys_includes = ["sys/types.h"]

# Basic kernel-style formatting (can't use tabs so just use 4-spaces).
line_length = 80
tab_width = 4
style = "type"

[layout]
aligned_n = "__CBINDGEN_ALIGNED"

[export]
exclude = [
	# Useless for C users.
	"PATH_SEPARATOR",
	# Don't export the RESOLVE_* definitions.
	"RESOLVE_NO_XDEV",
	"RESOLVE_NO_MAGICLINKS",
	"RESOLVE_NO_SYMLINKS",
	"RESOLVE_BENEATH",
	"RESOLVE_IN_ROOT",
	# Nor the UPGRADE_* definitions.
	"UPGRADE_NOWRITE",
	"UPGRADE_NOREAD",
]

# These types have no obvious usage within the FFI wrappers (they are always
# passed as void *), so we need to force cbindgen to include them.
include = [
	"CGlobalConfig",
	"CRootConfig",
]

# Clean up the naming of structs.
[export.rename]
"CResolver" = "pathrs_resolver_t"
"CPointerType" = "pathrs_type_t"

# libc
"RawFd" = "int"

# C*Conifg
"CGlobalConfig" = "pathrs_config_global_t"
"CRootConfig" = "pathrs_config_root_t"

# CPointer<Root>
"CRoot" = "pathrs_root_t"
"CPointer_Root" = "__pathrs_root_t"

# CPointer<Handle>
"CHandle" = "pathrs_handle_t"
"CPointer_Handle" = "__pathrs_handle_t"

# CError and family.
"CBacktraceEntry" = "__pathrs_backtrace_entry_t"
"CVec_CBacktraceEntry" = "__pathrs_backtrace_t"
"CBacktrace" = "pathrs_backtrace_t"
"CError" = "pathrs_error_t"