403Webshell
Server IP : 164.138.27.172  /  Your IP : 216.73.216.143
Web Server : nginx/1.27.4
System : Linux cookingdream 6.8.0-124-generic #124-Ubuntu SMP PREEMPT_DYNAMIC Tue May 26 13:00:45 UTC 2026 x86_64
User : www-adm ( 1001)
PHP Version : 8.3.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /home/jonasn/.cpan/build/Geo-IP-1.51-0/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/jonasn/.cpan/build/Geo-IP-1.51-0/IP.c
/*
 * This file was generated automatically by ExtUtils::ParseXS version 3.34 from the
 * contents of IP.xs. Do not edit this file, edit IP.xs instead.
 *
 *    ANY CHANGES MADE HERE WILL BE LOST!
 *
 */

#line 1 "IP.xs"
#ifdef __cplusplus
extern "C" {
#endif

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
#include "GeoIP.h"
#include "GeoIPCity.h"

/* if we're built against a version of geoip-api-c that doesn't define this,
 * the flag should be harmless (as long as it doesn't clash with another
 * flag using the same bit position). */
#ifndef GEOIP_SILENCE
#define GEOIP_SILENCE		16
#endif

#ifdef __cplusplus
}
#endif

#line 33 "IP.c"
#ifndef PERL_UNUSED_VAR
#  define PERL_UNUSED_VAR(var) if (0) var = var
#endif

#ifndef dVAR
#  define dVAR		dNOOP
#endif


/* This stuff is not part of the API! You have been warned. */
#ifndef PERL_VERSION_DECIMAL
#  define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s)
#endif
#ifndef PERL_DECIMAL_VERSION
#  define PERL_DECIMAL_VERSION \
	  PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
#endif
#ifndef PERL_VERSION_GE
#  define PERL_VERSION_GE(r,v,s) \
	  (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
#endif
#ifndef PERL_VERSION_LE
#  define PERL_VERSION_LE(r,v,s) \
	  (PERL_DECIMAL_VERSION <= PERL_VERSION_DECIMAL(r,v,s))
#endif

/* XS_INTERNAL is the explicit static-linkage variant of the default
 * XS macro.
 *
 * XS_EXTERNAL is the same as XS_INTERNAL except it does not include
 * "STATIC", ie. it exports XSUB symbols. You probably don't want that
 * for anything but the BOOT XSUB.
 *
 * See XSUB.h in core!
 */


/* TODO: This might be compatible further back than 5.10.0. */
#if PERL_VERSION_GE(5, 10, 0) && PERL_VERSION_LE(5, 15, 1)
#  undef XS_EXTERNAL
#  undef XS_INTERNAL
#  if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
#    define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name)
#    define XS_INTERNAL(name) STATIC XSPROTO(name)
#  endif
#  if defined(__SYMBIAN32__)
#    define XS_EXTERNAL(name) EXPORT_C XSPROTO(name)
#    define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name)
#  endif
#  ifndef XS_EXTERNAL
#    if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus)
#      define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__)
#      define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__)
#    else
#      ifdef __cplusplus
#        define XS_EXTERNAL(name) extern "C" XSPROTO(name)
#        define XS_INTERNAL(name) static XSPROTO(name)
#      else
#        define XS_EXTERNAL(name) XSPROTO(name)
#        define XS_INTERNAL(name) STATIC XSPROTO(name)
#      endif
#    endif
#  endif
#endif

/* perl >= 5.10.0 && perl <= 5.15.1 */


/* The XS_EXTERNAL macro is used for functions that must not be static
 * like the boot XSUB of a module. If perl didn't have an XS_EXTERNAL
 * macro defined, the best we can do is assume XS is the same.
 * Dito for XS_INTERNAL.
 */
#ifndef XS_EXTERNAL
#  define XS_EXTERNAL(name) XS(name)
#endif
#ifndef XS_INTERNAL
#  define XS_INTERNAL(name) XS(name)
#endif

/* Now, finally, after all this mess, we want an ExtUtils::ParseXS
 * internal macro that we're free to redefine for varying linkage due
 * to the EXPORT_XSUB_SYMBOLS XS keyword. This is internal, use
 * XS_EXTERNAL(name) or XS_INTERNAL(name) in your code if you need to!
 */

#undef XS_EUPXS
#if defined(PERL_EUPXS_ALWAYS_EXPORT)
#  define XS_EUPXS(name) XS_EXTERNAL(name)
#else
   /* default to internal */
#  define XS_EUPXS(name) XS_INTERNAL(name)
#endif

#ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE
#define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params)

/* prototype to pass -Wmissing-prototypes */
STATIC void
S_croak_xs_usage(const CV *const cv, const char *const params);

STATIC void
S_croak_xs_usage(const CV *const cv, const char *const params)
{
    const GV *const gv = CvGV(cv);

    PERL_ARGS_ASSERT_CROAK_XS_USAGE;

    if (gv) {
        const char *const gvname = GvNAME(gv);
        const HV *const stash = GvSTASH(gv);
        const char *const hvname = stash ? HvNAME(stash) : NULL;

        if (hvname)
	    Perl_croak_nocontext("Usage: %s::%s(%s)", hvname, gvname, params);
        else
	    Perl_croak_nocontext("Usage: %s(%s)", gvname, params);
    } else {
        /* Pants. I don't think that it should be possible to get here. */
	Perl_croak_nocontext("Usage: CODE(0x%" UVxf ")(%s)", PTR2UV(cv), params);
    }
}
#undef  PERL_ARGS_ASSERT_CROAK_XS_USAGE

#define croak_xs_usage        S_croak_xs_usage

#endif

/* NOTE: the prototype of newXSproto() is different in versions of perls,
 * so we define a portable version of newXSproto()
 */
#ifdef newXS_flags
#define newXSproto_portable(name, c_impl, file, proto) newXS_flags(name, c_impl, file, proto, 0)
#else
#define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv)
#endif /* !defined(newXS_flags) */

#if PERL_VERSION_LE(5, 21, 5)
#  define newXS_deffile(a,b) Perl_newXS(aTHX_ a,b,file)
#else
#  define newXS_deffile(a,b) Perl_newXS_deffile(aTHX_ a,b)
#endif

#line 177 "IP.c"

XS_EUPXS(XS_Geo__IP_region_name_by_code); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_region_name_by_code)
{
    dVAR; dXSARGS;
    if (items != 3)
       croak_xs_usage(cv,  "CLASS, country_code, region");
    {
	char *        CLASS = (char *)SvPVbyte_nolen (ST(0))
;
	char *        country_code = (char *)SvPVbyte_nolen (ST(1))
;
	char *        region = (char *)SvPVbyte_nolen (ST(2))
;
	const char *	RETVAL;
	dXSTARG;
#line 33 "IP.xs"
	RETVAL = (const char *) GeoIP_region_name_by_code(country_code, region);
#line 196 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_continent_code_by_country_code); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_continent_code_by_country_code)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "CLASS, country_code");
    {
	char *        CLASS = (char *)SvPVbyte_nolen (ST(0))
;
	char *        country_code = (char *)SvPVbyte_nolen (ST(1))
;
	const char *	RETVAL;
	dXSTARG;
#line 42 "IP.xs"
	RETVAL = (const char *) GeoIP_country_continent[GeoIP_id_by_code(country_code)];
#line 218 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_time_zone); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_time_zone)
{
    dVAR; dXSARGS;
    if (items != 3)
       croak_xs_usage(cv,  "CLASS, country_code, region");
    {
	char *        CLASS = (char *)SvPVbyte_nolen (ST(0))
;
	char *        country_code = (char *)SvPVbyte_nolen (ST(1))
;
	char *        region = (char *)SvPVbyte_nolen (ST(2))
;
	const char *	RETVAL;
	dXSTARG;
#line 52 "IP.xs"
	RETVAL = (const char *) GeoIP_time_zone_by_country_and_region(country_code, region);
#line 242 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_new); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_new)
{
    dVAR; dXSARGS;
    if (items < 1 || items > 2)
       croak_xs_usage(cv,  "CLASS, flags = 0");
    {
	char *        CLASS = (char *)SvPVbyte_nolen (ST(0))
;
	int	flags;
#line 61 "IP.xs"
        GeoIP * gi;
#line 261 "IP.c"
	GeoIP *	RETVAL;

	if (items < 2)
	    flags = 0;
	else {
	    flags = (int)SvIV(ST(1))
;
	}
#line 63 "IP.xs"
	gi = GeoIP_new(flags | GEOIP_SILENCE);
        if ( gi )
          GeoIP_set_charset(gi, GEOIP_CHARSET_ISO_8859_1);
        RETVAL = gi;
#line 275 "IP.c"
	{
	    SV * RETVALSV;
	    RETVALSV = sv_newmortal();
	    sv_setref_pv( RETVALSV, (char *)CLASS, (void*)RETVAL );
	    ST(0) = RETVALSV;
	}
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_open_type); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_open_type)
{
    dVAR; dXSARGS;
    if (items < 2 || items > 3)
       croak_xs_usage(cv,  "CLASS, type, flags = 0");
    {
	char *        CLASS = (char *)SvPVbyte_nolen (ST(0))
;
	int	type = (int)SvIV(ST(1))
;
	int	flags;
#line 76 "IP.xs"
        GeoIP * gi;
#line 301 "IP.c"
	GeoIP *	RETVAL;

	if (items < 3)
	    flags = 0;
	else {
	    flags = (int)SvIV(ST(2))
;
	}
#line 78 "IP.xs"
        gi = GeoIP_open_type(type, flags | GEOIP_SILENCE);
        if ( gi )
          GeoIP_set_charset(gi, GEOIP_CHARSET_ISO_8859_1);
        RETVAL = gi;
#line 315 "IP.c"
	{
	    SV * RETVALSV;
	    RETVALSV = sv_newmortal();
	    sv_setref_pv( RETVALSV, (char *)CLASS, (void*)RETVAL );
	    ST(0) = RETVALSV;
	}
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_open); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_open)
{
    dVAR; dXSARGS;
    if (items < 2 || items > 3)
       croak_xs_usage(cv,  "CLASS, filename, flags = 0");
    {
	char *        CLASS = (char *)SvPVbyte_nolen (ST(0))
;
	char *        filename = (char *)SvPVbyte_nolen (ST(1))
;
	int	flags;
#line 91 "IP.xs"
        GeoIP * gi;
#line 341 "IP.c"
	GeoIP *	RETVAL;

	if (items < 3)
	    flags = 0;
	else {
	    flags = (int)SvIV(ST(2))
;
	}
#line 93 "IP.xs"
	gi = ( filename != NULL ) ? GeoIP_open(filename, flags | GEOIP_SILENCE) : NULL;
        if ( gi )
          GeoIP_set_charset(gi, GEOIP_CHARSET_ISO_8859_1);
        RETVAL = gi;
#line 355 "IP.c"
	{
	    SV * RETVALSV;
	    RETVALSV = sv_newmortal();
	    sv_setref_pv( RETVALSV, (char *)CLASS, (void*)RETVAL );
	    ST(0) = RETVALSV;
	}
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_id_by_addr); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_id_by_addr)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, addr");
    {
	GeoIP *	gi;
	char *        addr = (char *)SvPVbyte_nolen (ST(1))
;
	int	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::id_by_addr() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 105 "IP.xs"
	RETVAL = GeoIP_id_by_addr(gi,addr);
#line 389 "IP.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_id_by_name); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_id_by_name)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, name");
    {
	GeoIP *	gi;
	char *        name = (char *)SvPVbyte_nolen (ST(1))
;
	int	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::id_by_name() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 114 "IP.xs"
	RETVAL = GeoIP_id_by_name(gi,name);
#line 418 "IP.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_database_edition); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_database_edition)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gi");
    {
	GeoIP *	gi;
	int	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::database_edition() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 122 "IP.xs"
	RETVAL = GeoIP_database_edition(gi);
#line 445 "IP.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_database_info); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_database_info)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gi");
    {
	GeoIP *	gi;
	char *	RETVAL;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::database_info() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 130 "IP.xs"
	RETVAL = GeoIP_database_info(gi);
#line 471 "IP.c"
	{
	    SV * RETVALSV;
	    RETVALSV = sv_newmortal();
    if(RETVAL != NULL) {
	    RETVALSV = newSVpv(RETVAL, strlen(RETVAL));
	    free(RETVAL);
	    sv_2mortal(RETVALSV);
    }
	    ST(0) = RETVALSV;
	}
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_country_code_by_ipnum_v6); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_country_code_by_ipnum_v6)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, ptr");
    {
	GeoIP *	gi;
	char *        ptr = (char *)SvPVbyte_nolen (ST(1))
;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::country_code_by_ipnum_v6() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 139 "IP.xs"
	RETVAL = GeoIP_country_code_by_ipnum_v6(gi,*(geoipv6_t*)ptr);
#line 509 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_country_code_by_addr_v6); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_country_code_by_addr_v6)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, addr");
    {
	GeoIP *	gi;
	char *        addr = (char *)SvPVbyte_nolen (ST(1))
;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::country_code_by_addr_v6() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 148 "IP.xs"
	RETVAL = GeoIP_country_code_by_addr_v6(gi,addr);
#line 538 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_country_code_by_name_v6); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_country_code_by_name_v6)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, name");
    {
	GeoIP *	gi;
	char *        name = (char *)SvPVbyte_nolen (ST(1))
;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::country_code_by_name_v6() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 157 "IP.xs"
	RETVAL = GeoIP_country_code_by_name_v6(gi,name);
#line 567 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_country_code3_by_ipnum_v6); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_country_code3_by_ipnum_v6)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, ptr");
    {
	GeoIP *	gi;
	char *        ptr = (char *)SvPVbyte_nolen (ST(1))
;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::country_code3_by_ipnum_v6() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 166 "IP.xs"
	RETVAL = GeoIP_country_code3_by_ipnum_v6(gi,*(geoipv6_t*)ptr);
#line 596 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_country_code3_by_addr_v6); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_country_code3_by_addr_v6)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, addr");
    {
	GeoIP *	gi;
	char *        addr = (char *)SvPVbyte_nolen (ST(1))
;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::country_code3_by_addr_v6() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 175 "IP.xs"
	RETVAL = GeoIP_country_code3_by_addr_v6(gi,addr);
#line 625 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_country_code3_by_name_v6); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_country_code3_by_name_v6)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, name");
    {
	GeoIP *	gi;
	char *        name = (char *)SvPVbyte_nolen (ST(1))
;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::country_code3_by_name_v6() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 184 "IP.xs"
	RETVAL = GeoIP_country_code3_by_name_v6(gi,name);
#line 654 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_country_name_by_name_v6); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_country_name_by_name_v6)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, name");
    {
	GeoIP *	gi;
	char *        name = (char *)SvPVbyte_nolen (ST(1))
;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::country_name_by_name_v6() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 193 "IP.xs"
	RETVAL = GeoIP_country_name_by_name_v6(gi,name);
#line 683 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_country_name_by_ipnum_v6); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_country_name_by_ipnum_v6)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, ptr");
    {
	GeoIP *	gi;
	char *        ptr = (char *)SvPVbyte_nolen (ST(1))
;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::country_name_by_ipnum_v6() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 202 "IP.xs"
	RETVAL = GeoIP_country_name_by_ipnum_v6(gi,*(geoipv6_t*)ptr);
#line 712 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_country_name_by_addr_v6); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_country_name_by_addr_v6)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, addr");
    {
	GeoIP *	gi;
	char *        addr = (char *)SvPVbyte_nolen (ST(1))
;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::country_name_by_addr_v6() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 211 "IP.xs"
	RETVAL = GeoIP_country_name_by_addr_v6(gi,addr);
#line 741 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_country_code_by_addr); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_country_code_by_addr)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, addr");
    {
	GeoIP *	gi;
	char *        addr = (char *)SvPVbyte_nolen (ST(1))
;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::country_code_by_addr() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 220 "IP.xs"
	RETVAL = GeoIP_country_code_by_addr(gi,addr);
#line 770 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_country_code_by_name); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_country_code_by_name)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, name");
    {
	GeoIP *	gi;
	char *        name = (char *)SvPVbyte_nolen (ST(1))
;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::country_code_by_name() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 229 "IP.xs"
	RETVAL = GeoIP_country_code_by_name(gi,name);
#line 799 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_country_code3_by_addr); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_country_code3_by_addr)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, addr");
    {
	GeoIP *	gi;
	char *        addr = (char *)SvPVbyte_nolen (ST(1))
;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::country_code3_by_addr() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 238 "IP.xs"
	RETVAL = GeoIP_country_code3_by_addr(gi,addr);
#line 828 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_country_code3_by_name); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_country_code3_by_name)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, name");
    {
	GeoIP *	gi;
	char *        name = (char *)SvPVbyte_nolen (ST(1))
;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::country_code3_by_name() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 247 "IP.xs"
	RETVAL = GeoIP_country_code3_by_name(gi,name);
#line 857 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_country_name_by_addr); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_country_name_by_addr)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, addr");
    {
	GeoIP *	gi;
	char *        addr = (char *)SvPVbyte_nolen (ST(1))
;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::country_name_by_addr() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 256 "IP.xs"
	RETVAL = GeoIP_country_name_by_addr(gi,addr);
#line 886 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_country_name_by_name); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_country_name_by_name)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, name");
    {
	GeoIP *	gi;
	char *        name = (char *)SvPVbyte_nolen (ST(1))
;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::country_name_by_name() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 265 "IP.xs"
	RETVAL = GeoIP_country_name_by_name(gi,name);
#line 915 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_name_by_ipnum_v6); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_name_by_ipnum_v6)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, ptr");
    PERL_UNUSED_VAR(ax); /* -Wall */
    SP -= items;
    {
	GeoIP *	gi;
	char *        ptr = (char *)SvPVbyte_nolen (ST(1))
;
#line 274 "IP.xs"
        char * n;
#line 936 "IP.c"

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::name_by_ipnum_v6() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 276 "IP.xs"
        ST(0) = sv_newmortal();
	n = GeoIP_name_by_ipnum_v6(gi,*(geoipv6_t*)ptr);
        if ( n != NULL ) {
          ST(0) = newSVpv(n, strlen(n));
          free(n);
#if defined(sv_utf8_decode)
          if ( GeoIP_charset(gi) == GEOIP_CHARSET_UTF8 )
            SvUTF8_on(ST(0));
#endif
          sv_2mortal(ST(0));
        }
       XSRETURN(1);
#line 958 "IP.c"
	PUTBACK;
	return;
    }
}


XS_EUPXS(XS_Geo__IP_name_by_addr_v6); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_name_by_addr_v6)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, addr");
    PERL_UNUSED_VAR(ax); /* -Wall */
    SP -= items;
    {
	GeoIP *	gi;
	char *        addr = (char *)SvPVbyte_nolen (ST(1))
;
#line 294 "IP.xs"
        char * n;
#line 979 "IP.c"

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::name_by_addr_v6() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 296 "IP.xs"
        ST(0) = sv_newmortal();
	n = GeoIP_name_by_addr_v6(gi,addr);
        if ( n != NULL ) {
          ST(0) = newSVpv(n, strlen(n));
          free(n);
#if defined(sv_utf8_decode)
          if ( GeoIP_charset(gi) == GEOIP_CHARSET_UTF8 )
            SvUTF8_on(ST(0));
#endif
          sv_2mortal(ST(0));
        }
       XSRETURN(1);
#line 1001 "IP.c"
	PUTBACK;
	return;
    }
}


XS_EUPXS(XS_Geo__IP_name_by_name_v6); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_name_by_name_v6)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, name");
    PERL_UNUSED_VAR(ax); /* -Wall */
    SP -= items;
    {
	GeoIP *	gi;
	char *        name = (char *)SvPVbyte_nolen (ST(1))
;
#line 314 "IP.xs"
        char * n;
#line 1022 "IP.c"

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::name_by_name_v6() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 316 "IP.xs"
        ST(0) = sv_newmortal();
	n = GeoIP_name_by_name_v6(gi,name);
        if ( n != NULL ) {
          ST(0) = newSVpv(n, strlen(n));
          free(n);
#if defined(sv_utf8_decode)
          if ( GeoIP_charset(gi) == GEOIP_CHARSET_UTF8 )
            SvUTF8_on(ST(0));
#endif
          sv_2mortal(ST(0));
        }
       XSRETURN(1);
#line 1044 "IP.c"
	PUTBACK;
	return;
    }
}


XS_EUPXS(XS_Geo__IP_org_by_addr); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_org_by_addr)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, addr");
    PERL_UNUSED_VAR(ax); /* -Wall */
    SP -= items;
    {
	GeoIP *	gi;
	char *        addr = (char *)SvPVbyte_nolen (ST(1))
;
#line 334 "IP.xs"
        char * n;
#line 1065 "IP.c"

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::org_by_addr() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 336 "IP.xs"
        ST(0) = sv_newmortal();
	n = GeoIP_org_by_addr(gi,addr);
        if ( n != NULL ) {
          ST(0) = newSVpv(n, strlen(n));
          free(n);
#if defined(sv_utf8_decode)
          if ( GeoIP_charset(gi) == GEOIP_CHARSET_UTF8 )
            SvUTF8_on(ST(0));
#endif
          sv_2mortal(ST(0));
        }
       XSRETURN(1);
#line 1087 "IP.c"
	PUTBACK;
	return;
    }
}


XS_EUPXS(XS_Geo__IP_org_by_name); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_org_by_name)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, name");
    PERL_UNUSED_VAR(ax); /* -Wall */
    SP -= items;
    {
	GeoIP *	gi;
	char *        name = (char *)SvPVbyte_nolen (ST(1))
;
#line 354 "IP.xs"
        char * n;
#line 1108 "IP.c"

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::org_by_name() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 356 "IP.xs"
        ST(0) = sv_newmortal();
	n = GeoIP_org_by_name(gi,name);
        if ( n != NULL ) {
          ST(0) = newSVpv(n, strlen(n));
          free(n);
#if defined(sv_utf8_decode)
          if ( GeoIP_charset(gi) == GEOIP_CHARSET_UTF8 )
            SvUTF8_on(ST(0));
#endif
          sv_2mortal(ST(0));
        }
       XSRETURN(1);
#line 1130 "IP.c"
	PUTBACK;
	return;
    }
}


XS_EUPXS(XS_Geo__IP_range_by_ip); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_range_by_ip)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, addr");
    PERL_UNUSED_VAR(ax); /* -Wall */
    SP -= items;
    {
	GeoIP *	gi;
	const char *	addr = (const char *)SvPV_nolen(ST(1))
;
#line 375 "IP.xs"
    char ** r;
#line 1151 "IP.c"

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::range_by_ip() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 377 "IP.xs"
	r = GeoIP_range_by_ip(gi,addr);
        if (r != NULL){
		EXTEND(SP,2);
		PUSHs( sv_2mortal( newSVpv(r[0], 0) ) );
		PUSHs( sv_2mortal( newSVpv(r[1], 0) ) );

		if ( r[0] )
			free(r[0]);
		if ( r[1] )
			free(r[1]);
		free(r);
        }
#line 1173 "IP.c"
	PUTBACK;
	return;
    }
}


XS_EUPXS(XS_Geo__IP_region_by_addr); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_region_by_addr)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, addr");
    PERL_UNUSED_VAR(ax); /* -Wall */
    SP -= items;
    {
	GeoIP *	gi;
	char *        addr = (char *)SvPVbyte_nolen (ST(1))
;
#line 395 "IP.xs"
	GeoIPRegion * gir;
#line 1194 "IP.c"

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::region_by_addr() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 397 "IP.xs"
	gir = GeoIP_region_by_addr(gi,addr);
        if (gir){
	  EXTEND(SP,2);

          ( gir->country_code[0] == '\0' && gir->country_code[1] == '\0' )
            ? PUSHs ( sv_newmortal() )
 	    : PUSHs ( sv_2mortal( newSVpv(gir->country_code, 2) ) );

          ( gir->region[0] == '\0' && gir->region[1] == '\0' )
            ? PUSHs ( sv_newmortal() )
            : PUSHs( sv_2mortal( newSVpv(gir->region, 2) ) );

          GeoIPRegion_delete(gir);
        }
#line 1218 "IP.c"
	PUTBACK;
	return;
    }
}


XS_EUPXS(XS_Geo__IP_region_by_name); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_region_by_name)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, name");
    PERL_UNUSED_VAR(ax); /* -Wall */
    SP -= items;
    {
	GeoIP *	gi;
	char *        name = (char *)SvPVbyte_nolen (ST(1))
;
#line 417 "IP.xs"
	GeoIPRegion * gir;
#line 1239 "IP.c"

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::region_by_name() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 419 "IP.xs"
	gir = GeoIP_region_by_name(gi,name);
        if (gir){
	  EXTEND(SP,2);

          ( gir->country_code[0] == '\0' && gir->country_code[1] == '\0' )
            ? PUSHs ( sv_newmortal() )
 	    : PUSHs ( sv_2mortal( newSVpv(gir->country_code, 2) ) );

          ( gir->region[0] == '\0' && gir->region[1] == '\0' )
            ? PUSHs ( sv_newmortal() )
            : PUSHs( sv_2mortal( newSVpv(gir->region, 2) ) );

	  GeoIPRegion_delete(gir);
        }
#line 1263 "IP.c"
	PUTBACK;
	return;
    }
}


XS_EUPXS(XS_Geo__IP_record_by_ipnum_v6); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_record_by_ipnum_v6)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, ipnum");
    {
	GeoIP *	gi;
	char *        ipnum = (char *)SvPVbyte_nolen (ST(1))
;
#line 439 "IP.xs"
	char * CLASS = "Geo::IP::Record";
#line 1282 "IP.c"
	GeoIPRecord *	RETVAL;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::record_by_ipnum_v6() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 441 "IP.xs"
	RETVAL = GeoIP_record_by_ipnum_v6(gi,*(geoipv6_t*)ipnum);
#line 1294 "IP.c"
	{
	    SV * RETVALSV;
	    RETVALSV = sv_newmortal();
	    sv_setref_pv( RETVALSV, (char *)CLASS, (void*)RETVAL );
	    ST(0) = RETVALSV;
	}
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_record_by_addr_v6); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_record_by_addr_v6)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, addr");
    {
	GeoIP *	gi;
	char *        addr = (char *)SvPVbyte_nolen (ST(1))
;
#line 450 "IP.xs"
	char * CLASS = "Geo::IP::Record";
#line 1318 "IP.c"
	GeoIPRecord *	RETVAL;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::record_by_addr_v6() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 452 "IP.xs"
	RETVAL = GeoIP_record_by_addr_v6(gi,addr);
#line 1330 "IP.c"
	{
	    SV * RETVALSV;
	    RETVALSV = sv_newmortal();
	    sv_setref_pv( RETVALSV, (char *)CLASS, (void*)RETVAL );
	    ST(0) = RETVALSV;
	}
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_record_by_name_v6); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_record_by_name_v6)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, addr");
    {
	GeoIP *	gi;
	char *        addr = (char *)SvPVbyte_nolen (ST(1))
;
#line 461 "IP.xs"
	char * CLASS = "Geo::IP::Record";
#line 1354 "IP.c"
	GeoIPRecord *	RETVAL;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::record_by_name_v6() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 463 "IP.xs"
	RETVAL = GeoIP_record_by_name_v6(gi,addr);
#line 1366 "IP.c"
	{
	    SV * RETVALSV;
	    RETVALSV = sv_newmortal();
	    sv_setref_pv( RETVALSV, (char *)CLASS, (void*)RETVAL );
	    ST(0) = RETVALSV;
	}
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_record_by_addr); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_record_by_addr)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, addr");
    {
	GeoIP *	gi;
	char *        addr = (char *)SvPVbyte_nolen (ST(1))
;
#line 472 "IP.xs"
	char * CLASS = "Geo::IP::Record";
#line 1390 "IP.c"
	GeoIPRecord *	RETVAL;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::record_by_addr() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 474 "IP.xs"
	RETVAL = GeoIP_record_by_addr(gi,addr);
#line 1402 "IP.c"
	{
	    SV * RETVALSV;
	    RETVALSV = sv_newmortal();
	    sv_setref_pv( RETVALSV, (char *)CLASS, (void*)RETVAL );
	    ST(0) = RETVALSV;
	}
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_record_by_name); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_record_by_name)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, addr");
    {
	GeoIP *	gi;
	char *        addr = (char *)SvPVbyte_nolen (ST(1))
;
#line 483 "IP.xs"
	char * CLASS = "Geo::IP::Record";
#line 1426 "IP.c"
	GeoIPRecord *	RETVAL;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::record_by_name() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 485 "IP.xs"
	RETVAL = GeoIP_record_by_name(gi,addr);
#line 1438 "IP.c"
	{
	    SV * RETVALSV;
	    RETVALSV = sv_newmortal();
	    sv_setref_pv( RETVALSV, (char *)CLASS, (void*)RETVAL );
	    ST(0) = RETVALSV;
	}
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_enable_teredo); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_enable_teredo)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, tf");
    {
	GeoIP *	gi;
	int	tf = (int)SvIV(ST(1))
;
	int	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::enable_teredo() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 494 "IP.xs"
	RETVAL = GeoIP_enable_teredo(gi, tf);
#line 1472 "IP.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_teredo); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_teredo)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gi");
    {
	GeoIP *	gi;
	int	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::teredo() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 502 "IP.xs"
	RETVAL = GeoIP_teredo(gi);
#line 1499 "IP.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_set_charset); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_set_charset)
{
    dVAR; dXSARGS;
    if (items != 2)
       croak_xs_usage(cv,  "gi, charset");
    {
	GeoIP *	gi;
	int	charset = (int)SvIV(ST(1))
;
	int	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::set_charset() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 511 "IP.xs"
	RETVAL = GeoIP_set_charset(gi, charset);
#line 1528 "IP.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_lib_version); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_lib_version)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "CLASS");
    {
	char *        CLASS = (char *)SvPVbyte_nolen (ST(0))
;
	const char *	RETVAL;
	dXSTARG;
#line 519 "IP.xs"
	RETVAL = GeoIP_lib_version();
#line 1548 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_charset); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_charset)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gi");
    {
	GeoIP *	gi;
	int	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::charset() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 527 "IP.xs"
	RETVAL = GeoIP_charset(gi);
#line 1575 "IP.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_last_netmask); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_last_netmask)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gi");
    {
	GeoIP *	gi;
	int	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::last_netmask() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 535 "IP.xs"
	RETVAL = GeoIP_last_netmask(gi);
#line 1602 "IP.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP_DESTROY); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP_DESTROY)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gi");
    {
	GeoIP *	gi;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gi = (GeoIP *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::DESTROY() -- gi is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 543 "IP.xs"
	GeoIP_delete(gi);
#line 1627 "IP.c"
    }
    XSRETURN_EMPTY;
}


XS_EUPXS(XS_Geo__IP__Record_country_code); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP__Record_country_code)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gir");
    {
	GeoIPRecord *	gir;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gir = (GeoIPRecord *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::Record::country_code() -- gir is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 551 "IP.xs"
	RETVAL = (const char *)gir->country_code;
#line 1653 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP__Record_country_code3); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP__Record_country_code3)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gir");
    {
	GeoIPRecord *	gir;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gir = (GeoIPRecord *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::Record::country_code3() -- gir is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 559 "IP.xs"
	RETVAL = (const char *)gir->country_code3;
#line 1680 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP__Record_country_name); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP__Record_country_name)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gir");
    {
	GeoIPRecord *	gir;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gir = (GeoIPRecord *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::Record::country_name() -- gir is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 567 "IP.xs"
	RETVAL = (const char *)gir->country_name;
#line 1707 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP__Record_region); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP__Record_region)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gir");
    {
	GeoIPRecord *	gir;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gir = (GeoIPRecord *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::Record::region() -- gir is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 575 "IP.xs"
	RETVAL = (const char *)gir->region;
#line 1734 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP__Record_region_name); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP__Record_region_name)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gir");
    {
	GeoIPRecord *	gir;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gir = (GeoIPRecord *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::Record::region_name() -- gir is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 583 "IP.xs"
	RETVAL = (const char *) GeoIP_region_name_by_code(gir->country_code, gir->region);
#line 1761 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP__Record_time_zone); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP__Record_time_zone)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gir");
    {
	GeoIPRecord *	gir;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gir = (GeoIPRecord *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::Record::time_zone() -- gir is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 591 "IP.xs"
	RETVAL = (const char *) GeoIP_time_zone_by_country_and_region(gir->country_code, gir->region);
#line 1788 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP__Record_city); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP__Record_city)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gir");
    PERL_UNUSED_VAR(ax); /* -Wall */
    SP -= items;
    {
	GeoIPRecord *	gir;
#line 599 "IP.xs"
        SV * n;
#line 1807 "IP.c"

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gir = (GeoIPRecord *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::Record::city() -- gir is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 601 "IP.xs"
        n = newSVpv( gir->city ? gir->city : "", 0);
#if defined(sv_utf8_decode)
        if ( gir->charset == GEOIP_CHARSET_UTF8 )
          SvUTF8_on(n);
#endif
        sv_2mortal(n);
        ST(0) = n;
        XSRETURN(1);
#line 1825 "IP.c"
	PUTBACK;
	return;
    }
}


XS_EUPXS(XS_Geo__IP__Record_postal_code); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP__Record_postal_code)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gir");
    {
	GeoIPRecord *	gir;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gir = (GeoIPRecord *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::Record::postal_code() -- gir is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 614 "IP.xs"
	RETVAL = (const char *)gir->postal_code;
#line 1852 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP__Record__latitude); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP__Record__latitude)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gir");
    {
	GeoIPRecord *	gir;
	float	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gir = (GeoIPRecord *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::Record::_latitude() -- gir is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 622 "IP.xs"
	RETVAL = gir->latitude;
#line 1879 "IP.c"
	XSprePUSH; PUSHn((double)RETVAL);
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP__Record__longitude); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP__Record__longitude)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gir");
    {
	GeoIPRecord *	gir;
	float	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gir = (GeoIPRecord *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::Record::_longitude() -- gir is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 630 "IP.xs"
	RETVAL = gir->longitude;
#line 1906 "IP.c"
	XSprePUSH; PUSHn((double)RETVAL);
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP__Record_dma_code); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP__Record_dma_code)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gir");
    {
	GeoIPRecord *	gir;
	int	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gir = (GeoIPRecord *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::Record::dma_code() -- gir is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 638 "IP.xs"
	RETVAL = gir->dma_code;

#line 1934 "IP.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP__Record_metro_code); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP__Record_metro_code)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gir");
    {
	GeoIPRecord *	gir;
	int	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gir = (GeoIPRecord *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::Record::metro_code() -- gir is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 647 "IP.xs"
       RETVAL = gir->dma_code; /* we can NOT use metro_code here. metro_code may be not present in older CAPI's */
#line 1961 "IP.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP__Record_area_code); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP__Record_area_code)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gir");
    {
	GeoIPRecord *	gir;
	int	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gir = (GeoIPRecord *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::Record::area_code() -- gir is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 655 "IP.xs"
	RETVAL = gir->area_code;
#line 1988 "IP.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP__Record_continent_code); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP__Record_continent_code)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gir");
    {
	GeoIPRecord *	gir;
	const char *	RETVAL;
	dXSTARG;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gir = (GeoIPRecord *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::Record::continent_code() -- gir is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 663 "IP.xs"
	RETVAL = (const char *)gir->continent_code;
#line 2015 "IP.c"
	sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
    }
    XSRETURN(1);
}


XS_EUPXS(XS_Geo__IP__Record_DESTROY); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP__Record_DESTROY)
{
    dVAR; dXSARGS;
    if (items != 1)
       croak_xs_usage(cv,  "gir");
    {
	GeoIPRecord *	gir;

    if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) == SVt_PVMG) )
            gir = (GeoIPRecord *)SvIV((SV*)SvRV( ST(0) ));
    else{
            warn( "Geo::IP::Record::DESTROY() -- gir is not a blessed SV reference" );
            XSRETURN_UNDEF;
    }
;
#line 671 "IP.xs"
	GeoIPRecord_delete(gir);
#line 2040 "IP.c"
    }
    XSRETURN_EMPTY;
}


XS_EUPXS(XS_Geo__IP__Record__XScompiled); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Geo__IP__Record__XScompiled)
{
    dVAR; dXSARGS;
    if (items != 0)
       croak_xs_usage(cv,  "");
    {
#line 676 "IP.xs"
	XSRETURN_YES;
#line 2055 "IP.c"
    }
    XSRETURN_EMPTY;
}

#ifdef __cplusplus
extern "C"
#endif
XS_EXTERNAL(boot_Geo__IP); /* prototype to pass -Wmissing-prototypes */
XS_EXTERNAL(boot_Geo__IP)
{
#if PERL_VERSION_LE(5, 21, 5)
    dVAR; dXSARGS;
#else
    dVAR; dXSBOOTARGSXSAPIVERCHK;
#endif
#if (PERL_REVISION == 5 && PERL_VERSION < 9)
    char* file = __FILE__;
#else
    const char* file = __FILE__;
#endif

    PERL_UNUSED_VAR(file);

    PERL_UNUSED_VAR(cv); /* -W */
    PERL_UNUSED_VAR(items); /* -W */
#if PERL_VERSION_LE(5, 21, 5)
    XS_VERSION_BOOTCHECK;
#  ifdef XS_APIVERSION_BOOTCHECK
    XS_APIVERSION_BOOTCHECK;
#  endif
#endif

        newXS_deffile("Geo::IP::region_name_by_code", XS_Geo__IP_region_name_by_code);
        newXS_deffile("Geo::IP::continent_code_by_country_code", XS_Geo__IP_continent_code_by_country_code);
        newXS_deffile("Geo::IP::time_zone", XS_Geo__IP_time_zone);
        newXS_deffile("Geo::IP::new", XS_Geo__IP_new);
        newXS_deffile("Geo::IP::open_type", XS_Geo__IP_open_type);
        newXS_deffile("Geo::IP::open", XS_Geo__IP_open);
        newXS_deffile("Geo::IP::id_by_addr", XS_Geo__IP_id_by_addr);
        newXS_deffile("Geo::IP::id_by_name", XS_Geo__IP_id_by_name);
        newXS_deffile("Geo::IP::database_edition", XS_Geo__IP_database_edition);
        newXS_deffile("Geo::IP::database_info", XS_Geo__IP_database_info);
        newXS_deffile("Geo::IP::country_code_by_ipnum_v6", XS_Geo__IP_country_code_by_ipnum_v6);
        newXS_deffile("Geo::IP::country_code_by_addr_v6", XS_Geo__IP_country_code_by_addr_v6);
        newXS_deffile("Geo::IP::country_code_by_name_v6", XS_Geo__IP_country_code_by_name_v6);
        newXS_deffile("Geo::IP::country_code3_by_ipnum_v6", XS_Geo__IP_country_code3_by_ipnum_v6);
        newXS_deffile("Geo::IP::country_code3_by_addr_v6", XS_Geo__IP_country_code3_by_addr_v6);
        newXS_deffile("Geo::IP::country_code3_by_name_v6", XS_Geo__IP_country_code3_by_name_v6);
        newXS_deffile("Geo::IP::country_name_by_name_v6", XS_Geo__IP_country_name_by_name_v6);
        newXS_deffile("Geo::IP::country_name_by_ipnum_v6", XS_Geo__IP_country_name_by_ipnum_v6);
        newXS_deffile("Geo::IP::country_name_by_addr_v6", XS_Geo__IP_country_name_by_addr_v6);
        newXS_deffile("Geo::IP::country_code_by_addr", XS_Geo__IP_country_code_by_addr);
        newXS_deffile("Geo::IP::country_code_by_name", XS_Geo__IP_country_code_by_name);
        newXS_deffile("Geo::IP::country_code3_by_addr", XS_Geo__IP_country_code3_by_addr);
        newXS_deffile("Geo::IP::country_code3_by_name", XS_Geo__IP_country_code3_by_name);
        newXS_deffile("Geo::IP::country_name_by_addr", XS_Geo__IP_country_name_by_addr);
        newXS_deffile("Geo::IP::country_name_by_name", XS_Geo__IP_country_name_by_name);
        newXS_deffile("Geo::IP::name_by_ipnum_v6", XS_Geo__IP_name_by_ipnum_v6);
        newXS_deffile("Geo::IP::name_by_addr_v6", XS_Geo__IP_name_by_addr_v6);
        newXS_deffile("Geo::IP::name_by_name_v6", XS_Geo__IP_name_by_name_v6);
        newXS_deffile("Geo::IP::org_by_addr", XS_Geo__IP_org_by_addr);
        newXS_deffile("Geo::IP::org_by_name", XS_Geo__IP_org_by_name);
        newXS_deffile("Geo::IP::range_by_ip", XS_Geo__IP_range_by_ip);
        newXS_deffile("Geo::IP::region_by_addr", XS_Geo__IP_region_by_addr);
        newXS_deffile("Geo::IP::region_by_name", XS_Geo__IP_region_by_name);
        newXS_deffile("Geo::IP::record_by_ipnum_v6", XS_Geo__IP_record_by_ipnum_v6);
        newXS_deffile("Geo::IP::record_by_addr_v6", XS_Geo__IP_record_by_addr_v6);
        newXS_deffile("Geo::IP::record_by_name_v6", XS_Geo__IP_record_by_name_v6);
        newXS_deffile("Geo::IP::record_by_addr", XS_Geo__IP_record_by_addr);
        newXS_deffile("Geo::IP::record_by_name", XS_Geo__IP_record_by_name);
        newXS_deffile("Geo::IP::enable_teredo", XS_Geo__IP_enable_teredo);
        newXS_deffile("Geo::IP::teredo", XS_Geo__IP_teredo);
        newXS_deffile("Geo::IP::set_charset", XS_Geo__IP_set_charset);
        newXS_deffile("Geo::IP::lib_version", XS_Geo__IP_lib_version);
        newXS_deffile("Geo::IP::charset", XS_Geo__IP_charset);
        newXS_deffile("Geo::IP::last_netmask", XS_Geo__IP_last_netmask);
        newXS_deffile("Geo::IP::DESTROY", XS_Geo__IP_DESTROY);
        newXS_deffile("Geo::IP::Record::country_code", XS_Geo__IP__Record_country_code);
        newXS_deffile("Geo::IP::Record::country_code3", XS_Geo__IP__Record_country_code3);
        newXS_deffile("Geo::IP::Record::country_name", XS_Geo__IP__Record_country_name);
        newXS_deffile("Geo::IP::Record::region", XS_Geo__IP__Record_region);
        newXS_deffile("Geo::IP::Record::region_name", XS_Geo__IP__Record_region_name);
        newXS_deffile("Geo::IP::Record::time_zone", XS_Geo__IP__Record_time_zone);
        newXS_deffile("Geo::IP::Record::city", XS_Geo__IP__Record_city);
        newXS_deffile("Geo::IP::Record::postal_code", XS_Geo__IP__Record_postal_code);
        newXS_deffile("Geo::IP::Record::_latitude", XS_Geo__IP__Record__latitude);
        newXS_deffile("Geo::IP::Record::_longitude", XS_Geo__IP__Record__longitude);
        newXS_deffile("Geo::IP::Record::dma_code", XS_Geo__IP__Record_dma_code);
        newXS_deffile("Geo::IP::Record::metro_code", XS_Geo__IP__Record_metro_code);
        newXS_deffile("Geo::IP::Record::area_code", XS_Geo__IP__Record_area_code);
        newXS_deffile("Geo::IP::Record::continent_code", XS_Geo__IP__Record_continent_code);
        newXS_deffile("Geo::IP::Record::DESTROY", XS_Geo__IP__Record_DESTROY);
        newXS_deffile("Geo::IP::Record::_XScompiled", XS_Geo__IP__Record__XScompiled);
#if PERL_VERSION_LE(5, 21, 5)
#  if PERL_VERSION_GE(5, 9, 0)
    if (PL_unitcheckav)
        call_list(PL_scopestack_ix, PL_unitcheckav);
#  endif
    XSRETURN_YES;
#else
    Perl_xs_boot_epilog(aTHX_ ax);
#endif
}


Youez - 2016 - github.com/yon3zu
LinuXploit