Handle hostnames with upper-case letters
[webmin.git] / file / size.cgi
1 #!/usr/local/bin/perl
2 # size.cgi
3 # Returns the size in bytes, number of files and number of dirs in a directory
4
5 require './file-lib.pl';
6 &ReadParse();
7 &switch_acl_uid_and_chroot();
8 print "Content-type: text/plain\n\n";
9 if (!&can_list($in{'dir'})) {
10         print $text{'list_eaccess'},"\n";
11         }
12 ($size, $files, $dirs) = &recursive_dir_info($in{'dir'});
13 print "\n";
14 print $size," ",$files," ",$dirs," ",&nice_size($size),"\n";
15
16 # recursive_dir_info(directory)
17 sub recursive_dir_info
18 {
19 local $dir = &translate_filename($_[0]);
20 if (-l $dir) {
21         # Symlink
22         return (0, 1, 0);
23         }
24 elsif (-f $dir) {
25         local @st = stat($dir);
26         return ($st[7], 1, 0);
27         }
28 elsif (-d $dir) {
29         local @st = stat($dir);
30         local ($size, $files, $dirs) = ($st[7], 0, 1);
31         opendir(DIR, $dir);
32         local @files = readdir(DIR);
33         closedir(DIR);
34         foreach my $f (@files) {
35                 next if ($f eq "." || $f eq "..");
36                 local @r = &recursive_dir_info("$dir/$f");
37                 $size += $r[0];
38                 $files += $r[1];
39                 $dirs += $r[2];
40                 }
41         return ($size, $files, $dirs);
42         }
43 else {
44         # Special file ..
45         return (0, 1, 0);
46         }
47 }
48
49