On Mon, Sep 26, 2022 at 08:33:53PM +0530, Bharath Rupireddy wrote: > Irrespective of what Windows does with file pointers in WriteFile(), > should we add lseek(SEEK_SET) in our own pwrite()'s implementation, > something like [5]? This is rather hackish without fully knowing what > Windows does internally in WriteFile(), but this does fix inherent > issues that our pwrite() callers (there are quite a number of places > that use pwrite() and presumes file pointer doesn't change on Windows) > may have on Windows. See the regression tests passing [6] with the fix > [5].
I think so. I don't see why we would rather have each caller ensure pwrite() behaves as documented. > + /* > + * On Windows, it is found that WriteFile() changes the file > pointer and we > + * want pwrite() to not change. Hence, we explicitly reset the > file pointer > + * to beginning of the file. > + */ > + if (lseek(fd, 0, SEEK_SET) != 0) > + { > + _dosmaperr(GetLastError()); > + return -1; > + } > + > return result; > } Why reset to the beginning of the file? Shouldn't we reset it to what it was before the call to pwrite()? -- Nathan Bossart Amazon Web Services: https://aws.amazon.com