blob: c59e79d16c410f52211c985a28469fdf00ab26ac [file] [log] [blame]
Igor Sysoeva58e3ca2002-09-02 14:48:24 +00001#ifndef _NGX_FILES_H_INCLUDED_
2#define _NGX_FILES_H_INCLUDED_
Igor Sysoev2b542382002-08-20 14:48:28 +00003
4
5#include <ngx_config.h>
Igor Sysoev1c104622003-06-03 15:42:58 +00006#include <ngx_core.h>
Igor Sysoev86de4cb2003-01-30 07:28:09 +00007
Igor Sysoev2b542382002-08-20 14:48:28 +00008
Igor Sysoev45890ea2003-11-13 16:16:33 +00009/* INVALID_FILE_ATTRIBUTES is specified but not defined at least in MSVC6SP2 */
Igor Sysoev2b542382002-08-20 14:48:28 +000010#ifndef INVALID_FILE_ATTRIBUTES
Igor Sysoev45890ea2003-11-13 16:16:33 +000011#define INVALID_FILE_ATTRIBUTES 0xffffffff
Igor Sysoev2b542382002-08-20 14:48:28 +000012#endif
13
Igor Sysoev45890ea2003-11-13 16:16:33 +000014/* INVALID_SET_FILE_POINTER is not defined at least in MSVC6SP2 */
15#ifndef INVALID_SET_FILE_POINTER
16#define INVALID_SET_FILE_POINTER 0xffffffff
17#endif
18
19
Igor Sysoev42feecb2002-12-15 06:25:09 +000020#define NGX_INVALID_FILE INVALID_HANDLE_VALUE
21#define NGX_FILE_ERROR 0
22
Igor Sysoev2b542382002-08-20 14:48:28 +000023
24
Igor Sysoev7578ec92003-06-02 15:24:30 +000025#define ngx_open_file(name, access, create) \
Igor Sysoev10a543a2004-03-16 07:10:12 +000026 CreateFile((const char *) name, access, \
Igor Sysoev2b542382002-08-20 14:48:28 +000027 FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, \
Igor Sysoev7578ec92003-06-02 15:24:30 +000028 NULL, create, FILE_FLAG_BACKUP_SEMANTICS, NULL)
Igor Sysoev5eef6182002-12-15 21:08:04 +000029/*
Igor Sysoev2b542382002-08-20 14:48:28 +000030 NULL, OPEN_EXISTING, 0, NULL)
Igor Sysoev5eef6182002-12-15 21:08:04 +000031*/
Igor Sysoev7578ec92003-06-02 15:24:30 +000032#define ngx_open_file_n "CreateFile()"
33
34#define NGX_FILE_RDONLY GENERIC_READ
35#define NGX_FILE_RDWR GENERIC_READ|GENERIC_WRITE
36#define NGX_FILE_CREATE_OR_OPEN OPEN_ALWAYS
37#define NGX_FILE_OPEN OPEN_EXISTING
Igor Sysoev1c104622003-06-03 15:42:58 +000038#define NGX_FILE_APPEND 0
39
40
41int ngx_file_append_mode(ngx_fd_t fd);
42#define ngx_file_append_mode_n "SetFilePointer()"
Igor Sysoev7578ec92003-06-02 15:24:30 +000043
Igor Sysoev2b542382002-08-20 14:48:28 +000044
Igor Sysoevfd675862003-04-11 16:01:14 +000045#define ngx_open_tempfile(name, persistent) \
Igor Sysoev10a543a2004-03-16 07:10:12 +000046 CreateFile((const char *) name, \
Igor Sysoevfd675862003-04-11 16:01:14 +000047 GENERIC_READ|GENERIC_WRITE, \
48 FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, \
49 NULL, \
50 CREATE_NEW, \
51 persistent ? 0: \
52 FILE_ATTRIBUTE_TEMPORARY|FILE_FLAG_DELETE_ON_CLOSE, \
53 NULL);
54
Igor Sysoev1c13c662003-05-20 15:37:55 +000055#define ngx_open_tempfile_n "CreateFile()"
56
57
Igor Sysoev42feecb2002-12-15 06:25:09 +000058#define ngx_close_file CloseHandle
59#define ngx_close_file_n "CloseHandle()"
Igor Sysoev2b542382002-08-20 14:48:28 +000060
Igor Sysoevf2e676a2003-11-16 21:49:42 +000061
Igor Sysoevda85f7f2004-03-16 21:26:01 +000062#define ngx_delete_file(name) DeleteFile((const char *) name)
Igor Sysoevf2e676a2003-11-16 21:49:42 +000063#define ngx_delete_file_n "DeleteFile()"
64
65
66#define ngx_rename_file MoveFile
Igor Sysoevd0d57b72003-11-11 22:16:11 +000067#define ngx_rename_file_n "MoveFile()"
Igor Sysoevf2e676a2003-11-16 21:49:42 +000068int ngx_win32_rename_file(ngx_str_t *from, ngx_str_t *to, ngx_pool_t *pool);
Igor Sysoevd0d57b72003-11-11 22:16:11 +000069
Igor Sysoevfd675862003-04-11 16:01:14 +000070
Igor Sysoevda85f7f2004-03-16 21:26:01 +000071int ngx_file_info(u_char *filename, ngx_file_info_t *fi);
Igor Sysoevf2e676a2003-11-16 21:49:42 +000072#define ngx_file_info_n "GetFileAttributesEx()"
Igor Sysoev2b542382002-08-20 14:48:28 +000073
Igor Sysoev2b542382002-08-20 14:48:28 +000074
Igor Sysoevf2e676a2003-11-16 21:49:42 +000075#define ngx_fd_info(fd, fi) GetFileInformationByHandle(fd, fi)
76#define ngx_fd_info_n "GetFileInformationByHandle"
Igor Sysoev2b542382002-08-20 14:48:28 +000077
Igor Sysoev2b542382002-08-20 14:48:28 +000078
Igor Sysoevf2e676a2003-11-16 21:49:42 +000079#define ngx_is_dir(fi) ((fi)->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
80#define ngx_is_file(fi) !((fi)->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
81
82
83#define ngx_file_size(fi) \
84 (((off_t) (fi)->nFileSizeHigh << 32) | (fi)->nFileSizeLow)
85
86#define ngx_file_uniq(fi) (*(ngx_file_uniq_t *) &(fi)->nFileIndexHigh)
Igor Sysoev2b542382002-08-20 14:48:28 +000087
Igor Sysoev27c30f92003-11-11 18:13:43 +000088
89/* 116444736000000000 is commented in src/os/win32/ngx_time.c */
Igor Sysoev42feecb2002-12-15 06:25:09 +000090
Igor Sysoevf2e676a2003-11-16 21:49:42 +000091#define ngx_file_mtime(fi) \
92 (time_t) (((((unsigned __int64) (fi)->ftLastWriteTime.dwHighDateTime << 32) \
93 | (fi)->ftLastWriteTime.dwLowDateTime) \
Igor Sysoev42feecb2002-12-15 06:25:09 +000094 - 116444736000000000) / 10000000)
95
96
Igor Sysoevab517d52004-05-18 15:29:08 +000097#define ngx_getcwd(buf, size) GetCurrentDirectory(size, buf)
98#define ngx_getcwd_n "GetCurrentDirectory()"
99#define NGX_MAX_PATH MAX_PATH
100
101
Igor Sysoevda85f7f2004-03-16 21:26:01 +0000102#define NGX_DIR_MASK (u_char *) "/*"
Igor Sysoevf2e676a2003-11-16 21:49:42 +0000103#define NGX_DIR_MASK_LEN 2
104
105
106int ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir);
107#define ngx_open_dir_n "FindFirstFile()"
108
109
110int ngx_read_dir(ngx_dir_t *dir);
111#define ngx_read_dir_n "FindNextFile()"
112
113
114#define ngx_close_dir(d) FindClose((d)->dir)
115#define ngx_close_dir_n "FindClose()"
116
117
Igor Sysoevda85f7f2004-03-16 21:26:01 +0000118#define ngx_create_dir(name) CreateDirectory((const char *) name, NULL)
Igor Sysoevf2e676a2003-11-16 21:49:42 +0000119#define ngx_create_dir_n "CreateDirectory()"
120
121
Igor Sysoevda85f7f2004-03-16 21:26:01 +0000122#define ngx_delete_dir(name) RemoveDirectory((const char *) name)
Igor Sysoevf2e676a2003-11-16 21:49:42 +0000123#define ngx_delete_dir_n "RemoveDirectory()"
124
125
126#define ngx_de_name(dir) (dir)->fd.cFileName
127#define ngx_de_namelen(dir) ngx_strlen((dir)->fd.cFileName)
128#define ngx_de_info(name, dir) NGX_OK
129#define ngx_de_info_n "dummy()"
130#define ngx_de_is_dir(dir) \
131 ((dir)->fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
132#define ngx_de_is_file(dir) \
133 !((dir)->fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
134#define ngx_de_size(dir) \
135 (((off_t) (dir)->fd.nFileSizeHigh << 32) | (dir)->fd.nFileSizeLow)
136
137/* 116444736000000000 is commented in src/os/win32/ngx_time.c */
138
139#define ngx_de_mtime(dir) \
140 (time_t) (((((unsigned __int64) \
141 (dir)->fd.ftLastWriteTime.dwHighDateTime << 32) \
142 | (dir)->fd.ftLastWriteTime.dwLowDateTime) \
143 - 116444736000000000) / 10000000)
144
145
146
Igor Sysoev10a543a2004-03-16 07:10:12 +0000147ssize_t ngx_read_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset);
Igor Sysoevaa3436c2003-05-30 14:27:59 +0000148#define ngx_read_file_n "ReadFile()"
149
Igor Sysoev10a543a2004-03-16 07:10:12 +0000150ssize_t ngx_write_file(ngx_file_t *file, u_char *buf, size_t size,
151 off_t offset);
Igor Sysoev562e53e2003-11-13 06:14:05 +0000152
153ssize_t ngx_write_chain_to_file(ngx_file_t *file, ngx_chain_t *ce,
154 off_t offset, ngx_pool_t *pool);
155
156
Igor Sysoeva58e3ca2002-09-02 14:48:24 +0000157#endif /* _NGX_FILES_H_INCLUDED_ */