File 3032-Fix-sendfile-fallback-to-match-test-case.patch of Package erlang
From 0608a6bc6a89de211d697d43159d3f5c56033f2f Mon Sep 17 00:00:00 2001
From: Raimo Niskanen <raimo@erlang.org>
Date: Tue, 28 Jul 2020 14:39:44 +0200
Subject: [PATCH 2/2] Fix sendfile fallback to match test case
---
lib/kernel/src/file.erl | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/lib/kernel/src/file.erl b/lib/kernel/src/file.erl
index 3883e05147..b34e9272b1 100644
--- a/lib/kernel/src/file.erl
+++ b/lib/kernel/src/file.erl
@@ -1307,7 +1307,8 @@ sendfile(Filename, Sock) ->
%% Internal sendfile functions
sendfile(#file_descriptor{ module = Mod } = Fd, Sock, Offset, Bytes,
- ChunkSize, Headers, Trailers, Opts) ->
+ ChunkSize, Headers, Trailers, Opts)
+ when is_integer(Offset), is_integer(Bytes) ->
case Sock of
{'$inet', _, _} ->
sendfile_fallback(
@@ -1356,12 +1357,19 @@ sendfile_fallback(File, Sock, Offset, Bytes, ChunkSize, Headers, Trailers) ->
end.
-sendfile_fallback(File, Sock, Offset, Bytes, ChunkSize) ->
+sendfile_fallback(File, Sock, Offset, Bytes, ChunkSize)
+ when 0 =< Bytes ->
{ok, CurrPos} = file:position(File, {cur, 0}),
- {ok, _NewPos} = file:position(File, {bof, Offset}),
- Res = sendfile_fallback_int(File, Sock, Bytes, ChunkSize, 0),
- _ = file:position(File, {bof, CurrPos}),
- Res.
+ case file:position(File, {bof, Offset}) of
+ {ok, _NewPos} ->
+ Res = sendfile_fallback_int(File, Sock, Bytes, ChunkSize, 0),
+ _ = file:position(File, {bof, CurrPos}),
+ Res;
+ Error ->
+ Error
+ end;
+sendfile_fallback(_, _, _, _, _) ->
+ {error, einval}.
sendfile_fallback_int(File, Sock, Bytes, ChunkSize, BytesSent)
--
2.26.2