Fix pg_truncate() on Windows.
authorThomas Munro
Fri, 6 Jan 2023 03:38:46 +0000 (16:38 +1300)
committerThomas Munro
Fri, 6 Jan 2023 03:50:23 +0000 (16:50 +1300)
Commit 57faaf376 added pg_truncate(const char *path, off_t length), but
"length" was ignored under WIN32 and the file was unconditionally
truncated to 0.

There was no live bug, since the only caller passes 0.

Fix, and back-patch to 14 where the function arrived.

Author: Justin Pryzby 
Discussion: https://postgr.es/m/20230106031652.GR3109%40telsasoft.com

src/backend/storage/file/fd.c

index e76daff4951acf94e99c01d11e73de7f8b539af0..3933c06ecc84308f990f0c8cf22e0c492af73042 100644 (file)
@@ -642,7 +642,7 @@ pg_truncate(const char *path, off_t length)
    fd = OpenTransientFile(path, O_RDWR | PG_BINARY);
    if (fd >= 0)
    {
-       ret = ftruncate(fd, 0);
+       ret = ftruncate(fd, length);
        save_errno = errno;
        CloseTransientFile(fd);
        errno = save_errno;