git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v3 10/13] rerere.c: move error_errno() closer to the source system call

From
Stefan Beller <sbeller@google.com>
Date
May 30, 2017, 18:58 UTC
Message-ID
<CAGZ79kayr3QkdQaVe3cmPyWa2mJQmBxhe=XBMzaLWkJU6U+zsA@mail.gmail.com>
In-Reply-To
<20170526033510.1793-11-gitster@pobox.com>
On Thu, May 25, 2017 at 8:35 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 22 quoted lines
> From: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
>
> We are supposed to report errno from fopen(). fclose() between fopen()
> and the report function could either change errno or reset it.
>
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> ---
>  rerere.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/rerere.c b/rerere.c
> index 1351b0c3fb..c26c29f87a 100644
> --- a/rerere.c
> +++ b/rerere.c
> @@ -489,8 +489,9 @@ static int handle_file(const char *path, unsigned char *sha1, const char *output
>         if (output) {
>                 io.io.output = fopen(output, "w");
>                 if (!io.io.output) {
> +                       error_errno("Could not write %s", output);
>                         fclose(io.input);
> -                       return error_errno("Could not write %s", output);
> +                       return -1;
and here we assume fclose doesn't error out.

This is ok as we are sure it cannot be EBADF as we just opened that fd and as we did not read from io.input yet, any errno from close(2), fflush(3) are not expected?

close(2) may yield an EINTR, in which case we may want to
  while (fclose(io.input) && errno != EINTR)
    ; /*do nothing*/

On the other hand this is already in the error path, so maybe we're ok leaking an fd here in case of a signal?

Previous: Junio C HamanoNext: Junio C Hamano
Message 21 of 41 in “What's cooking in git.git (May 2017, #06; Mon, 22)”
  1. Junio C HamanoMay 22, 2017
  2. Jonathan NiederMay 22, 2017
  3. Junio C HamanoMay 23, 2017
  4. Jonathan NiederMay 23, 2017
  5. Junio C HamanoMay 23, 2017
  6. Duy NguyenMay 25, 2017
  7. Junio C HamanoMay 26, 2017
  8. 00/13 reporting unexpected errors after (f)openJunio C Hamano, May 26, 2017
  9. 01/13 git_fopen: fix a sparse 'not declared' warningJunio C Hamano, May 26, 2017
  10. 02/13 use xfopen() in more placesJunio C Hamano, May 26, 2017
  11. 03/13 clone: use xfopen() instead of fopen()Junio C Hamano, May 26, 2017
  12. 05/13 config.mak.uname: set FREAD_READS_DIRECTORIES for Darwin, tooJunio C Hamano, May 26, 2017
  13. Stefan BellerMay 30, 2017
  14. Junio C HamanoMay 30, 2017
  15. Stefan BellerMay 30, 2017
  16. 04/13 config.mak.uname: set FREAD_READS_DIRECTORIES for Linux and FreeBSDJunio C Hamano, May 26, 2017
  17. 06/13 wrapper.c: add and use warn_on_fopen_errors()Junio C Hamano, May 26, 2017
  18. 07/13 wrapper.c: add and use fopen_or_warn()Junio C Hamano, May 26, 2017
  19. 09/13 print errno when reporting a system call errorJunio C Hamano, May 26, 2017
  20. 10/13 rerere.c: move error_errno() closer to the source system callJunio C Hamano, May 26, 2017
  21. Stefan BellerMay 30, 2017
  22. 08/13 wrapper.c: make warn_on_inaccessible() staticJunio C Hamano, May 26, 2017
  23. 11/13 log: fix memory leak in open_next_file()Junio C Hamano, May 26, 2017
  24. 12/13 wrapper: factor out is_missing_file_error()Junio C Hamano, May 26, 2017
  25. 1/2 compat-util: is_missing_file_error()Junio C Hamano, May 30, 2017
  26. 2/2 treewide: use is_missing_file_error() where ENOENT and ENOTDIR are checkedJunio C Hamano, May 30, 2017
  27. 13/13 is_missing_file_error(): work around EINVAL on WindowsJunio C Hamano, May 26, 2017
  28. 1/2 mingw: verify that paths are not mistaken for remote nicknamesJohannes Sixt, May 29, 2017
  29. 2/2 mingw_fopen: report ENOENT for invalid file namesJohannes Sixt, May 29, 2017
  30. Ævar Arnfjörð BjarmasonMay 29, 2017
  31. Johannes SixtMay 29, 2017
  32. Ramsay JonesMay 29, 2017
  33. Junio C HamanoMay 30, 2017
  34. Ramsay JonesMay 30, 2017
  35. Junio C HamanoMay 29, 2017
  36. Junio C HamanoMay 30, 2017
  37. Johannes SixtMay 30, 2017
  38. Junio C HamanoMay 30, 2017
  39. Stefan BellerMay 30, 2017
  40. Junio C HamanoMay 30, 2017
  41. Stefan BellerMay 30, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.