Mercurial > hg > nginx-vendor-0-6
comparison src/os/unix/ngx_linux_init.c @ 222:dd6c66b5b0e2 NGINX_0_3_58
nginx 0.3.58
*) Feature: the "error_page" directive supports the variables.
*) Change: now the procfs interface instead of sysctl is used on Linux.
*) Change: now the "Content-Type" header line is inherited from first
response when the "X-Accel-Redirect" was used.
*) Bugfix: the "error_page" directive did not redirect the 413 error.
*) Bugfix: the trailing "?" did not remove old arguments if no new
arguments were added to a rewritten URI.
*) Bugfix: nginx could not run on 64-bit FreeBSD 7.0-CURRENT.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 14 Aug 2006 00:00:00 +0400 |
parents | e916a291e9aa |
children | 29a6403156b0 |
comparison
equal
deleted
inserted
replaced
221:52ac9a089ea5 | 222:dd6c66b5b0e2 |
---|---|
6 | 6 |
7 #include <ngx_config.h> | 7 #include <ngx_config.h> |
8 #include <ngx_core.h> | 8 #include <ngx_core.h> |
9 | 9 |
10 | 10 |
11 char ngx_linux_kern_ostype[50]; | 11 static ngx_int_t ngx_linux_procfs(char *name, char *buf, size_t len, |
12 char ngx_linux_kern_osrelease[20]; | 12 ngx_log_t *log); |
13 | 13 |
14 int ngx_linux_rtsig_max; | 14 |
15 char ngx_linux_kern_ostype[50]; | |
16 char ngx_linux_kern_osrelease[20]; | |
17 | |
18 int ngx_linux_rtsig_max; | |
15 | 19 |
16 | 20 |
17 static ngx_os_io_t ngx_linux_io = { | 21 static ngx_os_io_t ngx_linux_io = { |
18 ngx_unix_recv, | 22 ngx_unix_recv, |
19 ngx_readv_chain, | 23 ngx_readv_chain, |
33 { | 37 { |
34 int name[2]; | 38 int name[2]; |
35 size_t len; | 39 size_t len; |
36 ngx_err_t err; | 40 ngx_err_t err; |
37 | 41 |
38 name[0] = CTL_KERN; | 42 if (ngx_linux_procfs("/proc/sys/kernel/ostype", |
39 name[1] = KERN_OSTYPE; | 43 ngx_linux_kern_ostype, |
40 len = sizeof(ngx_linux_kern_ostype); | 44 sizeof(ngx_linux_kern_ostype), log) |
41 | 45 == -1) |
42 if (sysctl(name, 2, ngx_linux_kern_ostype, &len, NULL, 0) == -1) { | 46 { |
43 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, | |
44 "sysctl(KERN_OSTYPE) failed"); | |
45 return NGX_ERROR; | 47 return NGX_ERROR; |
46 } | 48 } |
47 | 49 |
48 /* name[0] = CTL_KERN; */ | 50 if (ngx_linux_procfs("/proc/sys/kernel/osrelease", |
49 name[1] = KERN_OSRELEASE; | 51 ngx_linux_kern_osrelease, |
50 len = sizeof(ngx_linux_kern_osrelease); | 52 sizeof(ngx_linux_kern_osrelease), log) |
51 | 53 == -1) |
52 if (sysctl(name, 2, ngx_linux_kern_osrelease, &len, NULL, 0) == -1) { | 54 { |
53 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, | |
54 "sysctl(KERN_OSRELEASE) failed"); | |
55 return NGX_ERROR; | 55 return NGX_ERROR; |
56 } | 56 } |
57 | 57 |
58 | 58 |
59 /* name[0] = CTL_KERN; */ | 59 name[0] = CTL_KERN; |
60 name[1] = KERN_RTSIGMAX; | 60 name[1] = KERN_RTSIGMAX; |
61 len = sizeof(ngx_linux_rtsig_max); | 61 len = sizeof(ngx_linux_rtsig_max); |
62 | 62 |
63 if (sysctl(name, 2, &ngx_linux_rtsig_max, &len, NULL, 0) == -1) { | 63 if (sysctl(name, 2, &ngx_linux_rtsig_max, &len, NULL, 0) == -1) { |
64 err = ngx_errno; | 64 err = ngx_errno; |
65 | 65 |
66 if (err != NGX_ENOTDIR) { | 66 if (err != NGX_ENOTDIR && err != NGX_ENOSYS) { |
67 ngx_log_error(NGX_LOG_ALERT, log, err, | 67 ngx_log_error(NGX_LOG_ALERT, log, err, |
68 "sysctl(KERN_RTSIGMAX) failed"); | 68 "sysctl(KERN_RTSIGMAX) failed"); |
69 | 69 |
70 return NGX_ERROR; | 70 return NGX_ERROR; |
71 } | 71 } |
87 ngx_linux_kern_ostype, ngx_linux_kern_osrelease); | 87 ngx_linux_kern_ostype, ngx_linux_kern_osrelease); |
88 | 88 |
89 ngx_log_error(NGX_LOG_NOTICE, log, 0, "sysctl(KERN_RTSIGMAX): %d", | 89 ngx_log_error(NGX_LOG_NOTICE, log, 0, "sysctl(KERN_RTSIGMAX): %d", |
90 ngx_linux_rtsig_max); | 90 ngx_linux_rtsig_max); |
91 } | 91 } |
92 | |
93 | |
94 static ngx_int_t | |
95 ngx_linux_procfs(char *name, char *buf, size_t len, ngx_log_t *log) | |
96 { | |
97 int n; | |
98 ngx_fd_t fd; | |
99 | |
100 fd = open(name, O_RDONLY); | |
101 | |
102 if (fd == NGX_INVALID_FILE) { | |
103 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, | |
104 "open(\"%s\") failed", name); | |
105 | |
106 return NGX_ERROR; | |
107 } | |
108 | |
109 n = read(fd, buf, len); | |
110 | |
111 if (n == -1) { | |
112 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, | |
113 "read(\"%s\") failed", name); | |
114 | |
115 } else { | |
116 if (buf[n - 1] == '\n') { | |
117 buf[--n] = '\0'; | |
118 } | |
119 } | |
120 | |
121 ngx_close_file(fd); | |
122 | |
123 return n; | |
124 } |