aboutsummaryrefslogtreecommitdiff
path: root/jim-file.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2010-01-24 11:40:37 +1000
committerSteve Bennett <steveb@workware.net.au>2010-10-15 11:02:42 +1000
commit47a1141c88d5899325b556666dd27cc75a602b98 (patch)
tree9fa45f1054016101da2ddb7590e1dc6ee179b5e0 /jim-file.c
parent658a34d062efe6ff73e941d54d09b7cdd4b4f49d (diff)
downloadjimtcl-47a1141c88d5899325b556666dd27cc75a602b98.zip
jimtcl-47a1141c88d5899325b556666dd27cc75a602b98.tar.gz
jimtcl-47a1141c88d5899325b556666dd27cc75a602b98.tar.bz2
Implement 'file tempfile'
From TIP #201: http://www.tcl.tk/cgi-bin/tct/tip/210.html
Diffstat (limited to 'jim-file.c')
-rw-r--r--jim-file.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/jim-file.c b/jim-file.c
index 30f5cf3..e6de923 100644
--- a/jim-file.c
+++ b/jim-file.c
@@ -344,6 +344,27 @@ static int file_cmd_mkdir(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
return JIM_OK;
}
+static int file_cmd_tempfile(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
+{
+ int fd;
+ char *filename;
+ const char *template = "/tmp/tcl.tmp.XXXXXX";
+ if (argc >= 1) {
+ template = Jim_GetString(argv[0], NULL);
+ }
+ filename = Jim_StrDup(template);
+
+ fd = mkstemp(filename);
+ if (fd < 0) {
+ Jim_SetResultString(interp, "Failed to create tempfile", -1);
+ return JIM_ERR;
+ }
+ close(fd);
+
+ Jim_SetResult(interp, Jim_NewStringObjNoAlloc(interp, filename, -1));
+ return JIM_OK;
+}
+
static int file_cmd_rename(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
{
const char *source = Jim_GetString(argv[0], NULL);
@@ -614,6 +635,13 @@ static const jim_subcmd_type command_table[] = {
.maxargs = -1,
.description = "Creates the directories"
},
+ { .cmd = "tempfile",
+ .args = "?template?",
+ .function = file_cmd_tempfile,
+ .minargs = 0,
+ .maxargs = 1,
+ .description = "Creates a temporary filename"
+ },
{ .cmd = "rename",
.args = "?-force? source dest",
.function = file_cmd_rename,