perl 5.003_05: hints/solaris_2.sh
[p5sagit/p5-mst-13.2.git] / gv.c
diff --git a/gv.c b/gv.c
index c136fc5..455e785 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -241,9 +241,10 @@ char* name;
        /* Failed obvious case - look for SUPER as last element of stash's name */
        char *packname = HvNAME(stash);
        STRLEN len     = strlen(packname);
-       if ((len -= 7) >= 0 && strEQ(packname+len,"::SUPER")) {
+       if (len >= 7 && strEQ(packname+len-7,"::SUPER")) {
            /* Now look for @.*::SUPER::ISA */
            GV** gvp = (GV**)hv_fetch(stash,"ISA",3,FALSE);
+           len -= 7;
            if (!gvp || (gv = *gvp) == (GV*)&sv_undef || !GvAV(gv)) {
                /* No @ISA in package ending in ::SUPER - drop suffix
                   and see if there is an @ISA there
@@ -686,38 +687,32 @@ I32 sv_type;
 }
 
 void
-gv_fullname(sv,gv)
+gv_fullname(sv, gv, prefix)
 SV *sv;
 GV *gv;
+char *prefix;
 {
     HV *hv = GvSTASH(gv);
-
-    if (!hv)
+    if (!hv) {
+       SvOK_off(sv);
        return;
-    sv_setpv(sv, sv == (SV*)gv ? "*" : "");
+    }
+    sv_setpv(sv, prefix ? prefix : "");
     sv_catpv(sv,HvNAME(hv));
     sv_catpvn(sv,"::", 2);
     sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
 }
 
 void
-gv_efullname(sv,gv)
+gv_efullname(sv, gv, prefix)
 SV *sv;
 GV *gv;
+char *prefix;
 {
-    GV* egv = GvEGV(gv);
-    HV *hv;
-    
+    GV *egv = GvEGV(gv);
     if (!egv)
        egv = gv;
-    hv = GvSTASH(egv);
-    if (!hv)
-       return;
-
-    sv_setpv(sv, sv == (SV*)gv ? "*" : "");
-    sv_catpv(sv,HvNAME(hv));
-    sv_catpvn(sv,"::", 2);
-    sv_catpvn(sv,GvNAME(egv),GvNAMELEN(egv));
+    gv_fullname(sv, egv, prefix);
 }
 
 IO *