git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 5/6] git_mkstemps_mode: don't set errno to EINVAL for any error.
Date: Mon, 22 Feb 2010 08:36:19 +0100	[thread overview]
Message-ID: <vpq7hq5n2mk.fsf@bauges.imag.fr> (raw)
In-Reply-To: <7v4olbpyh3.fsf@alter.siamese.dyndns.org> (Junio C. Hamano's message of "Sat\, 20 Feb 2010 10\:13\:12 -0800")

Junio C Hamano <gitster@pobox.com> writes:

> Matthieu Moy <Matthieu.Moy@imag.fr> writes:
>
>> Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
>> ---
>>  path.c |    4 +++-
>>  1 files changed, 3 insertions(+), 1 deletions(-)
>>
>> diff --git a/path.c b/path.c
>> index 005b836..2886eb6 100644
>> --- a/path.c
>> +++ b/path.c
>> @@ -222,7 +222,9 @@ int git_mkstemps_mode(char *pattern, int suffix_len, int mode)
>>  	}
>>  	/* We return the null string if we can't find a unique file name.  */
>>  	pattern[0] = '\0';
>> -	errno = EINVAL;
>> +	/* Make sure errno signals an error on failure */
>> +	if (errno <= 0)
>> +		errno = EINVAL;
>>  	return -1;
>>  }
>
> Please explain this change a bit better.

I think we agree about the

-	errno = EINVAL;

part. Setting errno to EINVAL unconditionally means discarding the
errno left from open(), so we can't know the reason for failure
anymore with this line.

> Because TMP_MAX is non-zero, you are always reading from errno left by
> open() in the loop, so the above paragraph is a misunderstanding.  But
> that needs to be in the log message, no?

Will add a sentence, yes.

> I think you are trying to avoid stomping on the errno when we broke out of
> the loop early, due to getting an error.  But errno is always valid at
> this point in this codepath, and errno.h macros shall expand to integer
> constant expressions with type int, distinct positive values.  So I think
> you can safely remove the assignment without "if (errno <= 0)".  Returning
> EINVAL from a variant of mkstemp when the error is anything but "The last
> six characters were not XXXXXX" is wrong.

Just removing the line would work with the current code, but this "if
(errno <= 0) errno = EINVAL;" allows enforcing the invariant that
errno > 0 when reaching "return -1" in a simple and reliable way (i.e.
changing the for loop later cannot break this invariant by mistake).

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

  reply	other threads:[~2010-02-22  7:49 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-19 16:33 [PATCH 0/4] Allow Git repositories to be shared using POSIX ACLs Matthieu Moy
2010-02-19 16:33 ` [PATCH 1/4] Add a testcase for ACL with restrictive umask Matthieu Moy
2010-02-19 16:33 ` [PATCH 2/4] Move gitmkstemps to path.c Matthieu Moy
2010-02-19 16:33 ` [PATCH 3/4] git_mkstemp_mode, xmkstemp_mode: variants of gitmkstemps with mode argument Matthieu Moy
2010-02-19 16:33 ` [PATCH 4/4] Use git_mkstemp_mode and xmkstemp_mode in odb_mkstemp, not chmod later Matthieu Moy
2010-02-19 23:19   ` Matthieu Moy
2010-02-19 23:21     ` [PATCH 1/6] Add a testcase for ACL with restrictive umask Matthieu Moy
2010-02-19 23:21     ` [PATCH 2/6] Move gitmkstemps to path.c Matthieu Moy
2010-02-19 23:21     ` [PATCH 3/6] git_mkstemp_mode, xmkstemp_mode: variants of gitmkstemps with mode argument Matthieu Moy
2010-02-20 19:22       ` Junio C Hamano
2010-02-19 23:21     ` [PATCH 4/6 v2] Use git_mkstemp_mode and xmkstemp_mode in odb_mkstemp, not chmod later Matthieu Moy
2010-02-19 23:21     ` [PATCH 5/6] git_mkstemps_mode: don't set errno to EINVAL for any error Matthieu Moy
2010-02-20 18:13       ` Junio C Hamano
2010-02-22  7:36         ` Matthieu Moy [this message]
2010-02-22 19:56           ` Junio C Hamano
2010-02-19 23:21     ` [PATCH 6/6] Use git_mkstemp_mode instead of plain mkstemp to create object files Matthieu Moy
2010-02-20 20:01   ` [PATCH 4/4] Use git_mkstemp_mode and xmkstemp_mode in odb_mkstemp, not chmod later Junio C Hamano
2010-02-22  7:55     ` Matthieu Moy
2010-02-22 20:33       ` Junio C Hamano
2010-02-22 20:36         ` Junio C Hamano
2010-02-22 22:11         ` Matthieu Moy
2010-02-19 17:52 ` [PATCH 0/4] Allow Git repositories to be shared using POSIX ACLs Junio C Hamano
2010-02-22 22:32 ` [PATCH 0/6 v3] " Matthieu Moy
2010-02-22 22:32 ` [PATCH 1/6] Add a testcase for ACL with restrictive umask Matthieu Moy
2010-02-22 22:32 ` [PATCH 2/6] Move gitmkstemps to path.c Matthieu Moy
2010-02-22 22:32 ` [PATCH 3/6] git_mkstemp_mode, xmkstemp_mode: variants of gitmkstemps with mode argument Matthieu Moy
2010-02-22 22:32 ` [PATCH 4/6] Use git_mkstemp_mode and xmkstemp_mode in odb_mkstemp, not chmod later Matthieu Moy
2010-02-22 22:32 ` [PATCH 5/6] git_mkstemps_mode: don't set errno to EINVAL on exit Matthieu Moy
2010-02-22 22:32 ` [PATCH 6/6] Use git_mkstemp_mode instead of plain mkstemp to create object files Matthieu Moy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=vpq7hq5n2mk.fsf@bauges.imag.fr \
    --to=matthieu.moy@grenoble-inp.fr \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).