Don't clobber files with two-argument -a (also some minor cleanups)

This commit is contained in:
Alcaro 2021-05-18 20:09:04 +02:00
parent 5a3d2012b8
commit 931d7465d9
7 changed files with 27 additions and 14 deletions

View File

@ -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);

View File

@ -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 {

View File

@ -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 {

View File

@ -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);

View File

@ -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)

View File

@ -1,4 +1,4 @@
#include "flips.h"
#include <windows.h>
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

View File

@ -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;