initial import
from http://www.informit.com/store/programming-with-posix-threads-9780201633924
This commit is contained in:
49
errors.h
Normal file
49
errors.h
Normal file
@@ -0,0 +1,49 @@
|
||||
#ifndef __errors_h
|
||||
#define __errors_h
|
||||
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/*
|
||||
* Define a macro that can be used for diagnostic output from
|
||||
* examples. When compiled -DDEBUG, it results in calling printf
|
||||
* with the specified argument list. When DEBUG is not defined, it
|
||||
* expands to nothing.
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
# define DPRINTF(arg) printf arg
|
||||
#else
|
||||
# define DPRINTF(arg)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* NOTE: the "do {" ... "} while (0);" bracketing around the macros
|
||||
* allows the err_abort and errno_abort macros to be used as if they
|
||||
* were function calls, even in contexts where a trailing ";" would
|
||||
* generate a null statement. For example,
|
||||
*
|
||||
* if (status != 0)
|
||||
* err_abort (status, "message");
|
||||
* else
|
||||
* return status;
|
||||
*
|
||||
* will not compile if err_abort is a macro ending with "}", because
|
||||
* C does not expect a ";" to follow the "}". Because C does expect
|
||||
* a ";" following the ")" in the do...while construct, err_abort and
|
||||
* errno_abort can be used as if they were function calls.
|
||||
*/
|
||||
#define err_abort(code,text) do { \
|
||||
fprintf (stderr, "%s at \"%s\":%d: %s\n", \
|
||||
text, __FILE__, __LINE__, strerror (code)); \
|
||||
abort (); \
|
||||
} while (0)
|
||||
#define errno_abort(text) do { \
|
||||
fprintf (stderr, "%s at \"%s\":%d: %s\n", \
|
||||
text, __FILE__, __LINE__, strerror (errno)); \
|
||||
abort (); \
|
||||
} while (0)
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user