summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_file.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/nxt_file.h195
1 files changed, 195 insertions, 0 deletions
diff --git a/src/nxt_file.h b/src/nxt_file.h
new file mode 100644
index 00000000..3ef5fbfb
--- /dev/null
+++ b/src/nxt_file.h
@@ -0,0 +1,195 @@
+
+/*
+ * Copyright (C) Igor Sysoev
+ * Copyright (C) NGINX, Inc.
+ */
+
+#ifndef _NXT_UNIX_FILE_H_INCLUDED_
+#define _NXT_UNIX_FILE_H_INCLUDED_
+
+
+typedef int nxt_fd_t;
+
+#define NXT_FILE_INVALID -1
+
+typedef nxt_uint_t nxt_file_access_t;
+typedef struct stat nxt_file_info_t;
+
+
+#define NXT_FILE_SYSTEM_NAME_UTF8 1
+
+typedef u_char nxt_file_name_t;
+
+
+typedef struct {
+ size_t len;
+ nxt_file_name_t *start;
+} nxt_file_name_str_t;
+
+
+#define \
+nxt_file_name_str_set(file_name, mem_pool, name) \
+ ((file_name) = (nxt_file_name_t *) (name), NXT_OK)
+
+
+#define \
+nxt_file_name_alloc(mem_pool, len) \
+ nxt_mem_nalloc(mem_pool, len)
+
+
+#define \
+nxt_file_name_copy(dst, src, len) \
+ nxt_cpymem(dst, src, len)
+
+
+#define \
+nxt_file_name_add(dst, src, len) \
+ nxt_cpymem(dst, src, len)
+
+
+#if (NXT_HAVE_CASELESS_FILESYSTEM)
+
+/* MacOSX, Cygwin. */
+
+#define \
+nxt_file_name_eq(fn1, fn2) \
+ (nxt_strcasecmp(fn1, fn2) == 0)
+
+#else
+
+#define \
+nxt_file_name_eq(fn1, fn2) \
+ (nxt_strcmp(fn1, fn2) == 0)
+
+#endif
+
+
+#define \
+nxt_file_name_is_absolute(name) \
+ (name[0] == '/')
+
+
+#define NXT_MAX_PATH_LEN MAXPATHLEN
+
+
+typedef enum {
+ NXT_FILE_UNKNOWN = 0,
+ NXT_FILE_REGULAR,
+ NXT_FILE_DIRECTORY,
+} nxt_file_type_t;
+
+
+typedef struct {
+ nxt_file_name_t *name;
+
+ /* Both are int's. */
+ nxt_fd_t fd;
+ nxt_err_t error;
+
+#define NXT_FILE_ACCESSED_LONG_AGO 0xffff
+ /*
+ * Number of seconds ago the file content was last
+ * read. The maximum value is about 18 hours.
+ */
+ uint16_t accessed;
+
+ uint8_t type; /* nxt_file_type_t */
+
+ /*
+ * Log open() file error with given log level if it is non zero.
+ * Note that zero log level is NXT_LOG_EMERG.
+ */
+ uint8_t log_level;
+
+ nxt_time_t mtime;
+ nxt_off_t size;
+} nxt_file_t;
+
+
+NXT_EXPORT nxt_int_t nxt_file_open(nxt_file_t *file, nxt_uint_t mode,
+ nxt_uint_t create, nxt_file_access_t access);
+
+#define nxt_file_open_n "open"
+
+
+/* The file open access modes. */
+#define NXT_FILE_RDONLY O_RDONLY
+#define NXT_FILE_WRONLY O_WRONLY
+#define NXT_FILE_RDWR O_RDWR
+#define NXT_FILE_APPEND (O_WRONLY | O_APPEND)
+
+/* The file creation modes. */
+#define NXT_FILE_CREATE_OR_OPEN O_CREAT
+#define NXT_FILE_OPEN 0
+#define NXT_FILE_TRUNCATE (O_CREAT | O_TRUNC)
+
+/* The file access rights. */
+#define NXT_FILE_DEFAULT_ACCESS 0644
+#define NXT_FILE_OWNER_ACCESS 0600
+
+
+NXT_EXPORT void nxt_file_close(nxt_file_t *file);
+NXT_EXPORT ssize_t nxt_file_write(nxt_file_t *file, const u_char *buf,
+ size_t size, nxt_off_t offset);
+NXT_EXPORT ssize_t nxt_file_read(nxt_file_t *file, u_char *buf, size_t size,
+ nxt_off_t offset);
+NXT_EXPORT void nxt_file_read_ahead(nxt_file_t *file, nxt_off_t offset,
+ size_t size);
+NXT_EXPORT nxt_int_t nxt_file_info(nxt_file_t *file, nxt_file_info_t *fi);
+
+
+#define \
+nxt_is_dir(fi) \
+ (S_ISDIR((fi)->st_mode))
+
+#define \
+nxt_is_file(fi) \
+ (S_ISREG((fi)->st_mode))
+
+#define \
+nxt_file_size(fi) \
+ (fi)->st_size
+
+#define \
+nxt_file_mtime(fi) \
+ (fi)->st_mtime
+
+
+NXT_EXPORT nxt_int_t nxt_file_delete(nxt_file_name_t *name);
+NXT_EXPORT nxt_int_t nxt_file_set_access(nxt_file_name_t *name,
+ nxt_file_access_t access);
+NXT_EXPORT nxt_int_t nxt_file_rename(nxt_file_name_t *old_name,
+ nxt_file_name_t *new_name);
+
+NXT_EXPORT nxt_int_t nxt_fd_nonblocking(nxt_fd_t fd);
+NXT_EXPORT nxt_int_t nxt_fd_blocking(nxt_fd_t fd);
+NXT_EXPORT ssize_t nxt_fd_write(nxt_fd_t fd, u_char *buf, size_t size);
+NXT_EXPORT ssize_t nxt_fd_read(nxt_fd_t fd, u_char *buf, size_t size);
+NXT_EXPORT void nxt_fd_close(nxt_fd_t fd);
+
+NXT_EXPORT nxt_int_t nxt_file_redirect(nxt_file_t *file, nxt_fd_t fd);
+NXT_EXPORT nxt_int_t nxt_file_stderr(nxt_file_t *file);
+NXT_EXPORT nxt_int_t nxt_stderr_start(void);
+
+
+#define nxt_stdout STDOUT_FILENO
+#define nxt_stderr STDERR_FILENO
+
+
+#define \
+nxt_write_console(fd, buf, size) \
+ write(fd, buf, size)
+
+#define \
+nxt_write_syslog(priority, message) \
+ syslog(priority, "%s", message)
+
+
+NXT_EXPORT nxt_int_t nxt_pipe_create(nxt_fd_t *pp, nxt_bool_t nbread,
+ nxt_bool_t nbwrite);
+NXT_EXPORT void nxt_pipe_close(nxt_fd_t *pp);
+
+NXT_EXPORT size_t nxt_dir_current(char *buf, size_t len);
+
+
+#endif /* _NXT_UNIX_FILE_H_INCLUDED_ */