On Sun, Nov 26, 2017 at 12:46:12PM +0900, Junio C Hamano wrote:
> Max Kirillov <[email protected]> writes:
> > +ssize_t git_env_ssize_t(const char *k, ssize_t val)
> > +{
> > + const char *v = getenv(k);
> > + if (v && !git_parse_ssize_t(v, &val))
> > + die("failed to parse %s", k);
> > + return val;
> > +}
> > +
>
> If this were passing "v" that is a string the caller obtains from
> any source (and the callee does not care about where it came from),
> that would be a different story, but as a public interface that is
> part of the config.c layer, "k" that has to be the name of the
> environment variable sticks out like a sore thumb.
>
> If we were to add one more public function to the interface, I
> suspect that exposing the existing git_parse_ssize_t() and have the
> caller implement the above function for its use would be a much
> better way to go.
I'm afraid I did not get the reasonsing and not fully the
desired change. Is this http-backend code change (compared
to the last patch) what you mean?
--- a/http-backend.c
+++ b/http-backend.c
@@ -346,9 +346,18 @@ static ssize_t read_request_fixed_len(int fd, ssize_t
req_len, unsigned char **o
}
}
+static ssize_t env_content_length()
+{
+ const char *str = getenv("CONTENT_LENGTH");
+ ssize_t val = -1;
+ if (str && !git_parse_ssize_t(str, &val))
+ die("failed to parse CONTENT_LENGTH: %s", str);
+ return val;
+}
+
static ssize_t read_request(int fd, unsigned char **out)
{
- ssize_t req_len = git_env_ssize_t("CONTENT_LENGTH", -1);
+ ssize_t req_len = env_content_length();
if (req_len < 0)
return read_request_eof(fd, out);
else