The diewarn.h header

#include "/package/prog/prjlibs/include/diewarn.h"
  /* logic errors */
  DIE1X(100, "something bad happened");
  DIE2X(100, "something bad happened: ", "here's what");
  DIE3X(100, "one, ", "two, ", "three");
  DIE4X(100, "one, ", "two, ", "three, ", "four");
  DIE_USAGE(" expected arguments");
  DIE_MALFORMED("some-parameter", "bad value");
  /* operating system errors */
  WARN1(operation, "arg");
  WARN2(operation, "arg0", "arg1");
  DIE1(operation, "arg");
  DIE2(operation, "arg0", "arg1");

The diewarn.h C header file defines macros to easily produce uniform error messages. These macros expand to calls to strerr_* and error_temp functions; they should work with any existing implementation, although I have only tested with the implementation in skalibs.

0-argument operations: alloc, fork, wait, dup, dup2, pipe, setuid, setgid, setgroups, tcgetattr, tcsetattr, tcsetpgrp, setpgid, setsid, sigemptyset, sigaddset, sigdelset, sigaction, sigprocmask, sigsuspend, setitimer, tioccons, vt_act, vt_qry, vt_getm, vt_setm, gethostname, buffer_prefeed.

1-argument operations: mkdir, chdir, chroot, chown, stat, exec, unlink, utimes, open, close, read, write, getfl, setfl, mmap, lseek, fsync.

2-argument operations: link, rename.