Mercurial > hg > nginx
comparison src/os/unix/ngx_files.c @ 182:3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 13 Nov 2003 06:14:05 +0000 |
parents | c42be4185301 |
children | c1f3a3c7c5db |
comparison
equal
deleted
inserted
replaced
181:811bdd2af794 | 182:3c49eaf3f522 |
---|---|
12 ssize_t n; | 12 ssize_t n; |
13 | 13 |
14 ngx_log_debug(file->log, "read: %d, %x, %d, %qd" _ | 14 ngx_log_debug(file->log, "read: %d, %x, %d, %qd" _ |
15 file->fd _ buf _ size _ offset); | 15 file->fd _ buf _ size _ offset); |
16 | 16 |
17 #if (HAVE_PREAD) | |
18 | |
17 n = pread(file->fd, buf, size, offset); | 19 n = pread(file->fd, buf, size, offset); |
18 | 20 |
19 if (n == -1) { | 21 if (n == -1) { |
20 ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno, "pread() failed"); | 22 ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno, "pread() failed"); |
21 return NGX_ERROR; | 23 return NGX_ERROR; |
22 } | 24 } |
23 | 25 |
26 #else | |
27 | |
28 if (file->offset != offset) { | |
29 if (lseek(file->fd, offset, SEEK_SET) == -1) { | |
30 ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno, "lseek() failed"); | |
31 return NGX_ERROR; | |
32 } | |
33 } | |
34 | |
35 n = read(file->fd, buf, size); | |
36 | |
37 if (n == -1) { | |
38 ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno, "read() failed"); | |
39 return NGX_ERROR; | |
40 } | |
41 | |
42 #endif | |
43 | |
24 file->offset += n; | 44 file->offset += n; |
25 | 45 |
26 return n; | 46 return n; |
27 } | 47 } |
28 | 48 |
29 | 49 |
30 ssize_t ngx_write_file(ngx_file_t *file, char *buf, size_t size, off_t offset) | 50 ssize_t ngx_write_file(ngx_file_t *file, char *buf, size_t size, off_t offset) |
31 { | 51 { |
32 ssize_t n; | 52 ssize_t n; |
53 | |
54 #if (HAVE_PWRITE) | |
33 | 55 |
34 n = pwrite(file->fd, buf, size, offset); | 56 n = pwrite(file->fd, buf, size, offset); |
35 | 57 |
36 if (n == -1) { | 58 if (n == -1) { |
37 ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno, "pwrite() failed"); | 59 ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno, "pwrite() failed"); |
41 if ((size_t) n != size) { | 63 if ((size_t) n != size) { |
42 ngx_log_error(NGX_LOG_CRIT, file->log, 0, | 64 ngx_log_error(NGX_LOG_CRIT, file->log, 0, |
43 "pwrite() has written only %d of %d", n, size); | 65 "pwrite() has written only %d of %d", n, size); |
44 return NGX_ERROR; | 66 return NGX_ERROR; |
45 } | 67 } |
68 | |
69 #else | |
70 | |
71 if (file->offset != offset) { | |
72 if (lseek(file->fd, offset, SEEK_SET) == -1) { | |
73 ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno, "lseek() failed"); | |
74 return NGX_ERROR; | |
75 } | |
76 } | |
77 | |
78 n = write(file->fd, buf, size); | |
79 | |
80 if (n == -1) { | |
81 ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno, "write() failed"); | |
82 return NGX_ERROR; | |
83 } | |
84 | |
85 if ((size_t) n != size) { | |
86 ngx_log_error(NGX_LOG_CRIT, file->log, 0, | |
87 "write() has written only %d of %d", n, size); | |
88 return NGX_ERROR; | |
89 } | |
90 | |
91 #endif | |
46 | 92 |
47 file->offset += n; | 93 file->offset += n; |
48 | 94 |
49 return n; | 95 return n; |
50 } | 96 } |