diff options
Diffstat (limited to 'include/treebnf/treebnf.h')
-rw-r--r-- | include/treebnf/treebnf.h | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/include/treebnf/treebnf.h b/include/treebnf/treebnf.h new file mode 100644 index 0000000..c10f115 --- /dev/null +++ b/include/treebnf/treebnf.h @@ -0,0 +1,142 @@ +#ifndef TREEBNF_H +#define TREEBNF_H + +#include <fcntl.h> +#include <stdint.h> +#include <stddef.h> + +#include "treebnf_api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* pre-alpha */ +#ifndef TBNF_APP +#ifndef TBNF_PRE_ALPHA +#error libtreebnf: pre-alpha: ABI is not final! +#error to use the library, please pass -DTBNF_PRE_ALPHA to the compiler. +#endif +#endif + +/* status codes */ +#define TBNF_OK 0x00 +#define TBNF_USAGE 0x01 +#define TBNF_ERROR 0x02 + +/* driver flags */ +#define TBNF_DRIVER_XFLAG(x) ((uint64_t)(x) << 32) + +#define TBNF_DRIVER_VERBOSITY_NONE 0x0000 +#define TBNF_DRIVER_VERBOSITY_ERRORS 0x0001 +#define TBNF_DRIVER_VERBOSITY_STATUS 0x0002 +#define TBNF_DRIVER_VERBOSITY_USAGE 0x0004 +#define TBNF_DRIVER_CLONE_VECTOR 0x0008 + +#define TBNF_DRIVER_VERSION 0x0010 + +#define TBNF_DRIVER_ANNOTATE_ALWAYS 0x10000000 +#define TBNF_DRIVER_ANNOTATE_NEVER 0x20000000 +#define TBNF_DRIVER_ANNOTATE_FULL 0x40000000 + +/* error flags */ +#define TBNF_ERROR_TOP_LEVEL 0x0001 +#define TBNF_ERROR_NESTED 0x0002 +#define TBNF_ERROR_CHILD 0x0004 +#define TBNF_ERROR_CUSTOM 0x0008 + +enum tbnf_custom_error { + TBNF_ERR_FLOW_ERROR, + TBNF_ERR_NULL_CONTEXT, + TBNF_ERR_IMAGE_SIZE_ZERO, +}; + +struct tbnf_raw_input { + void * map_addr; + size_t map_size; +}; + +struct tbnf_source_version { + int major; + int minor; + int revision; + const char * commit; +}; + +struct tbnf_fd_ctx { + int fdin; + int fdout; + int fderr; + int fdlog; + int fdcwd; + int fddst; +}; + +struct tbnf_error_info { + const struct tbnf_driver_ctx * edctx; + int esyscode; + int elibcode; + const char * efunction; + int eline; + unsigned eflags; + void * eany; +}; + +struct tbnf_common_ctx { + uint64_t drvflags; + uint64_t actflags; + uint64_t fmtflags; +}; + +struct tbnf_driver_ctx { + const char * program; + const char * module; + const char ** units; + const struct tbnf_common_ctx * cctx; + struct tbnf_error_info ** errv; + void * any; +}; + +struct tbnf_unit_ctx { + const char * const * path; + const struct tbnf_raw_input * map; + void * any; +}; + +/* driver api */ +tbnf_api int tbnf_lib_get_driver_ctx (char ** argv, char ** envp, uint64_t flags, + const struct tbnf_fd_ctx *, + struct tbnf_driver_ctx **); + +tbnf_api void tbnf_lib_free_driver_ctx (struct tbnf_driver_ctx *); + +tbnf_api int tbnf_lib_get_unit_ctx (const struct tbnf_driver_ctx *, const char * path, + struct tbnf_unit_ctx **); + +tbnf_api void tbnf_lib_free_unit_ctx (struct tbnf_unit_ctx *); + +tbnf_api int tbnf_lib_get_driver_fdctx (const struct tbnf_driver_ctx *, struct tbnf_fd_ctx *); + +tbnf_api int tbnf_lib_set_driver_fdctx (struct tbnf_driver_ctx *, const struct tbnf_fd_ctx *); + +tbnf_api int tbnf_lib_map_raw_input (const struct tbnf_driver_ctx *, + int fd, const char * path, int prot, + struct tbnf_raw_input *); + +tbnf_api int tbnf_lib_unmap_raw_input (struct tbnf_raw_input *); + +/* utility api */ +tbnf_api int tbnf_main (char **, char **, + const struct tbnf_fd_ctx *); + +tbnf_api int tbnf_output_error_vector (const struct tbnf_driver_ctx *); +tbnf_api int tbnf_output_error_record (const struct tbnf_driver_ctx *, const struct tbnf_error_info *); + +/* package info */ +tbnf_api const struct tbnf_source_version * tbnf_api_source_version(void); + +#ifdef __cplusplus +} +#endif + +#endif |