Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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);
    }
}