nginx/src/os/unix/ngx_files.h


/*
 * Copyright (C) Igor Sysoev
 * Copyright (C) Nginx, Inc.
 */


#ifndef _NGX_FILES_H_INCLUDED_
#define _NGX_FILES_H_INCLUDED_


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


ngx_fd_t;
ngx_file_info_t;
ngx_file_uniq_t;


ngx_file_mapping_t;


ngx_dir_t;


ngx_glob_t;


#define NGX_INVALID_FILE
#define NGX_FILE_ERROR



#ifdef __CYGWIN__

#ifndef NGX_HAVE_CASELESS_FILESYSTEM
#define NGX_HAVE_CASELESS_FILESYSTEM
#endif

#define ngx_open_file

#else

#define ngx_open_file(name, mode, create, access)

#endif

#define ngx_open_file_n

#define NGX_FILE_RDONLY
#define NGX_FILE_WRONLY
#define NGX_FILE_RDWR
#define NGX_FILE_CREATE_OR_OPEN
#define NGX_FILE_OPEN
#define NGX_FILE_TRUNCATE
#define NGX_FILE_APPEND
#define NGX_FILE_NONBLOCK

#if (NGX_HAVE_OPENAT)
#define NGX_FILE_NOFOLLOW

#if defined(O_DIRECTORY)
#define NGX_FILE_DIRECTORY
#else
#define NGX_FILE_DIRECTORY
#endif

#if defined(O_SEARCH)
#define NGX_FILE_SEARCH

#elif defined(O_EXEC)
#define NGX_FILE_SEARCH

#elif (NGX_HAVE_O_PATH)
#define NGX_FILE_SEARCH

#else
#define NGX_FILE_SEARCH
#endif

#endif /* NGX_HAVE_OPENAT */

#define NGX_FILE_DEFAULT_ACCESS
#define NGX_FILE_OWNER_ACCESS


#define ngx_close_file
#define ngx_close_file_n


#define ngx_delete_file(name)
#define ngx_delete_file_n


ngx_fd_t ngx_open_tempfile(u_char *name, ngx_uint_t persistent,
    ngx_uint_t access);
#define ngx_open_tempfile_n


ssize_t ngx_read_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset);
#if (NGX_HAVE_PREAD)
#define ngx_read_file_n
#else
#define ngx_read_file_n
#endif

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

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


#define ngx_read_fd
#define ngx_read_fd_n

/*
 * we use inlined function instead of simple #define
 * because glibc 2.3 sets warn_unused_result attribute for write()
 * and in this case gcc 4.3 ignores (void) cast
 */
static ngx_inline ssize_t
ngx_write_fd(ngx_fd_t fd, void *buf, size_t n)
{}

#define ngx_write_fd_n


#define ngx_write_console


#define ngx_linefeed(p)
#define NGX_LINEFEED_SIZE
#define NGX_LINEFEED


#define ngx_rename_file(o, n)
#define ngx_rename_file_n


#define ngx_change_file_access(n, a)
#define ngx_change_file_access_n


ngx_int_t ngx_set_file_time(u_char *name, ngx_fd_t fd, time_t s);
#define ngx_set_file_time_n


#define ngx_file_info(file, sb)
#define ngx_file_info_n

#define ngx_fd_info(fd, sb)
#define ngx_fd_info_n

#define ngx_link_info(file, sb)
#define ngx_link_info_n

#define ngx_is_dir(sb)
#define ngx_is_file(sb)
#define ngx_is_link(sb)
#define ngx_is_exec(sb)
#define ngx_file_access(sb)
#define ngx_file_size(sb)
#define ngx_file_fs_size(sb)
#define ngx_file_mtime(sb)
#define ngx_file_uniq(sb)


ngx_int_t ngx_create_file_mapping(ngx_file_mapping_t *fm);
void ngx_close_file_mapping(ngx_file_mapping_t *fm);


#define ngx_realpath(p, r)
#define ngx_realpath_n
#define ngx_getcwd(buf, size)
#define ngx_getcwd_n
#define ngx_path_separator(c)


#if defined(PATH_MAX)

#define NGX_HAVE_MAX_PATH
#define NGX_MAX_PATH

#else

#define NGX_MAX_PATH

#endif


ngx_int_t ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir);
#define ngx_open_dir_n


#define ngx_close_dir(d)
#define ngx_close_dir_n


ngx_int_t ngx_read_dir(ngx_dir_t *dir);
#define ngx_read_dir_n


#define ngx_create_dir(name, access)
#define ngx_create_dir_n


#define ngx_delete_dir(name)
#define ngx_delete_dir_n


#define ngx_dir_access(a)


#define ngx_de_name(dir)
#if (NGX_HAVE_D_NAMLEN)
#define ngx_de_namelen
#else
#define ngx_de_namelen(dir)
#endif

static ngx_inline ngx_int_t
ngx_de_info(u_char *name, ngx_dir_t *dir)
{}

#define ngx_de_info_n
#define ngx_de_link_info(name, dir)
#define ngx_de_link_info_n

#if (NGX_HAVE_D_TYPE)

/*
 * some file systems (e.g. XFS on Linux and CD9660 on FreeBSD)
 * do not set dirent.d_type
 */

#define ngx_de_is_dir(dir)
#define ngx_de_is_file(dir)
#define ngx_de_is_link(dir)

#else

#define ngx_de_is_dir
#define ngx_de_is_file
#define ngx_de_is_link

#endif

#define ngx_de_access(dir)
#define ngx_de_size(dir)
#define ngx_de_fs_size(dir)
#define ngx_de_mtime(dir)


ngx_int_t ngx_open_glob(ngx_glob_t *gl);
#define ngx_open_glob_n
ngx_int_t ngx_read_glob(ngx_glob_t *gl, ngx_str_t *name);
void ngx_close_glob(ngx_glob_t *gl);


ngx_err_t ngx_trylock_fd(ngx_fd_t fd);
ngx_err_t ngx_lock_fd(ngx_fd_t fd);
ngx_err_t ngx_unlock_fd(ngx_fd_t fd);

#define ngx_trylock_fd_n
#define ngx_lock_fd_n
#define ngx_unlock_fd_n


#if (NGX_HAVE_F_READAHEAD)

#define NGX_HAVE_READ_AHEAD

#define ngx_read_ahead
#define ngx_read_ahead_n

#elif (NGX_HAVE_POSIX_FADVISE)

#define NGX_HAVE_READ_AHEAD

ngx_int_t ngx_read_ahead(ngx_fd_t fd, size_t n);
#define ngx_read_ahead_n

#else

#define ngx_read_ahead
#define ngx_read_ahead_n

#endif


#if (NGX_HAVE_O_DIRECT)

ngx_int_t ngx_directio_on(ngx_fd_t fd);
#define ngx_directio_on_n

ngx_int_t ngx_directio_off(ngx_fd_t fd);
#define ngx_directio_off_n

#elif (NGX_HAVE_F_NOCACHE)

#define ngx_directio_on
#define ngx_directio_on_n

#elif (NGX_HAVE_DIRECTIO)

#define ngx_directio_on
#define ngx_directio_on_n

#else

#define ngx_directio_on
#define ngx_directio_on_n

#endif

size_t ngx_fs_bsize(u_char *name);
off_t ngx_fs_available(u_char *name);


#if (NGX_HAVE_OPENAT)

#define ngx_openat_file(fd, name, mode, create, access)

#define ngx_openat_file_n

#define ngx_file_at_info(fd, name, sb, flag)

#define ngx_file_at_info_n

#define NGX_AT_FDCWD

#endif


#define ngx_stdout
#define ngx_stderr
#define ngx_set_stderr(fd)
#define ngx_set_stderr_n


#if (NGX_HAVE_FILE_AIO)

ngx_int_t ngx_file_aio_init(ngx_file_t *file, ngx_pool_t *pool);
ssize_t ngx_file_aio_read(ngx_file_t *file, u_char *buf, size_t size,
    off_t offset, ngx_pool_t *pool);

extern ngx_uint_t  ngx_file_aio;

#endif

#if (NGX_THREADS)
ssize_t ngx_thread_read(ngx_file_t *file, u_char *buf, size_t size,
    off_t offset, ngx_pool_t *pool);
ssize_t ngx_thread_write_chain_to_file(ngx_file_t *file, ngx_chain_t *cl,
    off_t offset, ngx_pool_t *pool);
#endif


#endif /* _NGX_FILES_H_INCLUDED_ */