/* du command, trial out by Turrican for a commands daemon. */
inherit COMMAND_BASE;
protected int rec_du( string path ) {
string *files, file;
int size, tot;
if( path[<1] != '/')
path += "/";
files = get_dir( path+"*");
foreach( file in files ) {
if( file == "." || file == "..")
continue;
file = path + file;
size = file_size( file );
if( size > 0 ) {
tot += size;
} else if( size == -2 ) {
printf("%-30s %5d\n", file, ( size = rec_du( file ) ) );
tot += size * 1024;
}
}
return ( tot + 1023 ) / 1024;
} /* rec_du() */
/** @ignore yes */
int cmd( string path ) {
if( !path )
return 0;
if( master()->valid_read( path, geteuid( TP ) ) ) {
printf( "%-30s %5d\n", "Total:", rec_du( path ) );
return 1;
}
add_failed_mess("You must have read access to a path to use "
"du on it.\n");
return 0;
} /* cmd() */
/** @ignore yes */
mixed query_patterns() {
return ({ "", (: cmd( TP->query_current_path() ) :),
"<string'path'>", (: cmd( $4[0] ) :) });
} /* query_patterns() */