aboutsummaryrefslogtreecommitdiffstats
path: root/src/libenvexec
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2025-12-24 19:46:23 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2025-12-24 19:46:23 +0000
commit4c8ba9fe44be4152aa6725ba0a30fbf5a3b967a9 (patch)
tree27628aeadf91bbe239c117bd2dab664bd644e8fa /src/libenvexec
parentd23490afb8dc7c35ca38ab5a3b0a09f3d3965d39 (diff)
downloadskalibs-4c8ba9fe44be4152aa6725ba0a30fbf5a3b967a9.tar.gz
fix env_dump4
Diffstat (limited to 'src/libenvexec')
-rw-r--r--src/libenvexec/env_dump4.c15
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 ;