summaryrefslogtreecommitdiffhomepage
path: root/src/core/ngx_file.c (follow)
AgeCommit message (Collapse)AuthorFilesLines
2018-12-24Win32: removed NGX_DIR_MASK concept.Maxim Dounin1-2/+2
Previous interface of ngx_open_dir() assumed that passed directory name has a room for NGX_DIR_MASK at the end (NGX_DIR_MASK_LEN bytes). While all direct users of ngx_dir_open() followed this interface, this also implied similar requirements for indirect uses - in particular, via ngx_walk_tree(). Currently none of ngx_walk_tree() uses provides appropriate space, and fixing this does not look like a right way to go. Instead, ngx_dir_open() interface was changed to not require any additional space and use appropriate allocations instead.
2018-08-01Dav: changed ngx_copy_file() to preserve access and mtime.Maxim Dounin1-9/+13
This fixes wrong permissions and file time after cross-device MOVE in the DAV module (ticket #1577). Broken in 8101d9101ed8 (0.8.9) when cross-device copying was introduced in ngx_ext_rename_file(). With this change, ngx_copy_file() always calls ngx_set_file_time(), either with the time provided, or with the time from the original file. This is considered acceptable given that copying the file is costly anyway, and optimizing cases when we do not need to preserve time will require interface changes.
2018-08-01Dav: fixed ngx_copy_file() to truncate destination file.Maxim Dounin1-2/+1
Previously, ngx_open_file(NGX_FILE_CREATE_OR_OPEN) was used, resulting in destination file being partially rewritten if exists. Notably, this affected WebDAV COPY command (ticket #1576).
2017-06-14Removed excessive casts for ngx_file_info().Ruslan Ermilov1-3/+1
2016-11-03Cache: prefix-based temporary files.Maxim Dounin1-5/+27
On Linux, the rename syscall can be slow due to a global file system lock, acquired for the entire rename operation, unless both old and new files are in the same directory. To address this temporary files are now created in the same directory as the expected resulting cache file when using the "use_temp_path=off" parameter. This change mostly reverts 99639bfdfa2a and 3281de8142f5, restoring the behaviour as of a9138c35120d (with minor changes).
2016-10-07Core: ngx_conf_set_access_slot() user access (ticket #1096).Maxim Dounin1-2/+6
Previously, user access bits were always set to "rw" unconditionally, even with "user:r" explicitly specified. With this change we only add default user access bits (0600) if they weren't set explicitly.
2016-07-06Use NGX_MAX_PATH_LEVEL where appropriate.Ruslan Ermilov1-10/+9
The macro was unused since 0.7.44.
2016-03-31Fixed logging.Sergey Kandaurov1-2/+2
2016-03-30Style.Ruslan Ermilov1-1/+1
2016-03-29Win32: additional error code NGX_EEXIST_FILE (ticket #910).Maxim Dounin1-2/+2
On Windows there are two possible error codes which correspond to the EEXIST error code: ERROR_FILE_EXISTS used by CreateFile(CREATE_NEW), and ERROR_ALREADY_EXISTS used by CreateDirectory(). MoveFile() seems to use both: ERROR_ALREADY_EXISTS when moving within one filesystem, and ERROR_FILE_EXISTS when copying a file to a different drive.
2016-03-18Threads: offloading of temp files writing to thread pools.Maxim Dounin1-0/+9
The ngx_thread_write_chain_to_file() function introduced, which uses ngx_file_t thread_handler, thread_ctx and thread_task fields. The task context structure (ngx_thread_file_ctx_t) is the same for both reading and writing, and can be safely shared as long as operations are serialized. The task->handler field is now always set (and not only when task is allocated), as the same task can be used with different handlers. The thread_write flag is introduced in the ngx_temp_file_t structure to explicitly enable use of ngx_thread_write_chain_to_file() in ngx_write_chain_to_temp_file() when supported by caller. In collaboration with Valentin Bartenev.
2015-04-07Core: limited levels of subdirectory hierarchy used for temp files.Sergey Kandaurov1-0/+4
Similar to ngx_http_file_cache_set_slot(), the last component of file->name with a fixed length of 10 bytes, as generated in ngx_create_temp_path(), is used as a source for the names of intermediate subdirectories with each one taking its own part. Ensure that the sum of specified levels with slashes fits into the length (ticket #731).
2015-04-07Core: removed excessive initialization in ngx_conf_set_path_slot().Sergey Kandaurov1-4/+0
Level hierarchy is pre-zeroed in ngx_pcalloc() of the surrounding ngx_path_t.
2015-04-07Core: fixed error handling on ngx_conf_full_name() failure.Sergey Kandaurov1-1/+1
2015-02-02Core: reverted prefix-based temp files (a9138c35120d).Roman Arutyunyan1-20/+8
The use_temp_path http cache feature is now implemented using a separate temp hierarchy in cache directory. Prefix-based temp files are no longer needed.
2015-02-02Core: supported directory skipping in ngx_walk_tree().Roman Arutyunyan1-1/+9
If pre_tree_handler() returns NGX_DECLINED, the directory is ignored.
2014-12-26Core: added prefix-based temporary files.Valentin Bartenev1-8/+20
Now, if the "path" parameter is NULL, ngx_create_temp_file() will use file->name as a predefined file path prefix.
2014-12-26Unified handling of ngx_create_temp_file() return value.Valentin Bartenev1-1/+1
The original check for NGX_AGAIN was surplus, since the function returns only NGX_OK or NGX_ERROR. Now it looks similar to other places. No functional changes.
2013-09-16Improved check for duplicate path names in ngx_add_path().Valentin Bartenev1-0/+8
The same path names with different "data" context should not be allowed. In particular it rejects configurations like this: proxy_cache_path /var/cache/ keys_zone=one:10m max_size=1g inactive=5m; proxy_cache_path /var/cache/ keys_zone=two:20m max_size=4m inactive=30s;
2013-09-16Removed surplus initializations from ngx_conf_set_path_slot().Valentin Bartenev1-3/+0
An instance of ngx_path_t is already zeroed by ngx_pcalloc().
2013-09-16Use ngx_pcalloc() in ngx_conf_merge_path_value().Valentin Bartenev1-5/+1
It initializes the "data" pointer of ngx_path_t that will be checked after subsequent changes.
2013-08-20Backed out f1a91825730a and 7094bd12c1ff.Maxim Dounin1-6/+2
While ngx_get_full_name() might have a bit more descriptive arguments, the ngx_conf_full_name() is generally easier to use when parsing configuration and limits exposure of cycle->prefix / cycle->conf_prefix details.
2013-08-06Replaced ngx_conf_full_name() with ngx_get_full_name().Valentin Bartenev1-2/+6
The ngx_get_full_name() function takes more readable arguments list.
2013-08-06Fixed memory leaks in the root and auth_basic_user_file directives.Valentin Bartenev1-0/+91
If a relative path is set by variables, then the ngx_conf_full_name() function was called while processing requests, which causes allocations from the cycle pool. A new function that takes pool as an argument was introduced.
2012-12-14Fixed handling of ngx_write_fd() and ngx_read_fd() errors.Valentin Bartenev1-4/+4
The ngx_write_fd() and ngx_read_fd() functions return -1 in case of error, so the incorrect comparison with NGX_FILE_ERROR (which is 0 on windows platforms) might result in inaccurate error message in the error log. Also the ngx_errno global variable is being set only if the returned value is -1.
2012-09-28Correct plural form for "path" in the whole source base.Andrey Belov1-6/+6
2012-04-03Fixed spelling in multiline C comments.Ruslan Ermilov1-1/+1
2012-01-18Copyright updated.Maxim Konovalov1-0/+1
2011-07-24elimination of reading cache files by cache loaderIgor Sysoev1-0/+1
2010-05-14ngx_str_set() and ngx_str_null()Igor Sysoev1-2/+1
2010-03-30do not set file time in ngx_copy_file() if the time is -1,Igor Sysoev1-4/+6
this fixes an issue when file is moved across devices
2009-12-17fix Win32 error message when an temporary file replaces an existent file:Igor Sysoev1-0/+4
return at once if ngx_win32_rename_file() was not failed and do not try to delete already the renamed temporary file
2009-12-15fix Win32 error messages when an temporary file replaces an existent file:Igor Sysoev1-11/+1
*) do not rename an already renamed file *) now ngx_win32_rename_file() returns error code *) do not log failure inside ngx_win32_rename_file()
2009-10-14ignore EACCES errors for top level directories in ngx_create_full_path()Igor Sysoev1-2/+11
2009-10-14do not create Win32 drive letter in ngx_create_full_path()Igor Sysoev1-1/+7
2009-08-21*) share temporary number between workersIgor Sysoev1-14/+9
*) randomize collision offset
2009-08-20test EXDEV after path creationIgor Sysoev1-1/+0
2009-08-20fix copy failure logging and stale files removal, introduced in r3025Igor Sysoev1-8/+17
2009-08-20fix copy destination name length, introduced in r3025Igor Sysoev1-2/+2
2009-08-13fix building on 64-bit platforms, introduced in r3025Igor Sysoev1-2/+2
2009-08-12allow cross device temporary files atomic copying:Igor Sysoev1-4/+170
*) ngx_copy_file() *) delete ngx_ext_rename_file_t.log_rename_error and .rename_error fields
2009-08-11NGX_ENOPATHIgor Sysoev1-15/+3
2009-08-10cache loader processIgor Sysoev1-1/+3
2009-05-28Win32 returns ERROR_PATH_NOT_FOUND instead of ERROR_FILE_NOT_FOUNDIgor Sysoev1-2/+8
2009-04-29uniform ngx_file_info() interface with ngx_fd_info()Igor Sysoev1-1/+3
2009-03-30introduce cache manager instead of cache cleanerIgor Sysoev1-2/+2
2009-03-23a prelimiary proxy cache supportIgor Sysoev1-1/+44
2009-02-24small optimization: " == NGX_ERROR" > " != NGX_OK"Igor Sysoev1-1/+1
2008-12-10use ngx_ext_rename_file() for single file MOVEIgor Sysoev1-7/+11
2008-06-17*) back out r2040Igor Sysoev1-1/+1
*) refactor ngx_palloc() *) introduce ngx_pnalloc() *) additional pool blocks have smaller header