Hi Reuben,

Thanks for working on this refactoring.

Reuben Thomas wrote:
> Here's a revised version of my patch.

A couple of comments. Yes I heard that it's not so much fun to hear picky
comments, but quality...

- The function _copy_file_preserving is not declared nor used outside
  that file. Hence it ought to be marked 'static'.

- But actually the function copy_file_preserving_error is equivalent to
  _copy_file_preserving. So why not just rename _copy_file_preserving
  to copy_file_preserving_error and ditch the one-line wrapper?

- About the naming of the function. We already have two conventions for
  a new function that does not signal an error:
    - In set-mode-acl.c the prefix 'q' (for "quiet").
    - In gl_xoset.h the prefix 'nx_' (as an antagonism to the prefix 'x').
  It would be good if you could adhere to one of these conventions instead
  of inventing a third one.

- In the 'case GL_COPY_ERR_ACL' the function copy_acl() has already
  emitted an error message. What you want, I think, is to call qcopy_acl()
  instead of copy_acl. But qcopy_acl is not yet public. Let me address this
  in a separate patch.

> Is there no way to deal with error messages normally, i.e. via
> gnulib's strerror? Then the error-returning copy_file_preserving could
> replace the aborting version, and users who want to could check the
> return code and issue errors in the usual way.

This would be a regression on the quality of the messages. There is no
errno code for "cannot open backup file for writing".

<errno.h> contains shorthands for the most commonly encountered error
cases. It is absolutely normal that more specialized functions have to
invent their own error codes.

Finally, in the unit test,

  - Please use ASSERT (from macros.h) instead of assert (from <assert.h>).
    (Remember that assert() is eliminated if NDEBUG is not defined.)

  - For structuring the test code, better move all the code that tests
    copy_file_preserving() into a function of its own, and the new code
    that tests copy_file_preserving_error() also into a function of its own.
    Like it is done in test-regex-quote.c or test-xvasprintf.c.

Bruno


Reply via email to