pg_restore shows the following error instead of "Success" for broken compressed file.
pg_restore: error: could not close data file "d/3149.dat": zlib error: error reading or writing compressed file
0001:
cfclose() calls fatal() instead of returning the result to the callers on error, which isobviously okay for all existing callers that are handling errors from the function. Other callers ignored the returned value but we should fatal() on error of the function.
At least for me, gzerror doesn't return a message (specifically, returns NULL) after gzclose failure so currently cfclose shows its own messages for erros of gzclose(). Am I missing something?
0002:
cfread has the same code with get_cfp_error() and cfgetc uses sterror() after gzgetc(). It would be suitable for a separate patch, but 0002 fixes those bugs. I changed _EndBlob() to show the cause of an error.
Did not do in this patch:
We could do further small refactoring to remove temporary variables in pg_backup_directory.c for _StartData(), InitArchiveFmt_Directory, _LoadBlobs(), _StartBlobs() and _CloseArchive(), but I left them as is for the ease of back-patching.
Now that we have the file name in the context variable so we could show the file name in all error messages, but that change was large and there's a part where that change is a bit more complex so I didn't do that.
regards.
-- Kyotaro Horiguchi NTT Open Source Software Center