X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=doop.c;h=c906db70d11614fda1bc3313a04bfc71ae13dd45;hb=2b17841a359577f50deee3551fafa772a520cdcc;hp=7f00f04907cce78e06c63f3cb44799167e8d5aa8;hpb=1476d272ad11d4ee4160587660fab223f7373e88;p=p5sagit%2Fp5-mst-13.2.git diff --git a/doop.c b/doop.c index 7f00f04..c906db7 100644 --- a/doop.c +++ b/doop.c @@ -442,10 +442,13 @@ I32 do_chomp(sv) register SV *sv; { - register I32 count = 0; + register I32 count; STRLEN len; char *s; - + + if (RsSNARF(rs)) + return 0; + count = 0; if (SvTYPE(sv) == SVt_PVAV) { register I32 i; I32 max; @@ -472,7 +475,7 @@ register SV *sv; s = SvPV_force(sv, len); if (s && len) { s += --len; - if (rspara) { + if (RsPARA(rs)) { if (*s != '\n') goto nope; ++count; @@ -482,21 +485,24 @@ register SV *sv; ++count; } } - else if (rslen == 1) { - if (*s != rschar) - goto nope; - ++count; - } else { - if (len < rslen - 1) - goto nope; - len -= rslen - 1; - s -= rslen - 1; - if (bcmp(s, rs, rslen)) - goto nope; - count += rslen; + STRLEN rslen; + char *rsptr = SvPV(rs, rslen); + if (rslen == 1) { + if (*s != *rsptr) + goto nope; + ++count; + } + else { + if (len < rslen) + goto nope; + len -= rslen - 1; + s -= rslen - 1; + if (bcmp(s, rsptr, rslen)) + goto nope; + count += rslen; + } } - *s = '\0'; SvCUR_set(sv, len); SvNIOK_off(sv);