mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-21 02:32:06 +00:00
Revert "Prevent RGBASM from outputting corrupted files"
This reverts commit 06fe27c516.
According to Microsoft's documentation
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tmpfile?view=vs-2019
`tmpfile` attempts to create the temporary file at the **root** folder
This seems to assume that the user has admin rights; might be a compat
thing, idk, but it breaks on people's computers.
(CI didn't catch it, annoyingly.)
Reverting to make RGBASM usable on most Windows computers.
(Sanely-configured ones, at least.)
Another solution to #446 needs to be figured out, yay...
This commit is contained in:
@@ -381,12 +381,13 @@ static void registerExportedSymbol(struct sSymbol *symbol, void *arg)
|
||||
*/
|
||||
void out_WriteObject(void)
|
||||
{
|
||||
FILE *f;
|
||||
struct Section *pSect;
|
||||
struct Assertion *assert = assertions;
|
||||
FILE *f = tmpfile(); /* Avoids producing a corrupted file on error */
|
||||
|
||||
f = fopen(tzObjectname, "wb");
|
||||
if (!f)
|
||||
err(1, "Couldn't create temporary file");
|
||||
err(1, "Couldn't write file '%s'", tzObjectname);
|
||||
|
||||
/* Also write exported symbols that weren't written above */
|
||||
sym_ForEach(registerExportedSymbol, NULL);
|
||||
@@ -413,31 +414,6 @@ void out_WriteObject(void)
|
||||
assert = assert->next;
|
||||
}
|
||||
|
||||
/* We're finished writing the file; now, copy it to the final one */
|
||||
FILE *objFile = fopen(tzObjectname, "wb");
|
||||
long size = ftell(f);
|
||||
char buf[1024];
|
||||
|
||||
rewind(f);
|
||||
while (size) {
|
||||
long blockSize = size < sizeof(buf) ? size : sizeof(buf);
|
||||
|
||||
if (fread(buf, blockSize, 1, f) < 1
|
||||
|| fwrite(buf, blockSize, 1, objFile) < 1) {
|
||||
char const *errmsg =
|
||||
ferror(f) || ferror(objFile) ? strerror(errno)
|
||||
: "end of file";
|
||||
|
||||
fclose(objFile);
|
||||
fclose(f);
|
||||
remove(tzObjectname);
|
||||
errx(1, "Failed to write file \"%s\": %s", tzObjectname,
|
||||
errmsg);
|
||||
}
|
||||
size -= blockSize;
|
||||
}
|
||||
|
||||
fclose(objFile);
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user