# Include "apue. H" # Include/* for definition of errno */ # Include/* Iso c variable aruments */Static void err_doit (INT, Int, const char *, va_list ); /* * 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, errno, FMT, AP ); Va_end (AP ); } /* * 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, errno, FMT, AP ); Va_end (AP ); Exit (1 ); } /* * Fatal error unrelated to a system call. * Error Code passed as explict parameter. * Print a message and terminate. */ Void Err_exit (INT error, const char * FMT ,...) { Va_list AP; Va_start (AP, FMT ); Err_doit (1, error, FMT, AP ); Va_end (AP ); Exit (1 ); } /* * 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, errno, FMT, AP ); Va_end (AP ); Abort ();/* dump core and terminate */ Exit (1);/* shouldn't get here */ } /* * Nonfatal error unrelated 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, 0, FMT, AP ); Va_end (AP ); } /* * Fatal error unrelated to a system call. * Print a message and terminate. */ Void Err_quit (const char * FMT ,...) { Va_list AP; Va_start (AP, FMT ); Err_doit (0, 0, FMT, AP ); Va_end (AP ); Exit (1 ); } /* * Print a message and return to caller. * Caller specifies "errnoflag ". */ Static void Err_doit (INT errnoflag, int error, const char * FMT, va_list AP) { Char Buf [maxline]; Vsnprintf (BUF, maxline, FMT, AP ); If (errnoflag) Snprintf (BUF + strlen (BUF), maxline-strlen (BUF), ": % s ", Strerror (error )); Strcat (BUF ,""); Fflush (stdout);/* In case stdout and stderr are the same */ Fputs (BUF, stderr ); Fflush (null);/* flushes all stdio output streams */ } |