annotate src/os/unix/ngx_errno.c @ 4448:539355d9e675 stable-1.0

Merge of r4404: Fixed sched_setaffinity(2) to correctly pass size. Second argument (cpusetsize) is size in bytes, not in bits. Previously used constant 32 resulted in reading of uninitialized memory and caused EINVAL to be returned on some Linux kernels.
author Maxim Dounin <mdounin@mdounin.ru>
date Sun, 05 Feb 2012 19:25:24 +0000
parents d3568507db51
children d620f497c50f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 305
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 305
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 305
diff changeset
4 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 305
diff changeset
5
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 305
diff changeset
6
210
00cafae0bdf1 nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 #include <ngx_config.h>
00cafae0bdf1 nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
00cafae0bdf1 nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9
00cafae0bdf1 nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
3787
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
11 /*
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
12 * The strerror() messages are copied because:
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
13 *
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
14 * 1) strerror() and strerror_r() functions are not Async-Signal-Safe,
4246
d3568507db51 Merging r4132, r4134, r4143, r4183, r4191, r4199:
Igor Sysoev <igor@sysoev.ru>
parents: 3787
diff changeset
15 * therefore, they cannot be used in signal handlers;
3787
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
16 *
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
17 * 2) a direct sys_errlist[] array may be used instead of these functions,
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
18 * but Linux linker warns about its usage:
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
19 *
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
20 * warning: `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
21 * warning: `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
22 *
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
23 * causing false bug reports.
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
24 */
210
00cafae0bdf1 nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25
00cafae0bdf1 nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26
3787
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
27 static ngx_str_t *ngx_sys_errlist;
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
28 static ngx_str_t ngx_unknown_error = ngx_string("Unknown error");
211
fd9fecc4193f nginx-0.0.1-2003-12-15-16:57:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 210
diff changeset
29
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 211
diff changeset
30
2335
3d8ab5957202 ngx_strerror_r() style and size == 0 bug fix
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
31 u_char *
3787
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
32 ngx_strerror(ngx_err_t err, u_char *errstr, size_t size)
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
33 {
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
34 ngx_str_t *msg;
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
35
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
36 msg = ((ngx_uint_t) err < NGX_SYS_NERR) ? &ngx_sys_errlist[err]:
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
37 &ngx_unknown_error;
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
38 size = ngx_min(size, msg->len);
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
39
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
40 return ngx_cpymem(errstr, msg->data, size);
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
41 }
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
42
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
43
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
44 ngx_uint_t
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
45 ngx_strerror_init(void)
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 211
diff changeset
46 {
3787
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
47 char *msg;
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
48 u_char *p;
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
49 size_t len;
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
50 ngx_err_t err;
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 211
diff changeset
51
3787
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
52 /*
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
53 * ngx_strerror() is not ready to work at this stage, therefore,
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
54 * malloc() is used and possible errors are logged using strerror().
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
55 */
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
56
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
57 len = NGX_SYS_NERR * sizeof(ngx_str_t);
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
58
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
59 ngx_sys_errlist = malloc(len);
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
60 if (ngx_sys_errlist == NULL) {
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
61 goto failed;
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 211
diff changeset
62 }
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 211
diff changeset
63
3787
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
64 for (err = 0; err < NGX_SYS_NERR; err++) {
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
65 msg = strerror(err);
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
66 len = ngx_strlen(msg);
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 211
diff changeset
67
3787
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
68 p = malloc(len);
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
69 if (p == NULL) {
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
70 goto failed;
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
71 }
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 211
diff changeset
72
3787
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
73 ngx_memcpy(p, msg, len);
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
74 ngx_sys_errlist[err].len = len;
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
75 ngx_sys_errlist[err].data = p;
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 211
diff changeset
76 }
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 211
diff changeset
77
3787
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
78 return NGX_OK;
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
79
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
80 failed:
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 211
diff changeset
81
3787
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
82 err = errno;
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
83 ngx_log_stderr(0, "malloc(%uz) failed (%d: %s)", len, err, strerror(err));
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
84
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 2335
diff changeset
85 return NGX_ERROR;
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 211
diff changeset
86 }