upstream nginx-0.7.31
[nginx.git] / nginx / src / os / unix / ngx_errno.c
1
2 /*
3  * Copyright (C) Igor Sysoev
4  */
5
6
7 #include <ngx_config.h>
8 #include <ngx_core.h>
9
10
11 #if (NGX_HAVE_STRERROR_R)
12
13 u_char *
14 ngx_strerror_r(int err, u_char *errstr, size_t size)
15 {
16     if (size == 0) {
17         return errstr;
18     }
19
20     errstr[0] = '\0';
21
22     strerror_r(err, (char *) errstr, size);
23
24     while (*errstr && size) {
25         errstr++;
26         size--;
27     }
28
29     return errstr;
30 }
31
32 #elif (NGX_HAVE_GNU_STRERROR_R)
33
34 /* Linux strerror_r() */
35
36 u_char *
37 ngx_strerror_r(int err, u_char *errstr, size_t size)
38 {
39     char  *str;
40
41     if (size == 0) {
42         return errstr;
43     }
44
45     errstr[0] = '\0';
46
47     str = strerror_r(err, (char *) errstr, size);
48
49     if (str != (char *) errstr) {
50         return ngx_cpystrn(errstr, (u_char *) str, size);
51     }
52
53     while (*errstr && size) {
54         errstr++;
55         size--;
56     }
57
58     return errstr;
59 }
60
61 #endif