Re: Fix fseek() detection of unseekable files on WIN32 - Mailing list pgsql-hackers

From Juan José Santamaría Flecha
Subject Re: Fix fseek() detection of unseekable files on WIN32
Date
Msg-id CAC+AXB3BgqAQ4Fmj2h2DhUXyNL1TqH6mi_+nGh+aGun-grF-kQ@mail.gmail.com
Whole thread Raw
In response to Re: Fix fseek() detection of unseekable files on WIN32  (Michael Paquier <michael@paquier.xyz>)
Responses Re: Fix fseek() detection of unseekable files on WIN32  (Michael Paquier <michael@paquier.xyz>)
List pgsql-hackers

On Wed, Mar 15, 2023 at 5:57 AM Michael Paquier <michael@paquier.xyz> wrote:
On Tue, Mar 14, 2023 at 01:26:27PM +0100, Juan José Santamaría Flecha wrote:
> As highlighted in [1] fseek() might fail to error even when accessing
> unseekable streams.
>
> PFA a patch that checks the file type before the actual fseek(), so only
> supported calls are made.

+ * streams, so harden that funcion with our version.
s/funcion/function/.

Done.

+extern int     pgfseek64(FILE *stream, pgoff_t offset, int origin);
+extern pgoff_t pgftell64(FILE *stream);
+#define fseeko(stream, offset, origin) pgfseek64(stream, offset, origin)
+#define ftello(stream) pgftell64(stream)

What about naming the internal wrappers _pgfseeko64() and
_pgftello64(), located in a new file named win32fseek.c?  It may be
possible that we would need a similar treatment for fseek(), in the
future, though I don't see an issue why this would be needed now.

Done.
 
+   if (GetFileType((HANDLE) _get_osfhandle(_fileno(stream))) != FILE_TYPE_DISK)
+   {
+       errno = ESPIPE;
+       return -1;
+   }
Shouldn't there be cases where we should return EINVAL for some of the
other types, like FILE_TYPE_REMOTE or FILE_TYPE_UNKNOWN?  We should
return ESPIPE only for FILE_TYPE_PIPE and FILE_TYPE_CHAR, then?

Done.

PFA a new version of the patch.

Regards,

Juan José Santamaría Flecha
Attachment

pgsql-hackers by date:

Previous
From: Daniel Gustafsson
Date:
Subject: Re: postgres_fdw: Useless if-test in GetConnection()
Next
From: Peter Eisentraut
Date:
Subject: Re: Documentation for building with meson