https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101510
--- Comment #7 from Madhu <enometh at meer dot net> --- * "redi at gcc dot gnu.org" <bug-101510-34102-7eipfel...@http.gcc.gnu.org/bugzilla/> Wrote on Tue, 20 Jul 2021 16:00:55 +0000 >> I was going by the usage from databasePath() in >> https://github.com/WebKit/WebKit/blob/main/Source/WebKit/NetworkProcess/ >> WebStorage/LocalStorageDatabaseTracker.cpp#L142 >> which calls ensureDatabaseDirectoryExists() in >> https://github.com/WebKit/WebKit/blob/main/Source/WebCore/platform/sql/ >> SQLiteFileSystem.cpp#L59 >> which calls makeAllDirectories() >> https://github.com/WebKit/WebKit/blob/main/Source/WTF/wtf/FileSystem.cpp#L733 >> >> The check is for only on the boolean value of ec, which is wrong >> according to the spec, Thanks! > > That looks correct to me. It's the same as the example as I showed above. > > If ec does not have a value, it means no error occurred. That means either the > directory was created, or already exists. > >> Instead of precipitately filing the bug here I should have filed it >> with WebKit. > > Are you *actually* seeing incorrect behaviour, or just concluding > there is a bug by reading the code? [There is a problem and I misread the code at first.] The databasePath() function in the first reference consumes a boolean value which is false and incorrectly assumes there is an error. (it correctly reports that the directory could not be created, but then it assumes that the directory does not exist.) This is incorrect behaviour when the name does resolve to a directory The semantics really mean that the boolean value of ec should be ignored for this usage pattern where you want to ensure a directory exists.