From 5819c890af23272db0ff44c50bf570960cdf175e Mon Sep 17 00:00:00 2001 From: liquidaty Date: Tue, 25 Jun 2024 11:17:49 -0700 Subject: [PATCH] Revert zsv_fopen_wx (#175) * Revert "add zsv_fopen_wx to util/file; use exclusive write for zvs_file_copy (#173)" This reverts commit 50a7c836ae3a52a67125489687c18e9cb4dfa852, except for: - change configure/Makefile to work for compilers that do not work with -static --- app/utils/file.c | 56 +++++++++++----------------------------- include/zsv/utils/file.h | 6 ----- 2 files changed, 15 insertions(+), 47 deletions(-) diff --git a/app/utils/file.c b/app/utils/file.c index a3600cb..c8da6aa 100644 --- a/app/utils/file.c +++ b/app/utils/file.c @@ -119,28 +119,6 @@ int zsv_file_exists(const char* filename) { } #endif -/** - * Open a file for exclusive write (same as fopen() but opens exclusively) - * mode must be 'w' or 'wb' - */ -FILE* zsv_fopen_wx(const char *filename, const char *mode) { - if(!mode || (strcmp(mode, "w") && strcmp(mode, "wb"))) { - fprintf(stderr, "fopen_wbx mode must be 'w' or 'wb'; got %s\n", mode ? mode : "(none)"); - return NULL; - } - - int fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0644); // exclusive binary write - if(fd == -1) { - return NULL; - } - - FILE *file = fdopen(fd, "wb"); // Convert to FILE* - if(file == NULL) - close(fd); - - return file; -} - /** * Copy a file, given source and destination paths * On error, output error message and return non-zero @@ -155,22 +133,16 @@ int zsv_copy_file(const char *src, const char *dest) { // copy the file int err = 0; FILE *fsrc = fopen(src, "rb"); - if(!fsrc) { - err = errno ? errno : -1; - perror(src); - } else { - FILE *fdest = zsv_fopen_wx(dest, "wb"); - if(!fdest) { - err = errno ? errno : -1; - perror(dest); - } else { + if(!fsrc) + err = errno ? errno : -1, perror(src); + else { + FILE *fdest = fopen(dest, "wb"); + if(!fdest) + err = errno ? errno : -1, perror(dest); + else { err = zsv_copy_file_ptr(fsrc, fdest); - if(err) { - if(err < 0) - fprintf(stderr, "Unknown error copying %s to %s\n", src, dest); - else - perror(dest); - } + if(err) + perror(dest); fclose(fdest); } fclose(fsrc); @@ -183,14 +155,16 @@ int zsv_copy_file(const char *src, const char *dest) { * Return error number per errno.h */ int zsv_copy_file_ptr(FILE *src, FILE *dest) { - errno = 0; + int err = 0; char buffer[4096]; size_t bytes_read; while((bytes_read = fread(buffer, 1, sizeof(buffer), src)) > 0) { - if(fwrite(buffer, 1, bytes_read, dest) != bytes_read) - return errno ? errno : -1; + if(fwrite(buffer, 1, bytes_read, dest) != bytes_read) { + err = errno ? errno : -1; + break; + } } - return errno; + return err; } size_t zsv_dir_len_basename(const char *filepath, const char **basename) { diff --git a/include/zsv/utils/file.h b/include/zsv/utils/file.h index dc44c59..127a259 100644 --- a/include/zsv/utils/file.h +++ b/include/zsv/utils/file.h @@ -61,12 +61,6 @@ size_t zsv_filter_write(void *FILEp, unsigned char *buff, size_t bytes_read); */ size_t zsv_dir_len_basename(const char *filepath, const char **basename); -/** - * Open a file for exclusive write (same as fopen() but opens exclusively) - * mode must be 'w' or 'wb' - */ -FILE* zsv_fopen_wx(const char *filename, const char *mode); - /** * Copy a file. Create any needed directories * On error, prints error message and returns non-zero