blob: df2ee3a9e8dd7f3b0ffc514da77f4075ffeed704 [file] [log] [blame]
/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the mingw-w64 runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
#include <stdio.h>
#include <errno.h>
wchar_t *__cdecl fgetws(wchar_t * __restrict__ _Dst, int _SizeInWords, FILE * __restrict__ _File)
{
wchar_t format[19];
int count;
int ret;
if (_Dst == NULL || _SizeInWords <= 0)
{
errno = EINVAL;
return NULL;
}
if (_SizeInWords == 1)
{
_Dst[0] = L'\0';
return _Dst;
}
/* _SizeInWords-1 must be positive as it is maximum width for %l[ format */
if (_swprintf(format, L"%%%dl[^\n]%%n", _SizeInWords-1) < 0)
{
return NULL;
}
ret = __ms_fwscanf(_File, format, _Dst, &count);
/* fwscanf() returns zero if the format "%l[^\n]" does not match any character
* which means that the first character in _File has to be new line */
if (ret == 0)
{
_Dst[0] = L'\0';
count = 0;
ret = 2;
}
if (ret < 2)
{
return NULL;
}
if (count < _SizeInWords-1)
{
if (__ms_fwscanf(_File, L"%1l[\n]", &_Dst[count]) == 1)
{
count++;
}
}
return _Dst;
}