#ifndef SFRT_H #define SFRT_H #include #include #include "sofort_api.h" #ifdef __cplusplus extern "C" { #endif /* pre-alpha */ #ifndef SFRT_APP #ifndef SFRT_PRE_ALPHA #error libsofort: pre-alpha: ABI is not final! #error to use the library, please pass -DSFRT_PRE_ALPHA to the compiler. #endif #endif /* status codes */ #define SFRT_OK 0x00 #define SFRT_USAGE 0x01 #define SFRT_BAD_OPT 0x02 #define SFRT_BAD_OPT_VAL 0x03 #define SFRT_IO_ERROR 0xA0 #define SFRT_MAP_ERROR 0xA1 /* driver flags */ #define SFRT_DRIVER_VERBOSITY_NONE 0x0000 #define SFRT_DRIVER_VERBOSITY_ERRORS 0x0001 #define SFRT_DRIVER_VERBOSITY_STATUS 0x0002 #define SFRT_DRIVER_VERBOSITY_USAGE 0x0004 #define SFRT_DRIVER_CLONE_VECTOR 0x0008 #define SFRT_DRIVER_VERSION 0x0010 #define SFRT_DRIVER_DRY_RUN 0x0020 /* unit action flags */ #define SFRT_OUTPUT_NAME 0x0001 /* dummy */ #define SFRT_OUTPUT_ADDRESS 0x0002 /* dummy */ struct sfrt_input { void * addr; size_t size; }; struct sfrt_common_ctx { uint64_t drvflags; uint64_t actflags; uint64_t fmtflags; const char * anystring; /* dummy */ }; struct sfrt_driver_ctx { const char ** units; const char * program; const char * module; const struct sfrt_common_ctx * cctx; void * any; int status; int nerrors; }; struct sfrt_unit_ctx { const char * const * path; const struct sfrt_input * map; const struct sfrt_common_ctx * cctx; void * any; int status; int nerrors; }; /* driver api */ sfrt_api int sfrt_get_driver_ctx (const char ** argv, const char ** envp, uint32_t flags, struct sfrt_driver_ctx **); sfrt_api int sfrt_create_driver_ctx (const struct sfrt_common_ctx *, struct sfrt_driver_ctx **); sfrt_api void sfrt_free_driver_ctx (struct sfrt_driver_ctx *); sfrt_api int sfrt_get_unit_ctx (const struct sfrt_driver_ctx *, const char * path, struct sfrt_unit_ctx **); sfrt_api void sfrt_free_unit_ctx (struct sfrt_unit_ctx *); sfrt_api int sfrt_map_input (int fd, const char * path, int prot, struct sfrt_input *); sfrt_api int sfrt_unmap_input (struct sfrt_input *); /* utility api */ sfrt_api int sfrt_output_dummy (const struct sfrt_common_ctx *, FILE *); /* dummy */ sfrt_api int sfrt_output_name (const struct sfrt_unit_ctx *, FILE *); /* dummy */ sfrt_api int sfrt_output_address (const struct sfrt_unit_ctx *, FILE *); /* dummy */ #ifdef __cplusplus } #endif #endif