Mercurial > hg > nginx-quic
comparison src/os/win32/ngx_files.c @ 3382:6be1f25bae90
fix Win32 error messages when an temporary file replaces an existent file:
*) do not rename an already renamed file
*) now ngx_win32_rename_file() returns error code
*) do not log failure inside ngx_win32_rename_file()
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 15 Dec 2009 13:47:02 +0000 |
parents | 26784c34e8be |
children | 15017418fd84 |
comparison
equal
deleted
inserted
replaced
3381:49f977515733 | 3382:6be1f25bae90 |
---|---|
185 | 185 |
186 return -1; | 186 return -1; |
187 } | 187 } |
188 | 188 |
189 | 189 |
190 ngx_int_t | 190 ngx_err_t |
191 ngx_win32_rename_file(ngx_str_t *from, ngx_str_t *to, ngx_log_t *log) | 191 ngx_win32_rename_file(ngx_str_t *from, ngx_str_t *to, ngx_log_t *log) |
192 { | 192 { |
193 u_char *name; | 193 u_char *name; |
194 ngx_int_t rc; | 194 ngx_err_t err; |
195 ngx_uint_t collision; | 195 ngx_uint_t collision; |
196 ngx_atomic_uint_t num; | 196 ngx_atomic_uint_t num; |
197 | 197 |
198 name = ngx_alloc(to->len + 1 + 10 + 1 + sizeof("DELETE"), log); | 198 name = ngx_alloc(to->len + 1 + 10 + 1 + sizeof("DELETE"), log); |
199 if (name == NULL) { | 199 if (name == NULL) { |
200 return NGX_ERROR; | 200 return NGX_ENOMEM; |
201 } | 201 } |
202 | 202 |
203 ngx_memcpy(name, to->data, to->len); | 203 ngx_memcpy(name, to->data, to->len); |
204 | 204 |
205 collision = 0; | 205 collision = 0; |
220 ngx_log_error(NGX_LOG_CRIT, log, ngx_errno, | 220 ngx_log_error(NGX_LOG_CRIT, log, ngx_errno, |
221 "MoveFile() \"%s\" to \"%s\" failed", to->data, name); | 221 "MoveFile() \"%s\" to \"%s\" failed", to->data, name); |
222 } | 222 } |
223 | 223 |
224 if (MoveFile((const char *) from->data, (const char *) to->data) == 0) { | 224 if (MoveFile((const char *) from->data, (const char *) to->data) == 0) { |
225 rc = NGX_ERROR; | 225 err = ngx_errno; |
226 | 226 |
227 } else { | 227 } else { |
228 rc = NGX_OK; | 228 err = 0; |
229 } | 229 } |
230 | 230 |
231 if (DeleteFile((const char *) name) == 0) { | 231 if (DeleteFile((const char *) name) == 0) { |
232 ngx_log_error(NGX_LOG_CRIT, log, ngx_errno, | 232 ngx_log_error(NGX_LOG_CRIT, log, ngx_errno, |
233 "DeleteFile() \"%s\" failed", name); | 233 "DeleteFile() \"%s\" failed", name); |
234 } | 234 } |
235 | 235 |
236 if (rc == NGX_ERROR) { | |
237 ngx_log_error(NGX_LOG_CRIT, log, ngx_errno, | |
238 "MoveFile() \"%s\" to \"%s\" failed", | |
239 from->data, to->data); | |
240 } | |
241 | |
242 /* mutex_unlock() */ | 236 /* mutex_unlock() */ |
243 | 237 |
244 ngx_free(name); | 238 ngx_free(name); |
245 | 239 |
246 return rc; | 240 return err; |
247 } | 241 } |
248 | 242 |
249 | 243 |
250 ngx_int_t | 244 ngx_int_t |
251 ngx_file_info(u_char *file, ngx_file_info_t *sb) | 245 ngx_file_info(u_char *file, ngx_file_info_t *sb) |