FreeCalypso > hg > freecalypso-tools
diff rvinterf/etmsync/cleandir.c @ 595:e6fe9d25377a
fc-fsio: rm-subtree command implemented
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 04 Feb 2020 05:30:59 +0000 |
parents | 2c75cf810146 |
children |
line wrap: on
line diff
--- a/rvinterf/etmsync/cleandir.c Tue Feb 04 05:09:13 2020 +0000 +++ b/rvinterf/etmsync/cleandir.c Tue Feb 04 05:30:59 2020 +0000 @@ -77,3 +77,50 @@ } return cleandir_level(argv[1]); } + +cmd_rm_subtree(argc, argv) + char **argv; +{ + char *pathname; + int rc, minusf_mode, found; + struct stat_info stat; + + if (argc == 2) { + pathname = argv[1]; + minusf_mode = 0; + } else { + if (strcmp(argv[1], "-f")) { + fprintf(stderr, + "usage: rm-subtree [-f] ffs_pathname\n"); + return(ERROR_USAGE); + } + pathname = argv[2]; + minusf_mode = 1; + } + rc = validate_ffs_pathname(pathname); + if (rc < 0) + return(ERROR_USAGE); /* err msg already printed */ + if (rc == 0) { + fprintf(stderr, "error: rm-subtree / is not allowed\n"); + return(ERROR_USAGE); + } + if (minusf_mode) { + rc = do_xlstat_notfoundok(pathname, &found, &stat); + if (rc) + return(rc); + if (!found) + return(0); + } else { + rc = do_xlstat(pathname, &stat); + if (rc) + return(rc); + } + if (stat.type != OT_DIR) { + printf("error: %s exists and is not a directory\n", pathname); + return(ERROR_TARGET); + } + rc = cleandir_level(pathname); + if (rc) + return(rc); + return do_ffs_remove(pathname, 0); +}