On Thu, Jan 26, 2006 at 02:34:09AM -0800, Gisle Aas wrote:
> Tim Bunce <[EMAIL PROTECTED]> writes:
> 
> > (Any need adding to Driver.xst?)
> 
> No.  It only contains XS functions and these always get my_perl passed
> (which is wasted unless PERL_NO_GET_CONTEXT is used), but if we also
> patch up Driver_xst.h then drivers are free to add PERL_NO_GET_CONTEXT
> if/when they care.
> 
> I tried it with DBD-mysql-3.0002 and it compiled&tested fine when all
> I did was adding "#define PERL_NO_GET_CONTEXT\n" at the start of its
> mysql.xs file.  Seems almost too easy :)

It does. But it does also seem reasonable for dTHX to be added where
needed so the code is "PERL_NO_GET_CONTEXT ready". Great.

Applied. Thanks!

Tim.

> --Gisle
> 
> 
> Index: Driver_xst.h
> --- Driver_xst.h.~1~  Thu Jan 26 11:11:17 2006
> +++ Driver_xst.h      Thu Jan 26 11:11:17 2006
> @@ -9,6 +9,7 @@
>  static SV *
>  dbixst_bounce_method(char *methname, int params)
>  {
> +    dTHX;
>      /* XXX this 'magic' undoes the dMARK embedded in the dXSARGS of our 
> caller       */
>      /* so that the dXSARGS below can set things up as they were for our 
> caller       */
>      void *xxx = PL_markstack_ptr++;
> @@ -46,6 +47,7 @@
>      /* Handle binding supplied values to placeholders.               */
>      /* items = one greater than the number of params         */
>      /* ax = ax from calling sub, maybe adjusted to match items       */
> +    dTHX;
>      int i;
>      SV *idx;
>      if (items-1 != DBIc_NUM_PARAMS(imp_sth)
> @@ -75,6 +77,7 @@
>  static SV *
>  dbdxst_fetchall_arrayref(SV *sth, SV *slice, SV *batch_row_count)
>  {
> +    dTHX;
>      D_imp_sth(sth);
>      SV *rows_rvav;
>      if (SvOK(slice)) {  /* should never get here */
> Index: Perl.xs
> --- Perl.xs.~1~       Thu Jan 26 11:11:17 2006
> +++ Perl.xs   Thu Jan 26 11:11:17 2006
> @@ -2,6 +2,7 @@
>     that the Driver.xst mechansim doesn't have compile-time errors in it.
>  */
>  
> +#define PERL_NO_GET_CONTEXT
>  #include "DBIXS.h"
>  #include "dbd_xsh.h"
>  
> @@ -38,6 +39,7 @@
>  int  /* just to test syntax of macros etc */
>  dbd_st_rows(SV *h, imp_sth_t *imp_sth)
>  {
> +    dTHX;
>      DBIh_SET_ERR_CHAR(h, imp_sth, 0, 1, "err msg", "12345", Nullch);
>      return -1;
>  }
> End of Patch.

Reply via email to