// File : /cmds/file/_rmdir.c
// Creator : Sulam@TMI (1-8-92)
// Updated : Watcher@TMI (2-20-93) for recursive wiping of
// directory and a few other improvements.
//
// This is the wizard rmdir command. If the -r flag is used it
// will also recursively clean the contents of the directory.
#include <mudlib.h>
#include <daemons.h>
#include <uid.h>
#include <driver/origin.h>
inherit DAEMON ;
#define SYNTAX "Syntax: rmdir [-r] [directory]\n"
int cmd_rmdir(string str) {
int wipe;
string rest;
if (!str || str == "") {
notify_fail( SYNTAX );
return 0;
}
if (origin() != ORIGIN_LOCAL)
seteuid(geteuid(previous_object()));
if (sscanf(str, "-r %s", str) == 1) wipe = 1;
sscanf(str, "%s %s", str, rest);
str = resolv_path("cwd", str);
switch( file_size(str) ) {
case -1:
write("Rmdir: No such directory.\n");
return 1;
break; // NOTREACHED
case -2:
break;
default:
write("Rmdir: Not a directory.\n");
return 1;
break; // NOTREACHED
}
if ((int)master()->valid_write(str, geteuid(this_object())) == 0) {
write("Rmdir: Permission denied.\n");
return 1;
}
if (wipe) {
write("Are you sure you wish to remove \"" + str + "/\"? [y/n] ");
input_to("remove_directory", 0, str, rest);
return 1;
}
if (sizeof( get_dir(str + "/") )) {
write("Rmdir: Directory is not empty.\n");
return 1;
}
write(rmdir(str) ? "Rmdir: Directory removed.\n" :
"Rmdir: Could not remove directory.\n");
if (rest && rest != "")
cmd_rmdir(rest);
return 1;
}
static int remove_directory(string str, string dir, string rest) {
if (str != "y" && str != "yes") {
write("Rmdir: Directory removal aborted.\n");
return 1;
}
if ((int)CLEAN_D->clean_dir(dir, 1) == 0 || !rmdir(dir)) {
write("Rmdir: Directory removal failed.\n");
return 1;
}
write("Rmdir: Directory recursively removed.\n");
if (rest && rest != "")
cmd_rmdir("-r " + rest);
return 1;
}
string help() {
return( SYNTAX "\n"
"This command allows you to remove the specified directory. If\n"
"the -r flag is used, it will recursively clean the directory of\n"
"all files and subdirectories before completing the removal.\n");
}