Hello!
#ifdef WIN32
+ if (! GetDiskFreeSpaceEx(tblspcPath, &lpFreeBytesAvailable, NULL, NULL))
+ elog(ERROR, "GetDiskFreeSpaceEx failed: error code %lu", GetLastError());
+
+ return lpFreeBytesAvailable.QuadPart; /* ULONGLONG part of ULARGE_INTEGER */
+#else
Shouldn't this use proper error codes similar to the else branch, and
also _dosmaperr?
There's also a behavior difference here compared to Linux, it returns
-1 on ENOENT, the Windows version errors out on the matching
condition.
+ " wHERE db.datname OPERATOR(pg_catalog.=)
pg_catalog.current_database()) dbsub\n");
typo, should be WHERE
+ (errcode_for_file_access(),
+ errmsg("could not statvfs directory \"%s\": %m", tblspcPath)));
Is this error message user friendly? Wouldn't be something like "could
not get free disk space for directory" be better?
+ Returns the available disk space in the tablespace with the
+ specified name or OID.
Does the tablespace have a disk space? Maybe "returns the space on the
filesystem hosting the tablespace"?
+ return fst.f_bavail * fst.f_frsize; /* available blocks times fragment size */
> There is some code that does int width expansion, but I believe we
> don't need that since the `fst.f_bavail * fst.f_frsize` multiplication
> takes care of converting that to int64 (if it wasn't already 64bits
> before).
I don't think this is the case, we first multiply and then cast.
Multiplication still happens with 32 bit types.
Relevant parts on Godbolt: https://godbolt.org/z/7dj7crf6K