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_ */