static void delete_dirs(gpointer data, gpointer exclude_path) { double cap_size; const char *dir = parse_size_pfx(&cap_size, data); trim_problem_dirs(dir, cap_size, exclude_path); }
static void delete_files(gpointer data, gpointer void_preserve_list) { double cap_size; const char *dir = parse_size_pfx(&cap_size, data); GList *preserve_files_list = void_preserve_list; unsigned count = 100; while (--count != 0) { GList *worst_file_list = NULL; double cur_size = get_dir_size(dir, &worst_file_list, preserve_files_list); if (cur_size <= cap_size || !worst_file_list) { list_free_with_free(worst_file_list); log_info("cur_size:%.0f cap_size:%.0f, no (more) trimming", cur_size, cap_size); break; } /* Invert the list, so that largest/oldest file is first */ worst_file_list = g_list_reverse(worst_file_list); /* And delete (some of) them */ while (worst_file_list && cur_size > cap_size) { struct name_and_size *ns = worst_file_list->data; log_notice("%s is %.0f bytes (more than %.0f MB), deleting '%s' (%llu bytes)", dir, cur_size, cap_size / (1024*1024), ns->name, (long long)ns->size); if (unlink(ns->name) != 0) perror_msg("Can't unlink '%s'", ns->name); else cur_size -= ns->size; free(ns); worst_file_list = g_list_delete_link(worst_file_list, worst_file_list); } } }
static void delete_files(gpointer data, gpointer user_data_unused) { double cap_size; const char *dir = parse_size_pfx(&cap_size, data); unsigned count = 1000; while (--count != 0) { char *worst_file = NULL; double worst_file_size = 0; double cur_size = get_dir_size(dir, &worst_file, &worst_file_size); if (cur_size <= cap_size) { VERB2 log("cur_size:%f cap_size:%f, no (more) trimming", cur_size, cap_size); free(worst_file); break; } log("%s is %.0f bytes (more than %.0f MB), deleting '%s'", dir, cur_size, cap_size / (1024*1024), worst_file); if (unlink(worst_file) != 0) perror_msg("Can't unlink '%s'", worst_file); free(worst_file); } }