wangzhengquan
2020-05-25 ff31a5b78ebe4b4348ed7fd572941b23a87414c2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include "usg_common.h"
#include <errno.h>        /* for definition of errno */
#include <stdarg.h>        /* ISO C variable aruments */
 
#define MAXLINE 4096      /* max line length */
/**************************
 * Error-handling functions
 **************************/
static void    err_doit(int, const char *, va_list);
//static void err_doit(int errno, const char *fmt, va_list ap);
 
/*void unix_error(const char *fmt, ...) [> Unix-style error <]*/
/*{*/
    /*va_list        ap;*/
 
    /*va_start(ap, fmt);*/
    /*err_doit(errno, fmt, ap);*/
    /*va_end(ap);*/
/*}*/
 
void posix_error(int code, const char *fmt, ...) /* Posix-style error */
{
    va_list        ap;
 
    va_start(ap, fmt);
    err_doit(code, fmt, ap);
    va_end(ap);
}
 
/*
 * 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(error, fmt, ap);
    va_end(ap);
    //abort();        /* dump core and terminate */
    exit(1);
}
 
 
 
/*
 * Nonfatal error unrelated to a system call.
 * Print a message and return.
 */
void err_msg(int error, const char *fmt, ...)
{
    va_list        ap;
 
    va_start(ap, fmt);
    err_doit(error, fmt, ap);
    va_end(ap);
}
 
 
/*
 * Print a message and return to caller.
 * Caller specifies "errnoflag".
 */
static void err_doit(int error, const char *fmt, va_list ap)
{
    char    buf[MAXLINE];
 
    vsnprintf(buf, MAXLINE-1, fmt, ap);
    snprintf(buf+strlen(buf), MAXLINE-strlen(buf)-1, ": %s", strerror(error));
    strcat(buf, "\n");
    fflush(stdout);        /* in case stdout and stderr are the same */
    fputs(buf, stderr);
    fflush(NULL);        /* flushes all stdio output streams */
}