Fix cross-device editing failures

This resolves Bug 2215
pull/2/head
Timothy Pearson 9 years ago
parent 4c2accb349
commit 7690d56228

@ -1,6 +1,7 @@
/*
*
* Copyright (c) 2008-2011 Erich Hoover
* Copyright (c) 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net>
*
* libr libbfd Backend - Add resources into ELF binaries using libbfd
*
@ -320,23 +321,36 @@ int safe_rename(const char *old, const char *new)
{
char buffer[1024];
FILE *in, *out;
int read;
size_t read;
int status_in;
int status_out;
in = fopen(old, "r");
if(!in)
if(!in) {
return -1;
}
out = fopen(new, "w");
if(!out)
if(!out) {
fclose(in);
return -1;
while(!feof(in) && !ferror(in))
{
}
while(!feof(in) && !ferror(in)) {
read = fread(buffer, 1, sizeof(buffer), in);
fwrite(buffer, read, 1, out);
if (read > 0) {
fwrite(buffer, 1, read, out);
}
if (ferror(in) || ferror(out)) {
fclose(in);
fclose(out);
remove(new);
return -1;
}
}
status_in = ferror(in);
status_out = ferror(out);
fclose(in);
fclose(out);
if(ferror(in))
{
if(status_in || status_out) {
remove(new);
return -1;
}

Loading…
Cancel
Save