Em qua., 8 de mai. de 2024 às 04:37, Nazir Bilal Yavuz <byavu...@gmail.com> escreveu:
> Hi Ranier, > > Thanks for looking into this! > > I am not sure why but your reply does not show up in the thread, so I > copied your reply and answered it in the thread for visibility. > > On Tue, 7 May 2024 at 16:28, Ranier Vilela <ranier...@gmail.com> wrote: > > > > I know it's coming from copy-and-paste, but > > I believe the flags could be: > > - dstfd = OpenTransientFile(tofile, O_RDWR | O_CREAT | O_EXCL | > PG_BINARY); > > + dstfd = OpenTransientFile(tofile, O_CREAT | O_WRONLY | O_TRUNC | > O_EXCL | PG_BINARY); > > > > The flags: > > O_WRONLY | O_TRUNC > > > > Allow the OS to make some optimizations, if you deem it possible. > > > > The flag O_RDWR indicates that the file can be read, which is not true > in this case. > > The destination file will just be written. > > You may be right about the O_WRONLY flag but I am not sure about the > O_TRUNC flag. > > O_TRUNC from the linux man page [1]: If the file already exists and is > a regular file and the access mode allows writing (i.e., is O_RDWR or > O_WRONLY) it will be truncated to length 0. If the file is a FIFO or > terminal device file, the O_TRUNC flag is ignored. Otherwise, the > effect of O_TRUNC is unspecified. > O_TRUNC is usually used in conjunction with O_WRONLY. See the example at: open.html <https://pubs.opengroup.org/onlinepubs/009696699/functions/open.html> O_TRUNC signals the OS to forget the current contents of the file, if it happens to exist. In other words, there will be no seeks, only and exclusively writes. > But it should be already checked if the destination directory already > exists in dbcommands.c file in createdb() function [2], so this should > not happen. > I'm not sure what you're referring to here. best regards, Ranier Vilela