#include <errno.h> #include <apimagic/apimagic.h> int amgc_record_error( const struct amgc_driver_ctx *, int esyscode, int elibcode, const char * efunction, int eline, unsigned eflags, void * ectx); #define AMGC_SYSTEM_ERROR(dctx) \ amgc_record_error( \ dctx, \ errno, \ 0, \ __func__, \ __LINE__, \ AMGC_ERROR_TOP_LEVEL, \ 0) #define AMGC_BUFFER_ERROR(dctx) \ amgc_record_error( \ dctx, \ ENOBUFS, \ 0, \ __func__, \ __LINE__, \ AMGC_ERROR_TOP_LEVEL, \ 0) #define AMGC_SPAWN_ERROR(dctx) \ amgc_record_error( \ dctx, \ errno, \ 0, \ __func__, \ __LINE__, \ AMGC_ERROR_TOP_LEVEL \ | (errno ? 0 \ : AMGC_ERROR_CHILD), \ 0) #define AMGC_FILE_ERROR(dctx) \ amgc_record_error( \ dctx, \ EIO, \ 0, \ __func__, \ __LINE__, \ AMGC_ERROR_TOP_LEVEL, \ 0) #define AMGC_CUSTOM_ERROR(dctx,elibcode) \ amgc_record_error( \ dctx, \ 0, \ elibcode, \ __func__, \ __LINE__, \ AMGC_ERROR_TOP_LEVEL \ | AMGC_ERROR_CUSTOM, \ 0) #define AMGC_NESTED_ERROR(dctx) \ amgc_record_error( \ dctx, \ 0, \ 0, \ __func__, \ __LINE__, \ AMGC_ERROR_NESTED, \ 0)