From 931d7465d95e2261c985502929b6643e8a4b7d85 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Tue, 18 May 2021 20:09:04 +0200 Subject: [PATCH] Don't clobber files with two-argument -a (also some minor cleanups) --- flips-cli.cpp | 2 +- flips-gtk.cpp | 8 +++++++- flips-w32.cpp | 1 + flips.cpp | 15 ++++++++++++++- flips.h | 5 ----- flips.rc | 8 ++------ global.h | 2 ++ 7 files changed, 27 insertions(+), 14 deletions(-) diff --git a/flips-cli.cpp b/flips-cli.cpp index 61544ba..16b4b93 100644 --- a/flips-cli.cpp +++ b/flips-cli.cpp @@ -7,10 +7,10 @@ #ifdef FLIPS_CLI file* file::create(const char * filename) { return file::create_libc(filename); } +bool file::exists(const char * filename) { return file::exists_libc(filename); } filewrite* filewrite::create(const char * filename) { return filewrite::create_libc(filename); } filemap* filemap::create(const char * filename) { return filemap::create_fallback(filename); } - int main(int argc, char * argv[]) { return flipsmain(argc, argv); diff --git a/flips-gtk.cpp b/flips-gtk.cpp index 6e97771..8142e53 100644 --- a/flips-gtk.cpp +++ b/flips-gtk.cpp @@ -27,7 +27,6 @@ public: static file* create(const char * filename) { GFile* file = g_file_new_for_commandline_arg(filename); - if (!file) return NULL; GFileInputStream* io=g_file_read(file, NULL, NULL); g_object_unref(file); if (!io) return NULL; @@ -56,6 +55,13 @@ public: }; file* file::create(const char * filename) { return file_gtk::create(filename); } +bool file::exists(const char * filename) +{ + GFile* file = g_file_new_for_commandline_arg(filename); + bool ret = g_file_query_exists(file, NULL); + g_object_unref(file); + return ret; +} class filewrite_gtk : public filewrite { diff --git a/flips-w32.cpp b/flips-w32.cpp index d2003c8..fcc6c6b 100644 --- a/flips-w32.cpp +++ b/flips-w32.cpp @@ -45,6 +45,7 @@ public: }; file* file::create(LPCWSTR filename) { return file_w32::create(filename); } +bool file::exists(LPCWSTR filename) { return GetFileAttributes(filename) != INVALID_FILE_ATTRIBUTES; } class filewrite_w32 : public filewrite { diff --git a/flips.cpp b/flips.cpp index 6e82fee..fe6434d 100644 --- a/flips.cpp +++ b/flips.cpp @@ -109,6 +109,12 @@ public: ~file_libc() { fclose(io); } }; file* file::create_libc(const char * filename) { return file_libc::create(filename); } +bool file::exists_libc(const char * filename) +{ + FILE* f = fopen(filename, "rb"); + if (f) fclose(f); + return (bool)f; +} class filewrite_libc : public filewrite { @@ -811,7 +817,7 @@ struct errorinfo ApplyPatchMem2(file* patch, struct mem inrom, bool verifyinput, # ifdef __GNUC__ # pragma GCC diagnostic ignored "-Wformat" # endif -# define z "I64" +# define z "I" # else # define z "" # endif @@ -1364,6 +1370,13 @@ int flipsmain(int argc, WCHAR * argv[]) wcscpy(outname_buf, arg[0]); wcscpy(GetExtension(outname_buf), base_ext); outname = outname_buf; + if (wcscmp(arg[1], outname) != 0 && file::exists(outname)) + { + wprintf(TEXT("You have requested creation of file %s, but that file already exists.\n" + "If you want to overwrite it, supply that filename explicitly; if not, provide another filename.\n"), + outname); + return 1; + } } struct errorinfo errinf=ApplyPatch(arg[0], arg[1], !ignoreChecksum, outname, &manifestinfo, false); free(outname_buf); diff --git a/flips.h b/flips.h index aac3992..c11740c 100644 --- a/flips.h +++ b/flips.h @@ -35,11 +35,6 @@ //#endif #define flipsversion "Floating IPS" -#define flips_rc_vermajor 1 -#define flips_rc_verminor 4 -#define flips_rc_verpatch 0 -#define flips_rc_verstr "1.4.0.0" -#define flips_rc_copyrightstr "\xA9 2013-2020 Alcaro" #if defined(FLIPS_WINDOWS) diff --git a/flips.rc b/flips.rc index d3dbcea..8c9f0b4 100644 --- a/flips.rc +++ b/flips.rc @@ -1,4 +1,4 @@ -#include "flips.h" +#include 0 ICON DISCARDABLE "flips.ico" 1 ICON DISCARDABLE "ips.ico" @@ -6,8 +6,6 @@ 1 24 "flips.Manifest" VS_VERSION_INFO VERSIONINFO -//FILEVERSION flips_rc_vermajor,flips_rc_verminor,flips_rc_verpatch,0 -//PRODUCTVERSION flips_rc_vermajor,flips_rc_verminor,flips_rc_verpatch,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS 0 //VS_FF_DEBUG VS_FF_PATCHED VS_FF_PRERELEASE VS_FF_PRIVATEBUILD VS_FF_SPECIALBUILD VS_FFI_FILEFLAGSMASK @@ -21,12 +19,10 @@ BEGIN BEGIN VALUE "CompanyName", "Alcaro" VALUE "FileDescription", "Flips Patch Utility" - VALUE "FileVersion", flips_rc_verstr VALUE "InternalName", "Floating IPS" - VALUE "LegalCopyright", flips_rc_copyrightstr + VALUE "LegalCopyright", "\xA9 2013-2021 Alcaro" VALUE "OriginalFilename", "flips.exe" VALUE "ProductName", "Floating IPS" - //VALUE "ProductVersion", flips_rc_verstr END END END diff --git a/global.h b/global.h index 39828dc..d4940e6 100644 --- a/global.h +++ b/global.h @@ -31,6 +31,8 @@ class file { public: static file* create(LPCWSTR filename); static file* create_libc(const char * filename); + static bool exists(LPCWSTR filename); + static bool exists_libc(const char * filename); virtual size_t len() = 0; virtual bool read(uint8_t* target, size_t start, size_t len) = 0;