src/os/win32/ngx_files.h - nginx source code

Data types defined

Macros defined

Source code


  1. /*
  2. * Copyright (C) Igor Sysoev
  3. * Copyright (C) Nginx, Inc.
  4. */


  5. #ifndef _NGX_FILES_H_INCLUDED_
  6. #define _NGX_FILES_H_INCLUDED_


  7. #include <ngx_config.h>
  8. #include <ngx_core.h>


  9. typedef HANDLE                      ngx_fd_t;
  10. typedef BY_HANDLE_FILE_INFORMATION  ngx_file_info_t;
  11. typedef uint64_t                    ngx_file_uniq_t;


  12. typedef struct {
  13.     u_char                         *name;
  14.     size_t                          size;
  15.     void                           *addr;
  16.     ngx_fd_t                        fd;
  17.     HANDLE                          handle;
  18.     ngx_log_t                      *log;
  19. } ngx_file_mapping_t;


  20. typedef struct {
  21.     HANDLE                          dir;
  22.     WIN32_FIND_DATAW                finddata;

  23.     u_char                         *name;
  24.     size_t                          namelen;
  25.     size_t                          allocated;

  26.     unsigned                        valid_info:1;
  27.     unsigned                        type:1;
  28.     unsigned                        ready:1;
  29. } ngx_dir_t;


  30. typedef struct {
  31.     HANDLE                          dir;
  32.     WIN32_FIND_DATAW                finddata;

  33.     unsigned                        ready:1;
  34.     unsigned                        test:1;
  35.     unsigned                        no_match:1;

  36.     u_char                         *pattern;
  37.     ngx_str_t                       name;
  38.     size_t                          last;
  39.     ngx_log_t                      *log;
  40. } ngx_glob_t;



  41. /* INVALID_FILE_ATTRIBUTES is specified but not defined at least in MSVC6SP2 */
  42. #ifndef INVALID_FILE_ATTRIBUTES
  43. #define INVALID_FILE_ATTRIBUTES     0xffffffff
  44. #endif

  45. /* INVALID_SET_FILE_POINTER is not defined at least in MSVC6SP2 */
  46. #ifndef INVALID_SET_FILE_POINTER
  47. #define INVALID_SET_FILE_POINTER    0xffffffff
  48. #endif


  49. #define NGX_INVALID_FILE            INVALID_HANDLE_VALUE
  50. #define NGX_FILE_ERROR              0


  51. ngx_fd_t ngx_open_file(u_char *name, u_long mode, u_long create, u_long access);
  52. #define ngx_open_file_n             "CreateFile()"

  53. #define NGX_FILE_RDONLY             GENERIC_READ
  54. #define NGX_FILE_WRONLY             GENERIC_WRITE
  55. #define NGX_FILE_RDWR               GENERIC_READ|GENERIC_WRITE
  56. #define NGX_FILE_APPEND             FILE_APPEND_DATA|SYNCHRONIZE
  57. #define NGX_FILE_NONBLOCK           0

  58. #define NGX_FILE_CREATE_OR_OPEN     OPEN_ALWAYS
  59. #define NGX_FILE_OPEN               OPEN_EXISTING
  60. #define NGX_FILE_TRUNCATE           CREATE_ALWAYS

  61. #define NGX_FILE_DEFAULT_ACCESS     0
  62. #define NGX_FILE_OWNER_ACCESS       0


  63. ngx_fd_t ngx_open_tempfile(u_char *name, ngx_uint_t persistent,
  64.     ngx_uint_t access);
  65. #define ngx_open_tempfile_n         "CreateFile()"


  66. #define ngx_close_file              CloseHandle
  67. #define ngx_close_file_n            "CloseHandle()"


  68. ssize_t ngx_read_fd(ngx_fd_t fd, void *buf, size_t size);
  69. #define ngx_read_fd_n               "ReadFile()"


  70. ssize_t ngx_write_fd(ngx_fd_t fd, void *buf, size_t size);
  71. #define ngx_write_fd_n              "WriteFile()"


  72. ssize_t ngx_write_console(ngx_fd_t fd, void *buf, size_t size);


  73. #define ngx_linefeed(p)             *p++ = CR; *p++ = LF;
  74. #define NGX_LINEFEED_SIZE           2
  75. #define NGX_LINEFEED                CRLF


  76. ngx_int_t ngx_delete_file(u_char *name);
  77. #define ngx_delete_file_n           "DeleteFile()"


  78. ngx_int_t ngx_rename_file(u_char *from, u_char *to);
  79. #define ngx_rename_file_n           "MoveFile()"
  80. ngx_err_t ngx_win32_rename_file(ngx_str_t *from, ngx_str_t *to, ngx_log_t *log);



  81. ngx_int_t ngx_set_file_time(u_char *name, ngx_fd_t fd, time_t s);
  82. #define ngx_set_file_time_n         "SetFileTime()"


  83. ngx_int_t ngx_file_info(u_char *filename, ngx_file_info_t *fi);
  84. #define ngx_file_info_n             "GetFileAttributesEx()"


  85. #define ngx_fd_info(fd, fi)         GetFileInformationByHandle(fd, fi)
  86. #define ngx_fd_info_n               "GetFileInformationByHandle()"


  87. #define ngx_link_info(name, fi)     ngx_file_info(name, fi)
  88. #define ngx_link_info_n             "GetFileAttributesEx()"


  89. #define ngx_is_dir(fi)                                                       \
  90.     (((fi)->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
  91. #define ngx_is_file(fi)                                                      \
  92.     (((fi)->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
  93. #define ngx_is_link(fi)     0
  94. #define ngx_is_exec(fi)     0

  95. #define ngx_file_access(fi) 0

  96. #define ngx_file_size(fi)                                                    \
  97.     (((off_t) (fi)->nFileSizeHigh << 32) | (fi)->nFileSizeLow)
  98. #define ngx_file_fs_size(fi)        ngx_file_size(fi)

  99. #define ngx_file_uniq(fi)                                                    \
  100.     (((ngx_file_uniq_t) (fi)->nFileIndexHigh << 32) | (fi)->nFileIndexLow)


  101. /* 116444736000000000 is commented in src/os/win32/ngx_time.c */

  102. #define ngx_file_mtime(fi)                                                   \
  103. (time_t) (((((unsigned __int64) (fi)->ftLastWriteTime.dwHighDateTime << 32) \
  104.                                | (fi)->ftLastWriteTime.dwLowDateTime)        \
  105.                                           - 116444736000000000) / 10000000)

  106. ngx_int_t ngx_create_file_mapping(ngx_file_mapping_t *fm);
  107. void ngx_close_file_mapping(ngx_file_mapping_t *fm);


  108. u_char *ngx_realpath(u_char *path, u_char *resolved);
  109. #define ngx_realpath_n              ""


  110. size_t ngx_getcwd(u_char *buf, size_t size);
  111. #define ngx_getcwd_n                "GetCurrentDirectory()"


  112. #define ngx_path_separator(c)       ((c) == '/' || (c) == '\\')

  113. #define NGX_HAVE_MAX_PATH           1
  114. #define NGX_MAX_PATH                MAX_PATH


  115. ngx_int_t ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir);
  116. #define ngx_open_dir_n              "FindFirstFile()"


  117. ngx_int_t ngx_read_dir(ngx_dir_t *dir);
  118. #define ngx_read_dir_n              "FindNextFile()"


  119. ngx_int_t ngx_close_dir(ngx_dir_t *dir);
  120. #define ngx_close_dir_n             "FindClose()"


  121. ngx_int_t ngx_create_dir(u_char *name, ngx_uint_t access);
  122. #define ngx_create_dir_n            "CreateDirectory()"


  123. ngx_int_t ngx_delete_dir(u_char *name);
  124. #define ngx_delete_dir_n            "RemoveDirectory()"


  125. #define ngx_dir_access(a)           (a)


  126. #define ngx_de_name(dir)            (dir)->name
  127. #define ngx_de_namelen(dir)         (dir)->namelen

  128. ngx_int_t ngx_de_info(u_char *name, ngx_dir_t *dir);
  129. #define ngx_de_info_n               "dummy()"

  130. ngx_int_t ngx_de_link_info(u_char *name, ngx_dir_t *dir);
  131. #define ngx_de_link_info_n          "dummy()"

  132. #define ngx_de_is_dir(dir)                                                   \
  133.     (((dir)->finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
  134. #define ngx_de_is_file(dir)                                                  \
  135.     (((dir)->finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
  136. #define ngx_de_is_link(dir)         0
  137. #define ngx_de_access(dir)          0
  138. #define ngx_de_size(dir)                                                     \
  139.   (((off_t) (dir)->finddata.nFileSizeHigh << 32) | (dir)->finddata.nFileSizeLow)
  140. #define ngx_de_fs_size(dir)         ngx_de_size(dir)

  141. /* 116444736000000000 is commented in src/os/win32/ngx_time.c */

  142. #define ngx_de_mtime(dir)                                                    \
  143.     (time_t) (((((unsigned __int64)                                          \
  144.                      (dir)->finddata.ftLastWriteTime.dwHighDateTime << 32)   \
  145.                       | (dir)->finddata.ftLastWriteTime.dwLowDateTime)       \
  146.                                           - 116444736000000000) / 10000000)


  147. ngx_int_t ngx_open_glob(ngx_glob_t *gl);
  148. #define ngx_open_glob_n             "FindFirstFile()"

  149. ngx_int_t ngx_read_glob(ngx_glob_t *gl, ngx_str_t *name);
  150. void ngx_close_glob(ngx_glob_t *gl);


  151. ssize_t ngx_read_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset);
  152. #define ngx_read_file_n             "ReadFile()"

  153. ssize_t ngx_write_file(ngx_file_t *file, u_char *buf, size_t size,
  154.     off_t offset);

  155. ssize_t ngx_write_chain_to_file(ngx_file_t *file, ngx_chain_t *ce,
  156.     off_t offset, ngx_pool_t *pool);

  157. ngx_int_t ngx_read_ahead(ngx_fd_t fd, size_t n);
  158. #define ngx_read_ahead_n            "ngx_read_ahead_n"

  159. ngx_int_t ngx_directio_on(ngx_fd_t fd);
  160. #define ngx_directio_on_n           "ngx_directio_on_n"

  161. ngx_int_t ngx_directio_off(ngx_fd_t fd);
  162. #define ngx_directio_off_n          "ngx_directio_off_n"

  163. size_t ngx_fs_bsize(u_char *name);
  164. off_t ngx_fs_available(u_char *name);


  165. #define ngx_stdout               GetStdHandle(STD_OUTPUT_HANDLE)
  166. #define ngx_stderr               GetStdHandle(STD_ERROR_HANDLE)
  167. #define ngx_set_stderr(fd)       SetStdHandle(STD_ERROR_HANDLE, fd)
  168. #define ngx_set_stderr_n         "SetStdHandle(STD_ERROR_HANDLE)"


  169. #endif /* _NGX_FILES_H_INCLUDED_ */