SPF: fix memory accounting for error case
[exim.git] / src / OS / os.c-FreeBSD
1 /*************************************************
2 *     Exim - an Internet mail transport agent    *
3 *************************************************/
4
5 /* Copyright (c) Jeremy Harris 1995 - 2020 */
6 /* Copyright (c) The Exim Maintainers 2021 */
7 /* See the file NOTICE for conditions of use and distribution. */
8
9 /* FreeBSD-specific code. This is concatenated onto the generic
10 src/os.c file. */
11
12
13 /*************
14 Sendfile shim
15 *************/
16
17 ssize_t
18 os_sendfile(int out, int in, off_t * offp, size_t cnt)
19 {
20 off_t loff = offp ? *offp : 0;
21 off_t written;
22
23 if (sendfile(in, out, loff, cnt, NULL, &written, 0) < 0) return (ssize_t)-1;
24 if (offp) *offp = loff + written;
25 return (ssize_t)written;
26 }
27
28 /*************************************************
29 TCP Fast Open:  check that the ioctl is accepted
30 *************************************************/
31
32 #ifndef COMPILE_UTILITY
33 void
34 tfo_probe(void)
35 {
36 # ifdef TCP_FASTOPEN
37 int sock;
38
39 if (  (sock = socket(AF_INET, SOCK_STREAM, 0)) >= 0
40    && setsockopt(sock, IPPROTO_TCP, TCP_FASTOPEN, &on, sizeof(on) >= 0)
41    )
42   f.tcp_fastopen_ok = TRUE;
43 close(sock);
44 # endif
45 }
46 #endif
47
48
49 /* End of os.c-Linux */