#include #include #include #include #include #include unsigned long long dirsiz (char *); void help (); void outull (unsigned long long); main (int a, char** v) { if (!--a) help (); ++v; int b; struct stat tmp; for (b=0;bd_name, ".") || !strcmp (tmp->d_name, "..")) continue; strcpy (tstr, fn); strcat (tstr, "/"); strcat (tstr, tmp->d_name); stat (tstr, &tp); if (S_ISDIR (tp.st_mode)) ret += dirsiz (tstr); else ret += tp.st_size; } closedir (di); return ret; } void outull (unsigned long long var) { unsigned suffix=0; while (var>1024) { var /= 1024; ++suffix; } unsigned m = (unsigned) var; printf ("%d %sB\n", m, suffix==1?"K":suffix==2?"M":suffix==3?"G":suffix==4?"T":""); //lol @ "T" }