summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2008-01-08 16:47:55 +0000
committerIgor Sysoev <igor@sysoev.ru>2008-01-08 16:47:55 +0000
commitb83e00469ca56f9be898bd7b58a6cafed34ad223 (patch)
tree9ba1cf5cd4a400e7db6ee99be2e5c7b3ea2f62e8
parent8baac530ae3764f54eca4adb36ba56b1d28102d4 (diff)
downloadnginx-b83e00469ca56f9be898bd7b58a6cafed34ad223.tar.gz
r1606 merge:
use uname(2) instead of /proc/, this allows to run nginx in chroot
-rw-r--r--src/os/unix/ngx_linux_config.h1
-rw-r--r--src/os/unix/ngx_linux_init.c68
2 files changed, 14 insertions, 55 deletions
diff --git a/src/os/unix/ngx_linux_config.h b/src/os/unix/ngx_linux_config.h
index 3e0475ffc..c584ff885 100644
--- a/src/os/unix/ngx_linux_config.h
+++ b/src/os/unix/ngx_linux_config.h
@@ -50,6 +50,7 @@
#include <sys/ioctl.h>
#include <sys/sysctl.h>
#include <crypt.h>
+#include <sys/utsname.h> /* uname() */
#include <ngx_auto_config.h>
diff --git a/src/os/unix/ngx_linux_init.c b/src/os/unix/ngx_linux_init.c
index 3a013a0bf..f372e82a3 100644
--- a/src/os/unix/ngx_linux_init.c
+++ b/src/os/unix/ngx_linux_init.c
@@ -8,12 +8,8 @@
#include <ngx_core.h>
-static ngx_int_t ngx_linux_procfs(char *name, char *buf, size_t len,
- ngx_log_t *log);
-
-
-char ngx_linux_kern_ostype[50];
-char ngx_linux_kern_osrelease[50];
+u_char ngx_linux_kern_ostype[50];
+u_char ngx_linux_kern_osrelease[50];
int ngx_linux_rtsig_max;
@@ -35,26 +31,21 @@ static ngx_os_io_t ngx_linux_io = {
ngx_int_t
ngx_os_specific_init(ngx_log_t *log)
{
- int name[2];
- size_t len;
- ngx_err_t err;
-
- if (ngx_linux_procfs("/proc/sys/kernel/ostype",
- ngx_linux_kern_ostype,
- sizeof(ngx_linux_kern_ostype), log)
- == -1)
- {
- return NGX_ERROR;
- }
+ int name[2];
+ size_t len;
+ ngx_err_t err;
+ struct utsname u;
- if (ngx_linux_procfs("/proc/sys/kernel/osrelease",
- ngx_linux_kern_osrelease,
- sizeof(ngx_linux_kern_osrelease), log)
- == -1)
- {
+ if (uname(&u) == -1) {
+ ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "uname() failed");
return NGX_ERROR;
}
+ (void) ngx_cpystrn(ngx_linux_kern_ostype, (u_char *) u.sysname,
+ sizeof(ngx_linux_kern_ostype));
+
+ (void) ngx_cpystrn(ngx_linux_kern_osrelease, (u_char *) u.release,
+ sizeof(ngx_linux_kern_osrelease));
name[0] = CTL_KERN;
name[1] = KERN_RTSIGMAX;
@@ -89,36 +80,3 @@ ngx_os_specific_status(ngx_log_t *log)
ngx_log_error(NGX_LOG_NOTICE, log, 0, "sysctl(KERN_RTSIGMAX): %d",
ngx_linux_rtsig_max);
}
-
-
-static ngx_int_t
-ngx_linux_procfs(char *name, char *buf, size_t len, ngx_log_t *log)
-{
- int n;
- ngx_fd_t fd;
-
- fd = open(name, O_RDONLY);
-
- if (fd == NGX_INVALID_FILE) {
- ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
- "open(\"%s\") failed", name);
-
- return NGX_ERROR;
- }
-
- n = read(fd, buf, len);
-
- if (n == -1) {
- ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
- "read(\"%s\") failed", name);
-
- } else {
- if (buf[n - 1] == '\n') {
- buf[--n] = '\0';
- }
- }
-
- ngx_close_file(fd);
-
- return n;
-}