On Mon, Sep 01, 2008 at 01:48:25PM +0100, Martin Evans wrote:
>
> Ok, as you say the change is trivial for a unicode username and password:
>
> #ifdef dbd_db_login6_sv
>     ST(0) = dbd_db_login6(dbh, imp_dbh, dbname, username, password, 
> attribs) ? &sv_yes : &sv_no;
> #elif defined(dbd_db_login6)
>     ST(0) = dbd_db_login6(dbh, imp_dbh, dbname, u, p, attribs) ? &sv_yes : 
> &sv_no;
> #else
>     ST(0) = dbd_db_login( dbh, imp_dbh, dbname, u, p) ? &sv_yes : &sv_no;
> #endif
>
> and an additional line in dbd_xsh.h I presume but not "dbname" which is the 
> one I'd really like as it is currently char *. How do I get dbname to be an 
> SV - as you may have guessed by now I'm not an XS expert. Is it just a case 
> of changing my DBD::ODBC::db::_login to say it is an SV*?

Something like the appended change should do it (untested).

Tim.

===================================================================
--- Driver.xst  (revision 11611)
+++ Driver.xst  (working copy)
@@ -84,7 +84,7 @@
 void
 _login(dbh, dbname, username, password, attribs=Nullsv)
     SV *        dbh
-    char *      dbname
+    SV *        dbname
     SV *        username
     SV *        password
     SV *        attribs
@@ -95,9 +95,9 @@
     char *u = (SvOK(username)) ? SvPV(username,lna) : "";
     char *p = (SvOK(password)) ? SvPV(password,lna) : "";
 #ifdef dbd_db_login6
-    ST(0) = dbd_db_login6(dbh, imp_dbh, dbname, u, p, attribs) ?  &sv_yes : 
&sv_no;
+    ST(0) = dbd_db_login6(dbh, imp_dbh, SvPV_nolen(dbname), u, p, attribs) ? 
&sv_yes : &sv_no;
 #else
-    ST(0) = dbd_db_login( dbh, imp_dbh, dbname, u, p) ? &sv_yes : &sv_no;
+    ST(0) = dbd_db_login( dbh, imp_dbh, SvPV_nolen(dbname), u, p) ?  &sv_yes : 
&sv_no;
 #endif
     }
 

Reply via email to