[RFC PATCH v2 11/24] http: fix build error on FreeBSD
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Oct 9, 2024, 14:56 UTC
- Message-ID
- <e4ef4bdf1c562b6ab30a315fe46ff95d57bf7bd9.1728485139.git.ps@pks.im>
- In-Reply-To
- <cover.1728485139.git.ps@pks.im>
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> --- http.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/http.c b/http.c index d59e59f66b1..72973175a85 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"); }
-- 2.47.0.rc1.33.g90fe3800b9.dirty