diff options
author | Daniel Stenberg <daniel@haxx.se> | 2021-05-06 16:42:04 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2021-05-06 16:42:09 +0200 |
commit | 1f831123757f092ef1aef6317a1f7d7e5604cc09 (patch) | |
tree | a04828297d9c2a4745d550aaa0740cb75a662f8d /lib/rename.c | |
parent | 577f19397c3545da7b0162677e2783d188e74ae1 (diff) | |
download | curl-bagder/lock-output-files.tar.gz |
lib: when saving files, use advisory locksbagder/lock-output-files
... instead of saving into a temp name and rename. This makes them work
properly when the output is a character device. Applies to cookies,
alt-svc and hsts files.
Makes Curl_rename superfluous and therefore removed.
Reported-by: rofl0r on github
Assisted-by: Paul Vixie
Fixes #6882
Closes #6884
Diffstat (limited to 'lib/rename.c')
-rw-r--r-- | lib/rename.c | 71 |
1 files changed, 0 insertions, 71 deletions
diff --git a/lib/rename.c b/lib/rename.c deleted file mode 100644 index f858d4369..000000000 --- a/lib/rename.c +++ /dev/null @@ -1,71 +0,0 @@ -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 2020, Daniel Stenberg, <daniel@haxx.se>, et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ - -#include "rename.h" - -#include "curl_setup.h" - -#if (!defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_COOKIES)) || \ - !defined(CURL_DISABLE_ALTSVC) - -#include "curl_multibyte.h" -#include "timeval.h" - -/* The last 3 #include files should be in this order */ -#include "curl_printf.h" -#include "curl_memory.h" -#include "memdebug.h" - -/* return 0 on success, 1 on error */ -int Curl_rename(const char *oldpath, const char *newpath) -{ -#ifdef WIN32 - /* rename() on Windows doesn't overwrite, so we can't use it here. - MoveFileEx() will overwrite and is usually atomic, however it fails - when there are open handles to the file. */ - const int max_wait_ms = 1000; - struct curltime start = Curl_now(); - TCHAR *tchar_oldpath = curlx_convert_UTF8_to_tchar((char *)oldpath); - TCHAR *tchar_newpath = curlx_convert_UTF8_to_tchar((char *)newpath); - for(;;) { - timediff_t diff; - if(MoveFileEx(tchar_oldpath, tchar_newpath, MOVEFILE_REPLACE_EXISTING)) { - curlx_unicodefree(tchar_oldpath); - curlx_unicodefree(tchar_newpath); - break; - } - diff = Curl_timediff(Curl_now(), start); - if(diff < 0 || diff > max_wait_ms) { - curlx_unicodefree(tchar_oldpath); - curlx_unicodefree(tchar_newpath); - return 1; - } - Sleep(1); - } -#else - if(rename(oldpath, newpath)) - return 1; -#endif - return 0; -} - -#endif |