}
break;
default:
- if (len > 10 && _memEQs(name, "prototype(")) {
- SV * proto = newSVpvn(name+10,len-11);
+ if (memBEGINPs(name, len, "prototype(")) {
+ const STRLEN proto_len = sizeof("prototype(") - 1;
+ SV * proto = newSVpvn(name + proto_len, len - proto_len - 1);
HEK *const hek = CvNAME_HEK((CV *)sv);
SV *subname;
if (name[len-1] != ')')
#define memBEGINs(s1, l, s2) \
( (l) >= sizeof(s2) - 1 \
&& memEQ(s1, "" s2 "", sizeof(s2)-1))
+#define memBEGINPs(s1, l, s2) \
+ ( (l) > sizeof(s2) - 1 \
+ && memEQ(s1, "" s2 "", sizeof(s2)-1))
#define memENDs(s1, l, s2) \
( (l) >= sizeof(s2) - 1 \
&& memEQ(s1 + (l) - (sizeof(s2) - 1), "" s2 "", sizeof(s2)-1))
if (check_keyword) {
char *s2 = PL_tokenbuf;
STRLEN len2 = len;
- if (allow_pack && len > 6 && strBEGINs(s2, "CORE::"))
- s2 += 6, len2 -= 6;
+ if (allow_pack && memBEGINPs(s2, len, "CORE::")) {
+ s2 += sizeof("CORE::") - 1;
+ len2 -= sizeof("CORE::") - 1;
+ }
if (keyword(s2, len2, 0))
return start;
}
}
if (PL_parser->in_pod) {
/* Incest with pod. */
- if (*s == '=' && strBEGINs(s, "=cut") && !isALPHA(s[4])) {
+ if ( memBEGINPs(s, (STRLEN) (PL_bufend - s), "=cut")
+ && !isALPHA(s[4]))
+ {
SvPVCLEAR(PL_linestr);
PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
char *p = s;
SSize_t s_off = s - SvPVX(PL_linestr);
- if ((PL_bufend - p) >= 3
- && strBEGINs(p, "my") && isSPACE(*(p + 2)))
+ if ( memBEGINPs(p, (STRLEN) (PL_bufend - p), "my")
+ && isSPACE(*(p + 2)))
{
- p += 2;
+ p += 2;
}
- else if ((PL_bufend - p) >= 4
- && strBEGINs(p, "our") && isSPACE(*(p + 3)))
- p += 3;
+ else if ( memBEGINPs(p, (STRLEN) (PL_bufend - p), "our")
+ && isSPACE(*(p + 3)))
+ {
+ p += 3;
+ }
+
p = skipspace(p);
/* skip optional package name, as in "for my abc $x (..)" */
if (isIDFIRST_lazy_if_safe(p, PL_bufend, UTF)) {