Mercurial > hg > nginx-mail
comparison src/os/unix/ngx_files.h @ 665:0b460e61bdcd default tip
Merge with nginx 1.0.0.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 25 Apr 2011 04:22:17 +0400 |
parents | c456a023113c |
children |
comparison
equal
deleted
inserted
replaced
572:06419a2298a9 | 665:0b460e61bdcd |
---|---|
13 | 13 |
14 | 14 |
15 typedef int ngx_fd_t; | 15 typedef int ngx_fd_t; |
16 typedef struct stat ngx_file_info_t; | 16 typedef struct stat ngx_file_info_t; |
17 typedef ino_t ngx_file_uniq_t; | 17 typedef ino_t ngx_file_uniq_t; |
18 | |
19 | |
20 typedef struct { | |
21 u_char *name; | |
22 size_t size; | |
23 void *addr; | |
24 ngx_fd_t fd; | |
25 ngx_log_t *log; | |
26 } ngx_file_mapping_t; | |
18 | 27 |
19 | 28 |
20 typedef struct { | 29 typedef struct { |
21 DIR *dir; | 30 DIR *dir; |
22 struct dirent *de; | 31 struct dirent *de; |
23 struct stat info; | 32 struct stat info; |
24 | 33 |
25 unsigned type:8; | 34 unsigned type:8; |
26 unsigned valid_info:1; | 35 unsigned valid_info:1; |
27 unsigned valid_type:1; | |
28 } ngx_dir_t; | 36 } ngx_dir_t; |
29 | 37 |
30 | 38 |
31 typedef struct { | 39 typedef struct { |
32 size_t n; | 40 size_t n; |
63 #define NGX_FILE_RDWR O_RDWR | 71 #define NGX_FILE_RDWR O_RDWR |
64 #define NGX_FILE_CREATE_OR_OPEN O_CREAT | 72 #define NGX_FILE_CREATE_OR_OPEN O_CREAT |
65 #define NGX_FILE_OPEN 0 | 73 #define NGX_FILE_OPEN 0 |
66 #define NGX_FILE_TRUNCATE O_CREAT|O_TRUNC | 74 #define NGX_FILE_TRUNCATE O_CREAT|O_TRUNC |
67 #define NGX_FILE_APPEND O_WRONLY|O_APPEND | 75 #define NGX_FILE_APPEND O_WRONLY|O_APPEND |
76 #define NGX_FILE_NONBLOCK O_NONBLOCK | |
68 | 77 |
69 #define NGX_FILE_DEFAULT_ACCESS 0644 | 78 #define NGX_FILE_DEFAULT_ACCESS 0644 |
70 #define NGX_FILE_OWNER_ACCESS 0600 | 79 #define NGX_FILE_OWNER_ACCESS 0600 |
71 | 80 |
72 | 81 |
137 #define ngx_file_info_n "stat()" | 146 #define ngx_file_info_n "stat()" |
138 | 147 |
139 #define ngx_fd_info(fd, sb) fstat(fd, sb) | 148 #define ngx_fd_info(fd, sb) fstat(fd, sb) |
140 #define ngx_fd_info_n "fstat()" | 149 #define ngx_fd_info_n "fstat()" |
141 | 150 |
151 #define ngx_link_info(file, sb) lstat((const char *) file, sb) | |
152 #define ngx_link_info_n "lstat()" | |
153 | |
142 #define ngx_is_dir(sb) (S_ISDIR((sb)->st_mode)) | 154 #define ngx_is_dir(sb) (S_ISDIR((sb)->st_mode)) |
143 #define ngx_is_file(sb) (S_ISREG((sb)->st_mode)) | 155 #define ngx_is_file(sb) (S_ISREG((sb)->st_mode)) |
144 #define ngx_is_link(sb) (S_ISLNK((sb)->st_mode)) | 156 #define ngx_is_link(sb) (S_ISLNK((sb)->st_mode)) |
145 #define ngx_is_exec(sb) ((sb)->st_mode & S_IXUSR) | 157 #define ngx_is_exec(sb) (((sb)->st_mode & S_IXUSR) == S_IXUSR) |
146 #define ngx_file_access(sb) ((sb)->st_mode & 0777) | 158 #define ngx_file_access(sb) ((sb)->st_mode & 0777) |
147 #define ngx_file_size(sb) (sb)->st_size | 159 #define ngx_file_size(sb) (sb)->st_size |
148 #define ngx_file_mtime(sb) (sb)->st_mtime | 160 #define ngx_file_mtime(sb) (sb)->st_mtime |
149 #define ngx_file_uniq(sb) (sb)->st_ino | 161 #define ngx_file_uniq(sb) (sb)->st_ino |
162 | |
163 | |
164 ngx_int_t ngx_create_file_mapping(ngx_file_mapping_t *fm); | |
165 void ngx_close_file_mapping(ngx_file_mapping_t *fm); | |
150 | 166 |
151 | 167 |
152 #if (NGX_HAVE_CASELESS_FILESYSTEM) | 168 #if (NGX_HAVE_CASELESS_FILESYSTEM) |
153 | 169 |
154 #define ngx_filename_cmp(s1, s2, n) strncasecmp((char *) s1, (char *) s2, n) | 170 #define ngx_filename_cmp(s1, s2, n) strncasecmp((char *) s1, (char *) s2, n) |
198 #if (NGX_HAVE_D_NAMLEN) | 214 #if (NGX_HAVE_D_NAMLEN) |
199 #define ngx_de_namelen(dir) (dir)->de->d_namlen | 215 #define ngx_de_namelen(dir) (dir)->de->d_namlen |
200 #else | 216 #else |
201 #define ngx_de_namelen(dir) ngx_strlen((dir)->de->d_name) | 217 #define ngx_de_namelen(dir) ngx_strlen((dir)->de->d_name) |
202 #endif | 218 #endif |
203 #define ngx_de_info(name, dir) stat((const char *) name, &(dir)->info) | 219 |
220 static ngx_inline ngx_int_t | |
221 ngx_de_info(u_char *name, ngx_dir_t *dir) | |
222 { | |
223 dir->type = 0; | |
224 return stat((const char *) name, &dir->info); | |
225 } | |
226 | |
204 #define ngx_de_info_n "stat()" | 227 #define ngx_de_info_n "stat()" |
205 #define ngx_de_link_info(name, dir) lstat((const char *) name, &(dir)->info) | 228 #define ngx_de_link_info(name, dir) lstat((const char *) name, &(dir)->info) |
206 #define ngx_de_link_info_n "lstat()" | 229 #define ngx_de_link_info_n "lstat()" |
207 | 230 |
208 #if (NGX_HAVE_D_TYPE) | 231 #if (NGX_HAVE_D_TYPE) |
209 | 232 |
210 #if (NGX_LINUX) | 233 /* |
211 | 234 * some file systems (e.g. XFS on Linux and CD9660 on FreeBSD) |
212 /* XFS on Linux does not set dirent.d_type */ | 235 * do not set dirent.d_type |
236 */ | |
213 | 237 |
214 #define ngx_de_is_dir(dir) \ | 238 #define ngx_de_is_dir(dir) \ |
215 (((dir)->type) ? ((dir)->type == DT_DIR) : (S_ISDIR((dir)->info.st_mode))) | 239 (((dir)->type) ? ((dir)->type == DT_DIR) : (S_ISDIR((dir)->info.st_mode))) |
216 #define ngx_de_is_file(dir) \ | 240 #define ngx_de_is_file(dir) \ |
217 (((dir)->type) ? ((dir)->type == DT_REG) : (S_ISREG((dir)->info.st_mode))) | 241 (((dir)->type) ? ((dir)->type == DT_REG) : (S_ISREG((dir)->info.st_mode))) |
218 #define ngx_de_is_link(dir) \ | 242 #define ngx_de_is_link(dir) \ |
219 (((dir)->type) ? ((dir)->type == DT_LINK) : (S_ISLNK((dir)->info.st_mode))) | 243 (((dir)->type) ? ((dir)->type == DT_LNK) : (S_ISLNK((dir)->info.st_mode))) |
220 | |
221 #else | |
222 | |
223 #define ngx_de_is_dir(dir) ((dir)->type == DT_DIR) | |
224 #define ngx_de_is_file(dir) ((dir)->type == DT_REG) | |
225 #define ngx_de_is_link(dir) ((dir)->type == DT_LINK) | |
226 | |
227 #endif /* NGX_LINUX */ | |
228 | 244 |
229 #else | 245 #else |
230 | 246 |
231 #define ngx_de_is_dir(dir) (S_ISDIR((dir)->info.st_mode)) | 247 #define ngx_de_is_dir(dir) (S_ISDIR((dir)->info.st_mode)) |
232 #define ngx_de_is_file(dir) (S_ISREG((dir)->info.st_mode)) | 248 #define ngx_de_is_file(dir) (S_ISREG((dir)->info.st_mode)) |
252 #define ngx_trylock_fd_n "fcntl(F_SETLK, F_WRLCK)" | 268 #define ngx_trylock_fd_n "fcntl(F_SETLK, F_WRLCK)" |
253 #define ngx_lock_fd_n "fcntl(F_SETLKW, F_WRLCK)" | 269 #define ngx_lock_fd_n "fcntl(F_SETLKW, F_WRLCK)" |
254 #define ngx_unlock_fd_n "fcntl(F_SETLK, F_UNLCK)" | 270 #define ngx_unlock_fd_n "fcntl(F_SETLK, F_UNLCK)" |
255 | 271 |
256 | 272 |
273 #if (NGX_HAVE_F_READAHEAD) | |
274 | |
275 #define NGX_HAVE_READ_AHEAD 1 | |
276 | |
277 #define ngx_read_ahead(fd, n) fcntl(fd, F_READAHEAD, (int) n) | |
278 #define ngx_read_ahead_n "fcntl(fd, F_READAHEAD)" | |
279 | |
280 #elif (NGX_HAVE_POSIX_FADVISE) | |
281 | |
282 #define NGX_HAVE_READ_AHEAD 1 | |
283 | |
284 ngx_int_t ngx_read_ahead(ngx_fd_t fd, size_t n); | |
285 #define ngx_read_ahead_n "posix_fadvise(POSIX_FADV_SEQUENTIAL)" | |
286 | |
287 #else | |
288 | |
289 #define ngx_read_ahead(fd, n) 0 | |
290 #define ngx_read_ahead_n "ngx_read_ahead_n" | |
291 | |
292 #endif | |
293 | |
294 | |
257 #if (NGX_HAVE_O_DIRECT) | 295 #if (NGX_HAVE_O_DIRECT) |
258 | 296 |
259 ngx_int_t ngx_directio_on(ngx_fd_t fd); | 297 ngx_int_t ngx_directio_on(ngx_fd_t fd); |
260 #define ngx_directio_on_n "fcntl(O_DIRECT)" | 298 #define ngx_directio_on_n "fcntl(O_DIRECT)" |
261 | 299 |
290 #if (NGX_HAVE_FILE_AIO) | 328 #if (NGX_HAVE_FILE_AIO) |
291 | 329 |
292 ssize_t ngx_file_aio_read(ngx_file_t *file, u_char *buf, size_t size, | 330 ssize_t ngx_file_aio_read(ngx_file_t *file, u_char *buf, size_t size, |
293 off_t offset, ngx_pool_t *pool); | 331 off_t offset, ngx_pool_t *pool); |
294 | 332 |
333 extern ngx_uint_t ngx_file_aio; | |
334 | |
295 #endif | 335 #endif |
296 | 336 |
297 | 337 |
298 #endif /* _NGX_FILES_H_INCLUDED_ */ | 338 #endif /* _NGX_FILES_H_INCLUDED_ */ |