static int mm_correct_backref()

in ext/mmap/mmap.c [1090:1109]


static int mm_correct_backref() {
    VALUE match;
    int i, start;

    match = rb_backref_get();
    if (NIL_P(match)) return 0;
    if (RMATCH(match)->BEG(0) == -1) return 0;
    start = RMATCH(match)->BEG(0);
    RMATCH(match)->str = rb_str_new(StringValuePtr(RMATCH(match)->str) + start,
                                    RMATCH(match)->END(0) - start);
    if (OBJ_TAINTED(match)) OBJ_TAINT(RMATCH(match)->str);
    for (i = 0; i < RMATCH(match)->rmatch->regs.num_regs &&
                RMATCH(match)->BEG(i) != -1;
         i++) {
        RMATCH(match)->BEG(i) -= start;
        RMATCH(match)->END(i) -= start;
    }
    rb_backref_set(match);
    return start;
}