From: Junio C Hamano Date: Thu, 9 Apr 2026 21:48:24 +0000 (-0700) Subject: Revert "compat/posix: introduce writev(3p) wrapper" X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7798034171030be0909c56377a4e0e10e6d2df93;p=thirdparty%2Fgit.git Revert "compat/posix: introduce writev(3p) wrapper" This reverts commit 3b9b2c2a29a1d529ca9884fa0a6529f6e2496abe; let's not use writev() for now. --- diff --git a/Makefile b/Makefile index 5d22394c2e..cedc234173 100644 --- a/Makefile +++ b/Makefile @@ -2029,10 +2029,6 @@ ifdef NO_PREAD COMPAT_CFLAGS += -DNO_PREAD COMPAT_OBJS += compat/pread.o endif -ifdef NO_WRITEV - COMPAT_CFLAGS += -DNO_WRITEV - COMPAT_OBJS += compat/writev.o -endif ifdef NO_FAST_WORKING_DIRECTORY BASIC_CFLAGS += -DNO_FAST_WORKING_DIRECTORY endif diff --git a/compat/posix.h b/compat/posix.h index 94699a03fa..faaae1b655 100644 --- a/compat/posix.h +++ b/compat/posix.h @@ -137,9 +137,6 @@ #include #include #include -#ifndef NO_WRITEV -#include -#endif #include #ifndef NO_SYS_SELECT_H #include @@ -326,17 +323,6 @@ int git_lstat(const char *, struct stat *); ssize_t git_pread(int fd, void *buf, size_t count, off_t offset); #endif -#ifdef NO_WRITEV -#define writev git_writev -#define iovec git_iovec -struct git_iovec { - void *iov_base; - size_t iov_len; -}; - -ssize_t git_writev(int fd, const struct iovec *iov, int iovcnt); -#endif - #ifdef NO_SETENV #define setenv gitsetenv int gitsetenv(const char *, const char *, int); diff --git a/compat/writev.c b/compat/writev.c deleted file mode 100644 index 3a94870a2f..0000000000 --- a/compat/writev.c +++ /dev/null @@ -1,44 +0,0 @@ -#include "../git-compat-util.h" -#include "../wrapper.h" - -ssize_t git_writev(int fd, const struct iovec *iov, int iovcnt) -{ - size_t total_written = 0; - size_t sum = 0; - - /* - * According to writev(3p), the syscall shall error with EINVAL in case - * the sum of `iov_len` overflows `ssize_t`. - */ - for (int i = 0; i < iovcnt; i++) { - if (iov[i].iov_len > maximum_signed_value_of_type(ssize_t) || - iov[i].iov_len + sum > maximum_signed_value_of_type(ssize_t)) { - errno = EINVAL; - return -1; - } - - sum += iov[i].iov_len; - } - - for (int i = 0; i < iovcnt; i++) { - const char *bytes = iov[i].iov_base; - size_t iovec_written = 0; - - while (iovec_written < iov[i].iov_len) { - ssize_t bytes_written = xwrite(fd, bytes + iovec_written, - iov[i].iov_len - iovec_written); - if (bytes_written < 0) { - if (total_written) - goto out; - return bytes_written; - } - if (!bytes_written) - goto out; - iovec_written += bytes_written; - total_written += bytes_written; - } - } - -out: - return (ssize_t) total_written; -} diff --git a/config.mak.uname b/config.mak.uname index ccb3f71881..5feb582558 100644 --- a/config.mak.uname +++ b/config.mak.uname @@ -459,7 +459,6 @@ ifeq ($(uname_S),Windows) SANE_TOOL_PATH ?= $(msvc_bin_dir_msys) HAVE_ALLOCA_H = YesPlease NO_PREAD = YesPlease - NO_WRITEV = YesPlease NEEDS_CRYPTO_WITH_SSL = YesPlease NO_LIBGEN_H = YesPlease NO_POLL = YesPlease @@ -675,7 +674,6 @@ ifeq ($(uname_S),MINGW) pathsep = ; HAVE_ALLOCA_H = YesPlease NO_PREAD = YesPlease - NO_WRITEV = YesPlease NEEDS_CRYPTO_WITH_SSL = YesPlease NO_LIBGEN_H = YesPlease NO_POLL = YesPlease diff --git a/meson.build b/meson.build index 8309942d18..11488623bf 100644 --- a/meson.build +++ b/meson.build @@ -1429,7 +1429,6 @@ checkfuncs = { 'initgroups' : [], 'strtoumax' : ['strtoumax.c', 'strtoimax.c'], 'pread' : ['pread.c'], - 'writev' : ['writev.c'], } if host_machine.system() == 'windows'