reactos/sdk/lib/ucrt/stdio/_freebuf.cpp

33 lines
893 B
C++

//
// _freebuf.cpp
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// Defines __acrt_stdio_free_buffer(), which releaes a buffer from a stream.
//
#include <corecrt_internal_stdio.h>
// Releases a buffer from a stream. If the stream is buffered and the buffer
// was allocated by the CRT, the space is freed. If the buffer was provided by
// the user, it is not freed (since we do not know how to free it).
extern "C" void __cdecl __acrt_stdio_free_buffer_nolock(FILE* const public_stream)
{
_ASSERTE(public_stream != nullptr);
__crt_stdio_stream const stream(public_stream);
if (!stream.is_in_use())
return;
if (!stream.has_crt_buffer())
return;
_free_crt(stream->_base);
stream.unset_flags(_IOBUFFER_CRT | _IOBUFFER_SETVBUF);
stream->_base = nullptr;
stream->_ptr = nullptr;
stream->_cnt = 0;
}