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)