Annotation of embedaddon/nginx/src/os/unix/ngx_errno.c, revision 1.1.1.1
1.1 misho 1:
2: /*
3: * Copyright (C) Igor Sysoev
4: * Copyright (C) Nginx, Inc.
5: */
6:
7:
8: #include <ngx_config.h>
9: #include <ngx_core.h>
10:
11:
12: /*
13: * The strerror() messages are copied because:
14: *
15: * 1) strerror() and strerror_r() functions are not Async-Signal-Safe,
16: * therefore, they cannot be used in signal handlers;
17: *
18: * 2) a direct sys_errlist[] array may be used instead of these functions,
19: * but Linux linker warns about its usage:
20: *
21: * warning: `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead
22: * warning: `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead
23: *
24: * causing false bug reports.
25: */
26:
27:
28: static ngx_str_t *ngx_sys_errlist;
29: static ngx_str_t ngx_unknown_error = ngx_string("Unknown error");
30:
31:
32: u_char *
33: ngx_strerror(ngx_err_t err, u_char *errstr, size_t size)
34: {
35: ngx_str_t *msg;
36:
37: msg = ((ngx_uint_t) err < NGX_SYS_NERR) ? &ngx_sys_errlist[err]:
38: &ngx_unknown_error;
39: size = ngx_min(size, msg->len);
40:
41: return ngx_cpymem(errstr, msg->data, size);
42: }
43:
44:
45: ngx_int_t
46: ngx_strerror_init(void)
47: {
48: char *msg;
49: u_char *p;
50: size_t len;
51: ngx_err_t err;
52:
53: /*
54: * ngx_strerror() is not ready to work at this stage, therefore,
55: * malloc() is used and possible errors are logged using strerror().
56: */
57:
58: len = NGX_SYS_NERR * sizeof(ngx_str_t);
59:
60: ngx_sys_errlist = malloc(len);
61: if (ngx_sys_errlist == NULL) {
62: goto failed;
63: }
64:
65: for (err = 0; err < NGX_SYS_NERR; err++) {
66: msg = strerror(err);
67: len = ngx_strlen(msg);
68:
69: p = malloc(len);
70: if (p == NULL) {
71: goto failed;
72: }
73:
74: ngx_memcpy(p, msg, len);
75: ngx_sys_errlist[err].len = len;
76: ngx_sys_errlist[err].data = p;
77: }
78:
79: return NGX_OK;
80:
81: failed:
82:
83: err = errno;
84: ngx_log_stderr(0, "malloc(%uz) failed (%d: %s)", len, err, strerror(err));
85:
86: return NGX_ERROR;
87: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>