aboutsummaryrefslogtreecommitdiff
path: root/jim-file.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2011-07-07 17:08:40 +1000
committerSteve Bennett <steveb@workware.net.au>2011-07-07 21:18:30 +1000
commit4a9f215245b8d0e8ed1e8c21e20f8694d3dd6463 (patch)
tree28ab4a93ff9bb5be6345e4a17b0eae5393cf9471 /jim-file.c
parent71d6afa67a8e8931723b3688c2b892cecfb1ed31 (diff)
downloadjimtcl-4a9f215245b8d0e8ed1e8c21e20f8694d3dd6463.zip
jimtcl-4a9f215245b8d0e8ed1e8c21e20f8694d3dd6463.tar.gz
jimtcl-4a9f215245b8d0e8ed1e8c21e20f8694d3dd6463.tar.bz2
Add support for file delete -force
Will recursively remove directories, even if not empty. Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim-file.c')
-rw-r--r--jim-file.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/jim-file.c b/jim-file.c
index ea69b5a..111e926 100644
--- a/jim-file.c
+++ b/jim-file.c
@@ -348,14 +348,24 @@ static int file_cmd_exists(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
static int file_cmd_delete(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
{
+ int force = Jim_CompareStringImmediate(interp, argv[0], "-force");
+
+ if (force || Jim_CompareStringImmediate(interp, argv[0], "--")) {
+ argc++;
+ argv--;
+ }
+
while (argc--) {
const char *path = Jim_String(argv[0]);
if (unlink(path) == -1 && errno != ENOENT) {
if (rmdir(path) == -1) {
- Jim_SetResultFormatted(interp, "couldn't delete file \"%s\": %s", path,
- strerror(errno));
- return JIM_ERR;
+ /* Maybe try using the script helper */
+ if (!force || Jim_EvalObjPrefix(interp, "file delete force", 1, argv) != JIM_OK) {
+ Jim_SetResultFormatted(interp, "couldn't delete file \"%s\": %s", path,
+ strerror(errno));
+ return JIM_ERR;
+ }
}
}
argv++;
@@ -737,11 +747,11 @@ static const jim_subcmd_type file_command_table[] = {
.description = "Does file exist"
},
{ .cmd = "delete",
- .args = "name ...",
+ .args = "?-force|--? name ...",
.function = file_cmd_delete,
.minargs = 1,
.maxargs = -1,
- .description = "Deletes the files or empty directories"
+ .description = "Deletes the files or directories (must be empty unless -force)"
},
{ .cmd = "mkdir",
.args = "dir ...",