X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=gv.c;h=90eee265f6a634073b8fac69fa219507e9f02584;hb=10a676f83f541430b63a3192b246bf6f86d3b189;hp=9aa4c54d5262639bdb0cac63882d3dd06d66eabf;hpb=09280a334577a8254c4115b822e1f8cc667611a1;p=p5sagit%2Fp5-mst-13.2.git diff --git a/gv.c b/gv.c index 9aa4c54..90eee26 100644 --- a/gv.c +++ b/gv.c @@ -58,15 +58,24 @@ GV * gv_fetchfile(name) char *name; { - char tmpbuf[1200]; + char smallbuf[256]; + char *tmpbuf; STRLEN tmplen; GV *gv; - sprintf(tmpbuf, "_<%s", name); - tmplen = strlen(tmpbuf); + tmplen = strlen(name) + 2; + if (tmplen < sizeof smallbuf) + tmpbuf = smallbuf; + else + New(603, tmpbuf, tmplen + 1, char); + tmpbuf[0] = '_'; + tmpbuf[1] = '<'; + strcpy(tmpbuf + 2, name); gv = *(GV**)hv_fetch(defstash, tmpbuf, tmplen, TRUE); if (!isGV(gv)) gv_init(gv, defstash, tmpbuf, tmplen, FALSE); + if (tmpbuf != smallbuf) + Safefree(tmpbuf); sv_setpv(GvSV(gv), name); if (*name == '/' && (instr(name, "/lib/") || instr(name, ".pm"))) GvMULTI_on(gv); @@ -1344,7 +1353,7 @@ int flags; EXTEND(sp, notfound + 5); PUSHs(lr>0? right: left); PUSHs(lr>0? left: right); - PUSHs( assign ? &sv_undef : boolSV(lr>0) ); + PUSHs( lr > 0 ? &sv_yes : ( assign ? &sv_undef : &sv_no )); if (notfound) { PUSHs( sv_2mortal(newSVpv((char *)AMG_names[method + assignshift],0)) ); }