Профиль |
Сообщить модератору |
ИгнорироватьNEW! Сообщение отправлено: 8 января 2006 19:43
От прошлой своей идеи я отказался...
Значит так..начинаем патчить!

)
таким макаром узнаем сколько весит директория...
Нам остаётся научиться работать с конфигом - тобишь получить сведения о квоте!
А так же не большой ИФ поставить в нужном месте..
long check_dir_size(char *dirname)
{
DIR *dir;
long sum = 0;
struct dirent *ent;
struct stat statbuf;
dir = opendir(dirname);
if (dir == NULL) {
msg_warn("check_dir_size: cannot open directory : %s", dirname);
return 0;
}
while ((ent = readdir(dir)) != NULL) {
char *name = ent->d_name;
VSTRING *buffer;
if(strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;
buffer = vstring_alloc(1024);
vstring_sprintf(buffer,"%s/%s",dirname,name);
if (stat(vstring_str(buffer), &statbuf) < 0) {
vstring_free(buffer);
continue;
}
if ((statbuf.st_mode & S_IFREG) != 0)
sum += statbuf.st_size;
else if ((statbuf.st_mode & S_IFDIR) != 0)
sum += check_dir_size(vstring_str(buffer));
vstring_free(buffer);
}
closedir(dir);
if (msg_verbose)
msg_info("check_dir_size: dir=%s sum=%ld", dirname, sum);
return sum;
}