gfileutils: Use 'write' with 'count' <= max value of its return type

Limit `count` so that `write` can properly report the number of written bytes.

Limits:
 - POSIX: `SSIZE_MAX`
 - Windows: `INT_MAX`

Fixes: #2883
This commit is contained in:
CCode 2023-01-16 13:08:42 +00:00 committed by Philip Withnall
parent 5d0db7f0b8
commit e9e4d52de8

View File

@ -1143,8 +1143,13 @@ write_to_file (const gchar *contents,
{
gssize s;
s = write (fd, contents, MIN (length, G_MAXSIZE));
#ifdef G_OS_WIN32
/* 'write' on windows uses int types, so limit count to G_MAXINT */
s = write (fd, contents, MIN (length, (gsize) G_MAXINT));
#else
/* Limit count to G_MAXSSIZE to fit into the return value. */
s = write (fd, contents, MIN (length, (gsize) G_MAXSSIZE));
#endif
if (s < 0)
{
int saved_errno = errno;