diff options
author | Steve Bennett <steveb@workware.net.au> | 2010-01-24 11:40:37 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2010-10-15 11:02:42 +1000 |
commit | 47a1141c88d5899325b556666dd27cc75a602b98 (patch) | |
tree | 9fa45f1054016101da2ddb7590e1dc6ee179b5e0 /jim-file.c | |
parent | 658a34d062efe6ff73e941d54d09b7cdd4b4f49d (diff) | |
download | jimtcl-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.c | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -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, |