#ifndef IO_BACKEND_H #define IO_BACKEND_H #include #include "utils/args/args.h" // Error codes #define IOB_ERROR_GENERIC -1 #define IOB_ERROR_BAD_ARG -2 #define IOB_ERROR_MODULE_NOT_INITIALIZED -3 #define IOB_ERROR_MODULE_ALREADY_INITIALIZED -4 #define IOB_ERROR_CANNOT_OPEN_FILE -5 enum iob_mode { IOB_MODE_NULL = 0, IOB_MODE_STDIN, IOB_MODE_SCRIPT, IOB_MODE_CMD }; enum iob_state { IOB_STATE_NOT_INITIALIZED, IOB_STATE_READY, IOB_STATE_FINISHED, IOB_STATE_ERROR }; /* @struct iob_context * @var mode * @var args contains * the script name when mode is set to IOB_MODE_SCRIPT, * the command to execute when mode is set to IOB_MODE_CMD */ struct iob_context { enum iob_mode mode; char *args; }; /** * @brief Converts struct arg_options to iob_context * * @param args The arguments options struct * @param ctx The IO Backend context struct to populate * @return int 0 on success, negative value on error */ int iob_config_from_args(struct args_options *args, struct iob_context *ctx); /* * @brief Initializes the IO Backend module * * @param context contains the input mode and the args * @return 0 on success, the corresponding error code otherwise */ int iob_init(struct iob_context *context); /* @brief Closes the opened buffers and the module gracefully */ void iob_close(void); /* @brief reads at most one line of the input and stores it into *stream * * @param stream is a pointer that will be set to a string to parse * @return the number of read characters if positive, * zero if finished (reached EOF), * the error code otherwise */ ssize_t stream_read(char **stream); #endif /* ! IO_BACKEND_H */