From 870664ea57bb654f26372c1e0ec3b8b6f903b029 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Wed, 27 Dec 2023 23:19:05 +0800 Subject: [PATCH] src/streamfer-client: *.last: Use ".new" + rename - vps2 CIFS did make the *.last files 0-sized --- src/streamfer-client.C | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/streamfer-client.C b/src/streamfer-client.C index ce4e923..b2b9a61 100644 --- a/src/streamfer-client.C +++ b/src/streamfer-client.C @@ -19,16 +19,19 @@ static string get_string(FILE *f,const char *fn,const char *what) { } static void last_stored_write(const char *last_stored_fn,const string &filename,uint64_t offset) { - int last_stored_fd(open(last_stored_fn,O_WRONLY|O_CREAT|O_TRUNC,0644)); - if (last_stored_fd==-1) - fatal("Error storing filename to %s: %m",last_stored_fn); - write_safe(last_stored_fd,filename.c_str(),filename.length()); - write_safe(last_stored_fd,'\n'); + std::string last_tmp_fn(std::string(last_stored_fn)+".new"); + int last_tmp_fd(open(last_tmp_fn.c_str(),O_WRONLY|O_CREAT|O_TRUNC,0644)); + if (last_tmp_fd==-1) + fatal("Error storing filename to %s: %m",last_tmp_fn.c_str()); + write_safe(last_tmp_fd,filename.c_str(),filename.length()); + write_safe(last_tmp_fd,'\n'); string offsetstr(stringf("%zu",(size_t)offset)); - write_safe(last_stored_fd,offsetstr.c_str(),offsetstr.length()); - write_safe(last_stored_fd,'\n'); - if (close(last_stored_fd)) - fatal("Error closing %s: %m",last_stored_fn); + write_safe(last_tmp_fd,offsetstr.c_str(),offsetstr.length()); + write_safe(last_tmp_fd,'\n'); + if (close(last_tmp_fd)) + fatal("Error closing %s: %m",last_tmp_fn.c_str()); + if (rename(last_tmp_fn.c_str(),last_stored_fn)) + fatal("Error renaming %s->%s: %m",last_tmp_fn.c_str(),last_stored_fn); } static string my_basename(const string &path) { -- 1.8.3.1