Revert "compat/posix: introduce writev(3p) wrapper"

This reverts commit 3b9b2c2a29a1d529ca9884fa0a6529f6e2496abe; let's not use writev() for now.

Junio C Hamano committed Apr 9, 2026 at 14:48 UTC 7798034171030be0909c56377a4e0e10e6d2df93
5 files changed -65
Makefile
-4
@@ -2029,10 +2029,6 @@ ifdef NO_PREAD
2029 COMPAT_CFLAGS += -DNO_PREAD
2030 COMPAT_OBJS += compat/pread.o
2031 endif
2032 -ifdef NO_WRITEV
2033 - COMPAT_CFLAGS += -DNO_WRITEV
2034 - COMPAT_OBJS += compat/writev.o
2035 -endif
2032 ifdef NO_FAST_WORKING_DIRECTORY
2033 BASIC_CFLAGS += -DNO_FAST_WORKING_DIRECTORY
2034 endif
compat/posix.h
-14
@@ -137,9 +137,6 @@
137 #include <sys/socket.h>
138 #include <sys/ioctl.h>
139 #include <sys/statvfs.h>
140 -#ifndef NO_WRITEV
141 -#include <sys/uio.h>
142 -#endif
140 #include <termios.h>
141 #ifndef NO_SYS_SELECT_H
142 #include <sys/select.h>
@@ -326,17 +323,6 @@ int git_lstat(const char *, struct stat *);
323 ssize_t git_pread(int fd, void *buf, size_t count, off_t offset);
324 #endif
325
329 -#ifdef NO_WRITEV
330 -#define writev git_writev
331 -#define iovec git_iovec
332 -struct git_iovec {
333 - void *iov_base;
334 - size_t iov_len;
335 -};
336 -
337 -ssize_t git_writev(int fd, const struct iovec *iov, int iovcnt);
338 -#endif
339 -
326 #ifdef NO_SETENV
327 #define setenv gitsetenv
328 int gitsetenv(const char *, const char *, int);
compat/writev.c deleted
-44
@@ -1,44 +0,0 @@
1 -#include "../git-compat-util.h"
2 -#include "../wrapper.h"
3 -
4 -ssize_t git_writev(int fd, const struct iovec *iov, int iovcnt)
5 -{
6 - size_t total_written = 0;
7 - size_t sum = 0;
8 -
9 - /*
10 - * According to writev(3p), the syscall shall error with EINVAL in case
11 - * the sum of `iov_len` overflows `ssize_t`.
12 - */
13 - for (int i = 0; i < iovcnt; i++) {
14 - if (iov[i].iov_len > maximum_signed_value_of_type(ssize_t) ||
15 - iov[i].iov_len + sum > maximum_signed_value_of_type(ssize_t)) {
16 - errno = EINVAL;
17 - return -1;
18 - }
19 -
20 - sum += iov[i].iov_len;
21 - }
22 -
23 - for (int i = 0; i < iovcnt; i++) {
24 - const char *bytes = iov[i].iov_base;
25 - size_t iovec_written = 0;
26 -
27 - while (iovec_written < iov[i].iov_len) {
28 - ssize_t bytes_written = xwrite(fd, bytes + iovec_written,
29 - iov[i].iov_len - iovec_written);
30 - if (bytes_written < 0) {
31 - if (total_written)
32 - goto out;
33 - return bytes_written;
34 - }
35 - if (!bytes_written)
36 - goto out;
37 - iovec_written += bytes_written;
38 - total_written += bytes_written;
39 - }
40 - }
41 -
42 -out:
43 - return (ssize_t) total_written;
44 -}
config.mak.uname
-2
@@ -459,7 +459,6 @@ ifeq ($(uname_S),Windows)
459 SANE_TOOL_PATH ?= $(msvc_bin_dir_msys)
460 HAVE_ALLOCA_H = YesPlease
461 NO_PREAD = YesPlease
462 - NO_WRITEV = YesPlease
462 NEEDS_CRYPTO_WITH_SSL = YesPlease
463 NO_LIBGEN_H = YesPlease
464 NO_POLL = YesPlease
@@ -675,7 +674,6 @@ ifeq ($(uname_S),MINGW)
674 pathsep = ;
675 HAVE_ALLOCA_H = YesPlease
676 NO_PREAD = YesPlease
678 - NO_WRITEV = YesPlease
677 NEEDS_CRYPTO_WITH_SSL = YesPlease
678 NO_LIBGEN_H = YesPlease
679 NO_POLL = YesPlease
meson.build
-1
@@ -1429,7 +1429,6 @@ checkfuncs = {
1429 'initgroups' : [],
1430 'strtoumax' : ['strtoumax.c', 'strtoimax.c'],
1431 'pread' : ['pread.c'],
1432 - 'writev' : ['writev.c'],
1432 }
1433
1434 if host_machine.system() == 'windows'