Merge pull request #3926 from MarcZX100/codex/carry-fclose-error
fix(libc): return fclose failures to callers
This commit is contained in:
commit
029c1bc17d
|
|
@ -122,11 +122,12 @@ public:
|
|||
SyncStatus();
|
||||
}
|
||||
|
||||
void Close() {
|
||||
int Close() {
|
||||
GetHandle();
|
||||
if (std::fclose(std::exchange(_handle, nullptr)) != 0) throw std::runtime_error("FileStream: close failed");
|
||||
const int result = std::fclose(std::exchange(_handle, nullptr));
|
||||
_guest.flags = 0;
|
||||
_guest.descriptor = -1;
|
||||
return result;
|
||||
}
|
||||
};
|
||||
static_assert(std::is_standard_layout_v<FileStream>);
|
||||
|
|
|
|||
|
|
@ -186,8 +186,7 @@ int APS5_VABI fopen_s_nid_postfix(FileStream** result, const char* filename, con
|
|||
int APS5_VABI fclose_nid_postfix(FileStream* stream) {
|
||||
GetNativeStream(stream);
|
||||
std::unique_ptr<FileStream> owner(stream->IsDynamic() ? stream : nullptr);
|
||||
stream->Close();
|
||||
return 0;
|
||||
return stream->Close();
|
||||
}
|
||||
|
||||
int APS5_VABI fseek_nid_postfix(FileStream* stream, std::int64_t offset, int origin);
|
||||
|
|
|
|||
|
|
@ -131,6 +131,14 @@ int main() {
|
|||
Require(stream != nullptr && std::fgetc(stream->GetHandle()) == 'k');
|
||||
fclose_nid_postfix(stream);
|
||||
|
||||
#ifndef _WIN32
|
||||
auto* full = std::fopen("/dev/full", "wb");
|
||||
Require(full != nullptr);
|
||||
auto* fullStream = new FileStream(full, true);
|
||||
Require(std::fwrite("buffered", 1, 8, full) == 8);
|
||||
Require(fclose_nid_postfix(fullStream) == EOF);
|
||||
#endif
|
||||
|
||||
std::filesystem::remove_all(dir);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue