Thread

Commits

  1. Fix pg_truncate() on Windows.

  1. pg_ftruncate hardcodes length=0 but only under windows

    Justin Pryzby <pryzby@telsasoft.com> — 2023-01-06T03:16:53Z

    57faaf376 added pg_truncate(const char *path, off_t length), but
    "length" is ignored under WIN32 and the file is unconditionally
    truncated to 0.
    
    There's no live bug, since the only caller passes 0:
    
    | src/backend/storage/smgr/md.c:  ret = pg_truncate(path, 0);
    
    But I guess extension users could be unhappy under win32, so maybe a fix
    should be backpatched.
    
    diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c
    index d4a46f01583..926d000f2ea 100644
    --- a/src/backend/storage/file/fd.c
    +++ b/src/backend/storage/file/fd.c
    @@ -638,7 +638,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;
    
    
    
    
  2. Re: pg_ftruncate hardcodes length=0 but only under windows

    Thomas Munro <thomas.munro@gmail.com> — 2023-01-06T04:07:23Z

    On Fri, Jan 6, 2023 at 4:16 PM Justin Pryzby <pryzby@telsasoft.com> wrote:
    > -               ret = ftruncate(fd, 0);
    > +               ret = ftruncate(fd, length);
    
    Oops.  Right.  Thanks, pushed.