dougm       01/11/19 15:24:46

  Modified:    src/modules/perl modperl_util.c
  Log:
  give modperl_sv2pool more to choose from
  
  Revision  Changes    Path
  1.31      +28 -10    modperl-2.0/src/modules/perl/modperl_util.c
  
  Index: modperl_util.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_util.c,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- modperl_util.c    2001/11/06 18:39:41     1.30
  +++ modperl_util.c    2001/11/19 23:24:46     1.31
  @@ -170,15 +170,21 @@
   
   apr_pool_t *modperl_sv2pool(pTHX_ SV *obj)
   {
  -    char *classname;
  +    apr_pool_t *p = NULL;
  +    char *classname = NULL;
  +    IV ptr = 0;
   
  -    if (!(SvROK(obj) && (SvTYPE(SvRV(obj)) == SVt_PVMG))) {
  -        return NULL;
  +    if ((SvROK(obj) && (SvTYPE(SvRV(obj)) == SVt_PVMG))) {
  +        ptr = SvObjIV(obj);
  +        classname = SvCLASS(obj);
       }
  -
  -    classname = SvCLASS(obj);
  +    else {
  +        STRLEN len;
  +        classname = SvPV(obj, len);
  +    }
   
       if (*classname != 'A') {
  +        /* XXX: could be a subclass */
           return NULL;
       }
   
  @@ -187,25 +193,37 @@
           switch (*classname) {
             case 'P':
               if (strEQ(classname, "Pool")) {
  -                return (apr_pool_t *)SvObjIV(obj);
  +                p = (apr_pool_t *)ptr;
               }
  +            break;
             default:
  -            return NULL;
  +            break;
           };
       }
       else if (strnEQ(classname, "Apache::", 8)) {
           classname += 8;
           switch (*classname) {
  +          case 'C':
  +            if (strEQ(classname, "Connection")) {
  +                p = ptr ? ((conn_rec *)ptr)->pool : NULL;
  +            }
  +            break;
             case 'R':
               if (strEQ(classname, "RequestRec")) {
  -                return ((request_rec *)SvObjIV(obj))->pool;
  +                p = ptr ? ((request_rec *)ptr)->pool : NULL;
  +            }
  +            break;
  +          case 'S':
  +            if (strEQ(classname, "Server")) {
  +                p = ptr ? ((server_rec *)ptr)->process->pconf : NULL;
               }
  +            break;
             default:
  -            return NULL;
  +            break;
           };
       }
   
  -    return NULL;
  +    return p ? p : modperl_global_get_pconf();
   }
   
   char *modperl_apr_strerror(apr_status_t rv)
  
  
  


Reply via email to