#include <stdio.h>       
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include <unistd.h>


int clean(char *base, time_t min, int level) {
	DIR *dir;
	struct dirent *ent;
	struct stat inf;
	int cnt, rmd, i, empty;
	char name[2048];
	
	cnt = rmd = 0;
	
	dir = opendir(base);
	if(! dir) {
		return(1);
	}
	
	while((ent = readdir(dir)) != NULL) {
		if(strcmp(ent->d_name, ".") == 0) continue;
		if(strcmp(ent->d_name, "..") == 0) continue;
		
		cnt++;
		if(ent->d_type != 4) continue;
		
		snprintf(name, sizeof(name)-1, "%s/%s", base, ent->d_name);
		empty = clean(name, min, level + 1);
		
		stat(name, &inf);
		if(empty  && inf.st_mtime < min) {
			printf("removing %s (%d)\n", name, inf.st_mtime);
			rmdir(name);
			rmd++;
		}
	}
	
	closedir(dir);
	
	if(cnt-rmd == 0) 
		return(1);
	else
		return(0);
}

int main(int argc, char **argv) {
	int offset;
	struct timeval now;
	time_t t;
	
	if(argc < 3) {
		fprintf(stderr, "usage: %s <base directory> <days>\n", argv[0]);
		return(1);
	}
	
	gettimeofday(&now, NULL);
	t = now.tv_sec - (atoi(argv[2]) * 3600 * 24);
	clean(argv[1], t, 0);

}


