You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by do...@hyperreal.org on 1998/05/10 06:03:31 UTC

cvs commit: modperl/src/modules/perl ModuleConfig.xs

dougm       98/05/09 21:03:30

  Added:       src/modules/perl ModuleConfig.xs
  Log:
  let's keep config stuff in this module
  
  Revision  Changes    Path
  1.1                  modperl/src/modules/perl/ModuleConfig.xs
  
  Index: ModuleConfig.xs
  ===================================================================
  /* ====================================================================
   * Copyright (c) 1995-1998 The Apache Group.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * 4. The names "Apache Server" and "Apache Group" must not be used to
   *    endorse or promote products derived from this software without
   *    prior written permission.
   *
   * 5. Redistributions of any form whatsoever must retain the following
   *    acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE APACHE GROUP OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Group and was originally based
   * on public domain software written at the National Center for
   * Supercomputing Applications, University of Illinois, Urbana-Champaign.
   * For more information on the Apache Group and the Apache HTTP server
   * project, please see <http://www.apache.org/>.
   *
   */
  
  #define CORE_PRIVATE
  #include "mod_perl.h"
  
  static void *vector_from_sv (SV *sv)
  {
  
      if(sv_derived_from(sv, "Apache") && SvROK(sv)) {
  	request_rec *r = (request_rec *) SvIV((SV*)SvRV(sv));
  	return r->per_dir_config;
      }
      else if(sv_derived_from(sv, "Apache::Server") && SvROK(sv)) {
  	server_rec *s = (server_rec *) SvIV((SV*)SvRV(sv));
  	return s->module_config;
      }
      else {
  	croak("Argument is not an Apache or Apache::Server object");
      }
  }
  
  MODULE = Apache::ModuleConfig  PACKAGE = Apache::ModuleConfig
  
  SV *
  get(self, obj, svkey=Nullsv)
      SV *self
      SV *obj
      SV *svkey
  
      PREINIT:
      SV *caller = Nullsv;
  
      CODE:
      RETVAL = Nullsv;
      if(svkey && (gv_stashpv(SvPV(svkey,na), FALSE)))
          caller = svkey;
  
      if((svkey == Nullsv) || caller) {
  	HV *xs_config = perl_get_hv("Apache::XS_ModuleConfig", TRUE);
  	SV **mod_ptr;
  
  	if(!caller)
  	    caller = perl_eval_pv("scalar caller", TRUE);
  
  	if(caller) 
  	    mod_ptr = hv_fetch(xs_config, SvPVX(caller), SvCUR(caller), FALSE);
  
  	if(mod_ptr && *mod_ptr) {
  	    IV tmp = SvIV((SV*)SvRV(*mod_ptr));
  	    void *ptr = vector_from_sv(obj);
  	    mod_perl_perl_dir_config *data = 
  		get_module_config(ptr, (module *)tmp);
  	    RETVAL = data->obj ? SvREFCNT_inc(data->obj) : Nullsv; 
  	}
      }
      if(!RETVAL) XSRETURN_UNDEF;
  
      OUTPUT:
      RETVAL
  
  MODULE = Apache::ModuleConfig  PACKAGE = Apache::CmdParms
  
  char *
  info(parms)
      Apache::CmdParms parms
  
      CODE:
      RETVAL = ((mod_perl_cmd_info *)parms->info)->info;
  
      OUTPUT:
      RETVAL
  
  int
  GETC(parms)
      Apache::CmdParms parms
  
      CODE:
  #if MODULE_MAGIC_NUMBER >= 19980413
      RETVAL = cfg_getc(cmd_infile);
  #else
      croak("httpd too old for getc");
  #endif
      OUTPUT:
      RETVAL
  
  SV *
  getline(parms, buff=Nullsv, len=MAX_STRING_LEN)
      Apache::CmdParms parms
      SV *buff
      int len
  
      ALIAS:
      Apache::CmdParms::READ = 1
      Apache::CmdParms::READLINE = 2
  
      PREINIT:
      char *l;
      int ret = 0;
  
      CODE:				   
      RETVAL = newSV(0);
      l = (char *)palloc(parms->temp_pool, len);
      ret = !cfg_getline(l, len, cmd_infile);
  
      switch((ix = XSANY.any_i32)) {
  	case 0:
  	sv_setiv(RETVAL, ret);
  	sv_setpv(buff, l);
  	break;
  
  	case 1:
  	sv_setiv(RETVAL, SvCUR(buff));
  	sv_setpv(buff, l);
  	break;
  
  	case 2:
  	sv_setpv(RETVAL, l);
  	break;
      }
  
      OUTPUT:
      buff
      RETVAL				   
  
  char *
  path(parms)
      Apache::CmdParms parms
  
      CODE:				   
      if(!(RETVAL = parms->path)) XSRETURN_UNDEF;
  
      OUTPUT:
      RETVAL
  
  Apache::Server
  server(parms)
      Apache::CmdParms parms
  
      CODE:				   
      RETVAL = parms->server;
  
      OUTPUT:
      RETVAL
  
  int
  override(parms)
      Apache::CmdParms parms
  
      CODE:				   
      RETVAL = parms->override;
  
      OUTPUT:
      RETVAL
  
  int
  limited(parms)
      Apache::CmdParms parms
  
      CODE:				   
      RETVAL = parms->limited;
  
      OUTPUT:
      RETVAL