comparison src/os/unix/ngx_linux_init.c @ 330:c60beecc6ab5 NGINX_0_5_35

nginx 0.5.35 *) Change: now the ngx_http_userid_module adds start time microseconds to the cookie field contains a pid value. *) Change: now the uname(2) is used on Linux instead of procfs. Thanks to Ilya Novikov. *) Feature: the "If-Range" request header line support. Thanks to Alexander V. Inyukhin. *) Bugfix: in HTTPS mode requests might fail with the "bad write retry" error; bug appeared in 0.5.13. *) Bugfix: the STARTTLS in SMTP mode did not work. Thanks to Oleg Motienko. *) Bugfix: large_client_header_buffers did not freed before going to keep-alive state. Thanks to Olexander Shtepa. *) Bugfix: the "limit_rate" directive did not allow to use full throughput, even if limit value was very high. *) Bugfix: the $status variable was equal to 0 if a proxied server returned response in HTTP/0.9 version. *) Bugfix: if the "?" character was in a "error_page" directive, then it was escaped in a proxied request; bug appeared in 0.5.32.
author Igor Sysoev <http://sysoev.ru>
date Tue, 08 Jan 2008 00:00:00 +0300
parents 29a6403156b0
children
comparison
equal deleted inserted replaced
329:d792b2cd78fe 330:c60beecc6ab5
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 static ngx_int_t ngx_linux_procfs(char *name, char *buf, size_t len, 11 u_char ngx_linux_kern_ostype[50];
12 ngx_log_t *log); 12 u_char ngx_linux_kern_osrelease[50];
13
14
15 char ngx_linux_kern_ostype[50];
16 char ngx_linux_kern_osrelease[50];
17 13
18 int ngx_linux_rtsig_max; 14 int ngx_linux_rtsig_max;
19 15
20 16
21 static ngx_os_io_t ngx_linux_io = { 17 static ngx_os_io_t ngx_linux_io = {
33 29
34 30
35 ngx_int_t 31 ngx_int_t
36 ngx_os_specific_init(ngx_log_t *log) 32 ngx_os_specific_init(ngx_log_t *log)
37 { 33 {
38 int name[2]; 34 int name[2];
39 size_t len; 35 size_t len;
40 ngx_err_t err; 36 ngx_err_t err;
37 struct utsname u;
41 38
42 if (ngx_linux_procfs("/proc/sys/kernel/ostype", 39 if (uname(&u) == -1) {
43 ngx_linux_kern_ostype, 40 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "uname() failed");
44 sizeof(ngx_linux_kern_ostype), log)
45 == -1)
46 {
47 return NGX_ERROR; 41 return NGX_ERROR;
48 } 42 }
49 43
50 if (ngx_linux_procfs("/proc/sys/kernel/osrelease", 44 (void) ngx_cpystrn(ngx_linux_kern_ostype, (u_char *) u.sysname,
51 ngx_linux_kern_osrelease, 45 sizeof(ngx_linux_kern_ostype));
52 sizeof(ngx_linux_kern_osrelease), log)
53 == -1)
54 {
55 return NGX_ERROR;
56 }
57 46
47 (void) ngx_cpystrn(ngx_linux_kern_osrelease, (u_char *) u.release,
48 sizeof(ngx_linux_kern_osrelease));
58 49
59 name[0] = CTL_KERN; 50 name[0] = CTL_KERN;
60 name[1] = KERN_RTSIGMAX; 51 name[1] = KERN_RTSIGMAX;
61 len = sizeof(ngx_linux_rtsig_max); 52 len = sizeof(ngx_linux_rtsig_max);
62 53
87 ngx_linux_kern_ostype, ngx_linux_kern_osrelease); 78 ngx_linux_kern_ostype, ngx_linux_kern_osrelease);
88 79
89 ngx_log_error(NGX_LOG_NOTICE, log, 0, "sysctl(KERN_RTSIGMAX): %d", 80 ngx_log_error(NGX_LOG_NOTICE, log, 0, "sysctl(KERN_RTSIGMAX): %d",
90 ngx_linux_rtsig_max); 81 ngx_linux_rtsig_max);
91 } 82 }
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 }