diff options
| author | Patrick Steinhardt <ps@pks.im> | 2024-10-16 10:13:18 +0200 |
|---|---|---|
| committer | Taylor Blau <me@ttaylorr.com> | 2024-10-16 17:00:49 -0400 |
| commit | 80ebd91b83d50008f1dc9027bc5aee6d375c70f3 (patch) | |
| tree | f1dafb83098eb8ad5382740054bf1d9e6e1dd311 | |
| parent | 87ad2a9d56da7a28b5d998c626905a9e42bc2ced (diff) | |
| download | git-80ebd91b83d50008f1dc9027bc5aee6d375c70f3.tar.gz | |
http: fix build error on FreeBSD
The `result` parameter passed to `http_request_reauth()` may either
point to a `struct strbuf` or a `FILE *`, where the `target` parameter
tells us which of either it actually is. To accommodate for both types
the pointer is a `void *`, which we then pass directly to functions
without doing a cast.
This is fine on most platforms, but it breaks on FreeBSD because
`fileno()` is implemented as a macro that tries to directly access the
`FILE *` structure.
Fix this issue by storing the `FILE *` in a local variable before we
pass it on to other functions.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
| -rw-r--r-- | http.c | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -2290,17 +2290,19 @@ static int http_request_reauth(const char *url, case HTTP_REQUEST_STRBUF: strbuf_reset(result); break; - case HTTP_REQUEST_FILE: - if (fflush(result)) { + case HTTP_REQUEST_FILE: { + FILE *f = result; + if (fflush(f)) { error_errno("unable to flush a file"); return HTTP_START_FAILED; } - rewind(result); - if (ftruncate(fileno(result), 0) < 0) { + rewind(f); + if (ftruncate(fileno(f), 0) < 0) { error_errno("unable to truncate a file"); return HTTP_START_FAILED; } break; + } default: BUG("Unknown http_request target"); } |
