Exemple #1
0
static void rm_fmt_progress_print_bar(RmSession *session, RmFmtHandlerProgress *self, int width, FILE *out) {
    int cells = width * self->percent;

    /* true when we do not know when 100% is reached.
     * Show a moving something in this case.
     * */
    bool is_unknown = self->percent > 1.1;


    fprintf(out, "[");
    for(int i = 0; i < width - 2; ++i) {
        if(i < cells) {
            if(is_unknown) {
                if((int)self->last_unknown_pos % 4 == i % 4) {
                    fprintf(out, "%so%s", MAYBE_BLUE(session), MAYBE_RESET(session));
                } else if((int)self->last_unknown_pos % 2 == i % 2) {
                    fprintf(out, "%sO%s", MAYBE_YELLOW(session), MAYBE_RESET(session));
                } else {
                    fprintf(out, " ");
                }
            } else {
                fprintf(out, "#");
            }
        } else if(i == cells) {
            fprintf(out, "%s>%s", MAYBE_YELLOW(session), MAYBE_RESET(session));
        } else {
            fprintf(out, "%s-%s", MAYBE_BLUE(session), MAYBE_RESET(session));
        }
    }
    fprintf(out, "]");

    self->last_unknown_pos = fmod(self->last_unknown_pos + 0.005, width - 2);
}
Exemple #2
0
static void rm_fmt_progress_format_preprocess(RmSession *session, char *buf,
                                              size_t buf_len, FILE *out) {
    if(session->offsets_read > 0) {
        g_snprintf(buf, buf_len, "fiemap: %s+%" LLU "%s %s-%" LLU "%s %s#%" LLU "%s",
                   MAYBE_GREEN(out, session), session->offsets_read,
                   MAYBE_RESET(out, session), MAYBE_RED(out, session),
                   session->offset_fails, MAYBE_RESET(out, session),
                   MAYBE_BLUE(out, session), session->total_filtered_files,
                   MAYBE_RESET(out, session));
    } else {
        g_snprintf(buf, buf_len, "%s %s%" LLU "%s", _("reduces files to"),
                   MAYBE_GREEN(out, session), session->total_filtered_files,
                   MAYBE_RESET(out, session));
    }
}
Exemple #3
0
static const char *rm_fmt_command_color(RmSession *session, RmFile *file) {
    switch(file->lint_type) {
    case RM_LINT_TYPE_NBIN:
    case RM_LINT_TYPE_BADUID:
    case RM_LINT_TYPE_BADGID:
    case RM_LINT_TYPE_BADUGID:
        return MAYBE_BLUE(session);
    case RM_LINT_TYPE_DUPE_CANDIDATE:
    case RM_LINT_TYPE_DUPE_DIR_CANDIDATE:
        if(file->is_original) {
            return MAYBE_GREEN(session);
        } else {
            return MAYBE_RED(session);
        }
    default:
        return MAYBE_RED(session);
    }
}
Exemple #4
0
static void rm_fmt_prog(RmSession *session,
                        _UNUSED RmFmtHandler *parent,
                        _UNUSED FILE *out,
                        RmFmtProgressState state) {
    if(state != RM_PROGRESS_STATE_SUMMARY) {
        return;
    }

    if(session->total_files <= 1) {
        ARROW fprintf(out, "%s%d%s", MAYBE_RED(out, session), session->total_files,
                      MAYBE_RESET(out, session));
        fprintf(out, _(" file(s) after investigation, nothing to search through.\n"));
        return;
    }

    if(rm_session_was_aborted()) {
        /* Clear the whole terminal line.
         * Progressbar might leave some junk.
         */
        struct winsize terminal;
        ioctl(fileno(out), TIOCGWINSZ, &terminal);
        for(int i = 0; i < terminal.ws_col; ++i) {
            fprintf(out, " ");
        }

        fprintf(out, "\n");
        ARROW fprintf(out, _("Early shutdown, probably not all lint was found.\n"));
    }

    if(rm_fmt_has_formatter(session->formats, "pretty") &&
       rm_fmt_has_formatter(session->formats, "sh")) {
        ARROW fprintf(out, _("Note: Please use the saved script below for removal, not "
                             "the above output."));
        fprintf(out, "\n");
    }

    char numbers[3][512];
    snprintf(numbers[0], sizeof(numbers[0]), "%s%d%s", MAYBE_RED(out, session),
             session->total_files, MAYBE_RESET(out, session));
    snprintf(numbers[1], sizeof(numbers[1]), "%s%" LLU "%s", MAYBE_RED(out, session),
             session->dup_counter, MAYBE_RESET(out, session));
    snprintf(numbers[2], sizeof(numbers[2]), "%s%" LLU "%s", MAYBE_RED(out, session),
             session->dup_group_counter, MAYBE_RESET(out, session));

    ARROW fprintf(out, _("In total %s files, whereof %s are duplicates in %s groups.\n"),
                  numbers[0], numbers[1], numbers[2]);

    /* log10(2 ** 64) + 2 = 21; */
    char size_string_buf[22] = {0};
    rm_util_size_to_human_readable(session->total_lint_size, size_string_buf,
                                   sizeof(size_string_buf));

    ARROW fprintf(out, _("This equals %s%s%s of duplicates which could be removed.\n"),
                  MAYBE_RED(out, session), size_string_buf, MAYBE_RESET(out, session));

    if(session->other_lint_cnt > 0) {
        ARROW fprintf(out, "%s%" LLU "%s ", MAYBE_RED(out, session),
                      session->other_lint_cnt, MAYBE_RESET(out, session));

        fprintf(out, _("other suspicious item(s) found, which may vary in size.\n"));
    }

    bool first_print_flag = true;
    GHashTableIter iter;
    char *path = NULL;
    RmFmtHandler *handler = NULL;
    rm_fmt_get_pair_iter(session->formats, &iter);

    while(g_hash_table_iter_next(&iter, (gpointer *)&path, (gpointer *)&handler)) {
        static const char *forbidden[] = {"stdout", "stderr", "stdin"};
        gsize forbidden_len = sizeof(forbidden) / sizeof(forbidden[0]);
        bool forbidden_found = false;

        for(gsize i = 0; i < forbidden_len; i++) {
            if(g_strcmp0(forbidden[i], path) == 0) {
                forbidden_found = true;
                break;
            }
        }

        if(forbidden_found) {
            continue;
        }

        /* Check if the file really exists, so we can print it for sure */
        if(access(path, R_OK) == -1) {
            continue;
        }

        if(first_print_flag) {
            fprintf(out, "\n");
            first_print_flag = false;
        }

        fprintf(out, _("Wrote a %s%s%s file to: %s%s%s\n"), MAYBE_BLUE(out, session),
                handler->name, MAYBE_RESET(out, session), MAYBE_GREEN(out, session), path,
                MAYBE_RESET(out, session));
    }
}
Exemple #5
0
static void rm_fmt_prog(
    RmSession *session,
    _U RmFmtHandler *parent,
    _U FILE *out,
    RmFmtProgressState state
) {
    if(state != RM_PROGRESS_STATE_SUMMARY) {
        return;
    }

    if(session->total_files <= 1) {
        ARROW fprintf(out, "%s%"LLU"%s",
                      MAYBE_RED(session), session->total_files, MAYBE_RESET(session)
                     );
        fprintf(out, _(" file(s) after investigation, nothing to search through.\n"));
        return;
    }

    if(rm_session_was_aborted(session)) {
        ARROW fprintf(out, _("Early shutdown, probably not all lint was found.\n"));
    }

    char numbers[3][512];
    snprintf(numbers[0], sizeof(numbers[0]), "%s%"LLU"%s", MAYBE_RED(session), session->total_files, MAYBE_RESET(session));
    snprintf(numbers[1], sizeof(numbers[1]), "%s%"LLU"%s", MAYBE_RED(session), session->dup_counter, MAYBE_RESET(session));
    snprintf(numbers[2], sizeof(numbers[2]), "%s%"LLU"%s", MAYBE_RED(session), session->dup_group_counter, MAYBE_RESET(session));

    ARROW fprintf(
        out,
        _("In total %s files, whereof %s are duplicates in %s groups.\n"),
        numbers[0], numbers[1], numbers[2]
    );

    /* log10(2 ** 64) + 2 = 21; */
    char size_string_buf[22] = {0};
    rm_util_size_to_human_readable(
        session->total_lint_size, size_string_buf, sizeof(size_string_buf)
    );

    ARROW fprintf(
        out,
        _("This equals %s%s%s of duplicates which could be removed.\n"),
        MAYBE_RED(session), size_string_buf, MAYBE_RESET(session)
    );

    if(session->other_lint_cnt > 0) {
        ARROW fprintf(
            out,
            "%s%"LLU"%s ",
            MAYBE_RED(session), session->other_lint_cnt, MAYBE_RESET(session)
        );

        fprintf(out, _("other suspicious item(s) found, which may vary in size.\n"));
    }

    bool first_print_flag = true;
    GHashTableIter iter;
    char *path = NULL;
    RmFmtHandler *handler = NULL;
    rm_fmt_get_pair_iter(session->formats, &iter);

    while(g_hash_table_iter_next(&iter, (gpointer *)&path, (gpointer *)&handler)) {
        static const char *forbidden[] = {"stdout", "stderr", "stdin"};
        gsize forbidden_len = sizeof(forbidden) / sizeof(forbidden[0]);

        if(lfind(path, forbidden, &forbidden_len, sizeof(const char *), rm_fmt_summary_cmp)) {
            continue;
        }

        /* Check if the file really exists, so we can print it for sure */
        if(access(path, R_OK) == -1) {
            continue;
        }

        if(first_print_flag) {
            fprintf(out, "\n");
            first_print_flag = false;
        }

        fprintf(
            out,
            _("Wrote a %s%s%s file to %s%s%s.\n"),
            MAYBE_BLUE(session), handler->name, MAYBE_RESET(session),
            MAYBE_GREEN(session), path, MAYBE_RESET(session)
        );
    }
}