Re: A micro-optimisation for walkdir()
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Thomas Munro <thomas.munro@gmail.com>
Cc: Juan José Santamaría Flecha <juanjo.santamaria@gmail.com>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2020-09-03T15:31:40Z
Lists: pgsql-hackers
Thomas Munro <thomas.munro@gmail.com> writes:
> On Thu, Sep 3, 2020 at 5:36 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> Both of these concerns would abate if we had get_dirent_type()
>> just throw an error itself when stat() fails, thereby removing the
>> PGFILETYPE_ERROR result code. I'm not 100% sold either way on
>> that, but it's something to think about. Is there ever going
>> to be a reason for the caller to ignore an error?
> Hmm. Well I had it like that in an earlier version, but then I
> couldn't figure out the right way to write code that would work in
> both frontend and backend code, without writing two copies in two
> translation units, or putting the whole thing in a header. What
> approach do you prefer?
Well, there are plenty of places in src/port/ where we do things like
#ifndef FRONTEND
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not get junction for \"%s\": %s",
path, msg)));
#else
fprintf(stderr, _("could not get junction for \"%s\": %s\n"),
path, msg);
#endif
I don't see a compelling reason why this function couldn't report
stat() failures similarly, especially if we're just going to have
the callers do exactly the same thing as that anyway.
regards, tom lane
Commits
-
Add d_type to our Windows dirent emulation.
- 87e6ed7c8c6a 14.0 landed
-
Skip unnecessary stat() calls in walkdir().
- 861c6e7c8e4d 14.0 landed