diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-12-24 19:46:23 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2025-12-24 19:46:23 +0000 |
| commit | 4c8ba9fe44be4152aa6725ba0a30fbf5a3b967a9 (patch) | |
| tree | 27628aeadf91bbe239c117bd2dab664bd644e8fa | |
| parent | d23490afb8dc7c35ca38ab5a3b0a09f3d3965d39 (diff) | |
| download | skalibs-4c8ba9fe44be4152aa6725ba0a30fbf5a3b967a9.tar.gz | |
fix env_dump4
| -rw-r--r-- | package/deps.mak | 2 | ||||
| -rw-r--r-- | src/libenvexec/env_dump4.c | 15 |
2 files changed, 11 insertions, 6 deletions
diff --git a/package/deps.mak b/package/deps.mak index 4732648..8014ea1 100644 --- a/package/deps.mak +++ b/package/deps.mak @@ -368,7 +368,7 @@ src/libstddjb/fd_move2.o src/libstddjb/fd_move2.lo: src/libstddjb/fd_move2.c src src/libstddjb/fd_read.o src/libstddjb/fd_read.lo: src/libstddjb/fd_read.c src/include/skalibs/allreadwrite.h src/libstddjb/fd_readv.o src/libstddjb/fd_readv.lo: src/libstddjb/fd_readv.c src/include/skalibs/allreadwrite.h src/libstddjb/fd_recv.o src/libstddjb/fd_recv.lo: src/libstddjb/fd_recv.c src/include/skalibs/allreadwrite.h -src/libstddjb/fd_sanitize.o src/libstddjb/fd_sanitize.lo: src/libstddjb/fd_sanitize.c src/include/skalibs/djbunix.h src/include/skalibs/strerr.h +src/libstddjb/fd_sanitize.o src/libstddjb/fd_sanitize.lo: src/libstddjb/fd_sanitize.c src/include/skalibs/djbunix.h src/libstddjb/fd_send.o src/libstddjb/fd_send.lo: src/libstddjb/fd_send.c src/include/skalibs/allreadwrite.h src/libstddjb/fd_shutdown.o src/libstddjb/fd_shutdown.lo: src/libstddjb/fd_shutdown.c src/include/skalibs/djbunix.h src/include/skalibs/nonposix.h src/libstddjb/fd_sync.o src/libstddjb/fd_sync.lo: src/libstddjb/fd_sync.c src/include/skalibs/djbunix.h diff --git a/src/libenvexec/env_dump4.c b/src/libenvexec/env_dump4.c index b59c858..f972e59 100644 --- a/src/libenvexec/env_dump4.c +++ b/src/libenvexec/env_dump4.c @@ -7,6 +7,7 @@ #include <errno.h> #include <stdlib.h> #include <stdio.h> +#include <sys/uio.h> #include <skalibs/bytestr.h> #include <skalibs/env.h> @@ -31,12 +32,16 @@ int env_dump4 (char const *dir, mode_t mode, char const *const *envp, int nochom { size_t len = str_chr(*envp, '=') ; size_t vallen = strlen(*envp + len + 1) ; - char fn[len + 1 + !nochomp] ; + struct iovec v[2] = + { + { .iov_base = (char *)*envp + len + 1, .iov_len = vallen }, + { .iov_base = "\n", .iov_len = 1 } + } ; + char fn[len + 1] ; memcpy(fn, *envp, len) ; - if (nochomp) fn[len] = 0 ; - else { fn[len] = '\n' ; fn[len+1] = 0 ; } - len = openwritenclose_at(fd, fn, *envp + len + 1 + !nochomp, vallen) ; - if (len < vallen) goto cerr ; + fn[len] = 0 ; + len = openwritevnclose_at(fd, fn, v, 1 + !!nochomp) ; + if (len < vallen + !!nochomp) goto cerr ; } fd_close(fd) ; if (chmod(tmpdir, mode) == -1) goto err ; |
