aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2024-10-16 10:13:18 +0200
committerTaylor Blau <me@ttaylorr.com>2024-10-16 17:00:49 -0400
commit80ebd91b83d50008f1dc9027bc5aee6d375c70f3 (patch)
treef1dafb83098eb8ad5382740054bf1d9e6e1dd311
parent87ad2a9d56da7a28b5d998c626905a9e42bc2ced (diff)
downloadgit-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.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/http.c b/http.c
index d59e59f66b..72973175a8 100644
--- a/http.c
+++ b/http.c
@@ -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");
}