diff options
Diffstat (limited to 'src/ourerr.cpp')
-rw-r--r-- | src/ourerr.cpp | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/src/ourerr.cpp b/src/ourerr.cpp new file mode 100644 index 0000000..0cdec07 --- /dev/null +++ b/src/ourerr.cpp @@ -0,0 +1,142 @@ +/* + * ===================================================================================== + * + * Filename: ourerr.c + * + * Description: Error handling code from Stevens Advanced Programming in the + * UNIX Environment. Appendix B page 682 + * + * Version: 1.0 + * Created: 06/02/2014 10:50:05 AM + * Revision: none + * Compiler: gcc + * + * Author: Martin Miller (), miller7@illinois.edu + * Organization: + * + * ===================================================================================== + */ + +#include <errno.h> +#include <stdarg.h> +#include "ourhdr.hpp" +#include "ourerr.hpp" +static void err_doit(int, const char *, va_list); +char *pname = NULL; + + +/* + * === FUNCTION ====================================================================== + * Name: err_ret + * Description: Nonfatal error related to a system call. Print a message and + * return. + * ===================================================================================== + */ + void +err_ret ( const char *fmt, ... ) +{ + va_list ap; + va_start(ap,fmt); + err_doit(1, fmt, ap); + va_end(ap); + return; +} /* ----- end of function err_ret ----- */ + +/* + * === FUNCTION ====================================================================== + * Name: err_sys + * Description: Fatal error related to a system call. Print a message and + * terminate. + * ===================================================================================== + */ + void +err_sys ( const char *fmt, ... ) +{ + va_list ap; + + va_start(ap,fmt); + err_doit(1, fmt, ap); + va_end(ap); + exit(EXIT_FAILURE); +} /* ----- end of function err_sys ----- */ + +/* + * === FUNCTION ====================================================================== + * Name: err_dump + * Description: Fatal error related to a system call. Print a message, dump + * core, and terminate. + * ===================================================================================== + */ + void +err_dump ( const char *fmt, ... ) +{ + va_list ap; + + va_start(ap,fmt); + err_doit(1, fmt, ap); + va_end(ap); + abort(); + exit(EXIT_FAILURE); + return; +} /* ----- end of function err_dump ----- */ + +/* + * === FUNCTION ====================================================================== + * Name: err_msg + * Description: Nonfatal error related to a system call. Print a message and + * return. + * ===================================================================================== + */ + void +err_msg ( const char *fmt, ... ) +{ + va_list ap; + + va_start(ap,fmt); + err_doit(0, fmt, ap); + va_end(ap); + + return; +} /* ----- end of function err_msg ----- */ + +/* + * === FUNCTION ====================================================================== + * Name: err_quit + * Description: + * ===================================================================================== + */ + void +err_quit ( const char *fmt, ... ) +{ + va_list ap; + + va_start(ap,fmt); + err_doit(0, fmt, ap); + va_end(ap); + + exit(EXIT_FAILURE); +} /* ----- end of function err_quit ----- */ +/* + * === FUNCTION ====================================================================== + * Name: err_doit + * Description: Print a message and return to caller. Caller specifies + * "errnoflag" + * ===================================================================================== + */ + static void +err_doit ( int errnoflag, const char *fmt, va_list ap ) +{ + int errno_save; + char buf[ERRMAXLINE]; + + errno_save = errno; + vsprintf( buf, fmt, ap ); + if( errnoflag ) + sprintf( buf+strlen(buf), ": %s", strerror(errno_save)); + strcat(buf, "\n"); + fflush(stdout); + fputs(buf, stderr); + fflush(NULL); + + return; +} /* ----- end of function err_doit ----- */ |