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 /src | |
| parent | d23490afb8dc7c35ca38ab5a3b0a09f3d3965d39 (diff) | |
| download | skalibs-4c8ba9fe44be4152aa6725ba0a30fbf5a3b967a9.tar.gz | |
fix env_dump4
Diffstat (limited to 'src')
| -rw-r--r-- | src/libenvexec/env_dump4.c | 15 |
1 files changed, 10 insertions, 5 deletions
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 ; |
