ID: 6032
Updated by: jimw
Reported By: [EMAIL PROTECTED]
Status: Open
Bug Type: Sybase-ct (ctlib) related
Assigned To: 
Comments:

refiled against 4.0.

Previous Comments:
---------------------------------------------------------------------------

[2000-08-08 21:45:54] [EMAIL PROTECTED]
I had a problem with sybase-dblib a couple of days ago, and fixed it sending an extra 
parameter (character set) in the connection information. It turned out I _actually_ 
needed it with ct-lib, not dblib. Following patch does the same for dblib. (See 
description in bug #5996).

-+-+-cut from next line. file php3_sybase-ct_charsets.patch-+-+-
--- functions/sybase-ct.c.orig  Mon Feb  7 18:54:51 2000
+++ functions/sybase-ct.c       Tue Aug  8 20:15:03 2000
@@ -349,8 +349,10 @@
 }


-static int _php3_sybct_really_connect(sybct_link *sybct, char *host, char *user, char 
*passwd)
+static int _php3_sybct_really_connect(sybct_link *sybct, char *host, char *user, char 
+*passwd, char *charset)
 {
+       CS_LOCALE *tmp_locale;
+
        /* set a CS_CONNECTION record */
        if (ct_con_alloc(context, &sybct->connection)!=CS_SUCCEED) {
                php3_error(E_WARNING,"Sybase:  Unable to allocate connection record");
@@ -371,7 +373,25 @@
                ct_con_props(sybct->connection, CS_SET, CS_PASSWORD, passwd, 
CS_NULLTERM, NULL);
        }
        ct_con_props(sybct->connection, CS_SET, CS_APPNAME, php3_sybct_module.appname, 
CS_NULLTERM, NULL);
-
+
+       if (charset) {
+               if (cs_loc_alloc(context, &tmp_locale)!=CS_SUCCEED) {
+                       php3_error(E_WARNING,"Sybase: Unable to allocate locale 
+information.");
+               } else {
+                       if (cs_locale(context, CS_SET, tmp_locale, CS_LC_ALL, NULL, 
+CS_NULLTERM, NULL)!=CS_SUCCEED) {
+                               php3_error(E_WARNING,"Sybase:  Unable to load default 
+locale data.");
+                       } else {
+                               if (cs_locale(context, CS_SET, tmp_locale, 
+CS_SYB_CHARSET, charset, CS_NULLTERM, NULL)!=CS_SUCCEED) {
+                                       php3_error(E_WARNING,"Sybase:  Unable to 
+update character set.");
+                               } else {
+                                       if (ct_con_props(sybct->connection, CS_SET, 
+CS_LOC_PROP, tmp_locale, CS_UNUSED, NULL)!=CS_SUCCEED) {
+                                               php3_error(E_WARNING,"Sybase: Unable 
+to update connection properties.");
+                                       }
+                               }
+                       }
+               }
+       }
+
        if (php3_sybct_module.hostname) {
                ct_con_props(sybct->connection, CS_SET, CS_HOSTNAME, 
php3_sybct_module.hostname, CS_NULLTERM, NULL);
        }
@@ -399,7 +419,7 @@

 static void php3_sybct_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent)
 {
-       char *user,*passwd,*host;
+       char *user,*passwd,*host,*charset;
        char *hashed_details;
        int hashed_details_length;
        sybct_link *sybct_ptr;
@@ -409,7 +429,7 @@

        switch(ARG_COUNT(ht)) {
                case 0: /* defaults */
-                       host=user=passwd=NULL;
+                       host=user=passwd=charset=NULL;
                        hashed_details_length=5+3;
                        hashed_details = (char *) emalloc(hashed_details_length+1);
                        strcpy(hashed_details,"sybct___");
@@ -422,7 +442,7 @@
                                }
                                convert_to_string(yyhost);
                                host = yyhost->value.str.val;
-                               user=passwd=NULL;
+                               user=passwd=charset=NULL;
                                hashed_details_length = yyhost->value.str.len+5+3;
                                hashed_details = (char *) 
emalloc(hashed_details_length+1);
                                
sprintf(hashed_details,"sybct_%s__",yyhost->value.str.val);
@@ -438,7 +458,7 @@
                                convert_to_string(yyuser);
                                host = yyhost->value.str.val;
                                user = yyuser->value.str.val;
-                               passwd=NULL;
+                               passwd=charset=NULL;
                                hashed_details_length = 
yyhost->value.str.len+yyuser->value.str.len+5+3;
                                hashed_details = (char *) 
emalloc(hashed_details_length+1);
                                
sprintf(hashed_details,"sybct_%s_%s_",yyhost->value.str.val,yyuser->value.str.val); 
@@ -456,11 +476,31 @@
                                host = yyhost->value.str.val;
                                user = yyuser->value.str.val;
                                passwd = yypasswd->value.str.val;
+                               charset = NULL;
                                hashed_details_length = 
yyhost->value.str.len+yyuser->value.str.len+yypasswd->value.str.len+5+3;
                                hashed_details = (char *) 
emalloc(hashed_details_length+1);
                                
sprintf(hashed_details,"sybct_%s_%s_%s",yyhost->value.str.val,yyuser->value.str.val,yypasswd->value.str.val);
 /* SAFE */
                        }
                        break;
+               case 4: {
+                               pval *yyhost,*yyuser,*yypasswd,*yycharset;
+
+                               if (getParameters(ht, 4, &yyhost, &yyuser, &yypasswd, 
+&yycharset) == FAILURE) {
+                                       RETURN_FALSE;
+                               }
+                               convert_to_string(yyhost);
+                               convert_to_string(yyuser);
+                               convert_to_string(yypasswd);
+                               convert_to_string(yycharset);
+                               host = yyhost->value.str.val;
+                               user = yyuser->value.str.val;
+                               passwd = yypasswd->value.str.val;
+                               charset = yycharset->value.str.val;
+                               hashed_details_length = 
+yyhost->value.str.len+yyuser->value.str.len+yypasswd->value.str.len+yycharset->value.str.len+5+3;
+
+                               hashed_details = (char *) 
+emalloc(hashed_details_length+1);
+                               
+sprintf(hashed_details,"sybct_%s_%s_%s",yyhost->value.str.val,yyuser->value.str.val,yypasswd->value.str.val,yycharset->value.str.val);
+ /* SAFE */
+                       }
+                       break;
                default:
                        WRONG_PARAM_COUNT;
                        break;
@@ -489,7 +529,7 @@
                        }

                        sybct_ptr = (sybct_link *) malloc(sizeof(sybct_link));
-                       if (!_php3_sybct_really_connect(sybct_ptr, host, user, 
passwd)) {
+                       if (!_php3_sybct_really_connect(sybct_ptr, host, user, passwd, 
+charset)) {
                                free(sybct_ptr);
                                efree(hashed_details);
                                RETURN_FALSE;
@@ -543,7 +583,7 @@
                                 * NULL before trying to use it elsewhere . . .)
                                 */
                                memcpy(&sybct,sybct_ptr,sizeof(sybct_link));
-                               if (!_php3_sybct_really_connect(sybct_ptr, host, user, 
passwd)) {
+                               if (!_php3_sybct_really_connect(sybct_ptr, host, user, 
+passwd, charset)) {
                                        memcpy(sybct_ptr,&sybct,sizeof(sybct_link));
                                        efree(hashed_details);
                                        RETURN_FALSE;
@@ -587,7 +627,7 @@
                }

                sybct_ptr = (sybct_link *) emalloc(sizeof(sybct_link));
-               if (!_php3_sybct_really_connect(sybct_ptr, host, user, passwd)) {
+               if (!_php3_sybct_really_connect(sybct_ptr, host, user, passwd, 
+charset)) {
                        efree(sybct_ptr);
                        efree(hashed_details);
                        RETURN_FALSE;
--- functions/php3_sybase-ct.h.orig     Mon Feb  7 18:54:51 2000
+++ functions/php3_sybase-ct.h  Tue Aug  8 20:26:09 2000
@@ -72,6 +72,7 @@


 #include <ctpublic.h>
+#include <cstypes.h>

 typedef struct {
        long default_link;
-+-+-cut to previous line. file php3_sybase-ct_charsets.patch-+-+-
patch with:
patch -p0 < php3_sybase-ct_charsets.patch
from the php directory (/wherever/php-3.0.16)


---------------------------------------------------------------------------



ATTENTION! Do NOT reply to this email!
To reply, use the web interface found at http://bugs.php.net/?id=6032&edit=2


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to