summary refs log tree commit diff
path: root/pkgs/build-support/libredirect
diff options
context:
space:
mode:
authorRobert Scott <code@humanleg.org.uk>2022-01-16 23:09:14 +0000
committerRobert Scott <code@humanleg.org.uk>2022-01-18 20:20:29 +0000
commit86783a69c22e7d8434d1d3d94a95134510d5239c (patch)
tree491b3222334fe9c23879d5b3674118fc55cd3094 /pkgs/build-support/libredirect
parentd38832ace04e150c85e681ece903517cd95a5baa (diff)
downloadnixpkgs-86783a69c22e7d8434d1d3d94a95134510d5239c.tar
nixpkgs-86783a69c22e7d8434d1d3d94a95134510d5239c.tar.gz
nixpkgs-86783a69c22e7d8434d1d3d94a95134510d5239c.tar.bz2
nixpkgs-86783a69c22e7d8434d1d3d94a95134510d5239c.tar.lz
nixpkgs-86783a69c22e7d8434d1d3d94a95134510d5239c.tar.xz
nixpkgs-86783a69c22e7d8434d1d3d94a95134510d5239c.tar.zst
nixpkgs-86783a69c22e7d8434d1d3d94a95134510d5239c.zip
libredirect: add support for mktemp
Diffstat (limited to 'pkgs/build-support/libredirect')
-rw-r--r--pkgs/build-support/libredirect/libredirect.c16
-rw-r--r--pkgs/build-support/libredirect/test.c4
2 files changed, 20 insertions, 0 deletions
diff --git a/pkgs/build-support/libredirect/libredirect.c b/pkgs/build-support/libredirect/libredirect.c
index 07eca43810c..1222d2ee75c 100644
--- a/pkgs/build-support/libredirect/libredirect.c
+++ b/pkgs/build-support/libredirect/libredirect.c
@@ -459,3 +459,19 @@ WRAPPER(char *, mkdtemp)(char *template)
     return template;
 }
 WRAPPER_DEF(mkdtemp)
+
+WRAPPER(char *, mktemp)(char *template)
+{
+    char * (*mktemp_real) (char *template) = LOOKUP_REAL(mktemp);
+    char buf[PATH_MAX];
+    char * rewritten = rewrite_non_const(template, buf);
+    char * retval = mktemp_real(rewritten);
+    if (retval == NULL) {
+        return retval;
+    };
+    if (rewritten != template) {
+        copy_temp_wildcard(template, rewritten, 0);
+    }
+    return template;
+}
+WRAPPER_DEF(mktemp)
diff --git a/pkgs/build-support/libredirect/test.c b/pkgs/build-support/libredirect/test.c
index 012e4aa4b28..144e6d3d66d 100644
--- a/pkgs/build-support/libredirect/test.c
+++ b/pkgs/build-support/libredirect/test.c
@@ -121,6 +121,10 @@ int main(int argc, char *argv[])
     assert(mkdtemp(buf) == buf);
     assert_mktemp_path(TESTDIR "/temp", "", buf);
 
+    strncpy(buf, TESTDIR "/tempXXXXXX", PATH_MAX);
+    assert(mktemp(buf) == buf);
+    assert_mktemp_path(TESTDIR "/temp", "", buf);
+
     test_spawn();
     test_system();