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 }