ID: 11320
Updated by: joey
Reported By: [EMAIL PROTECTED]
Old-Status: Assigned
Status: Closed
Bug Type: Sybase-ct (ctlib) related
Operating system: 
PHP Version: 4.0.5
Assigned To: 
Comments:

Closed in CVS.

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

[2001-06-26 08:53:20] [EMAIL PROTECTED]
You're still missing a few things, but thanks for the patch!
I have something that is ready, I just want to test it a bit more before applying it, 
but I think you can expect to see it by 4.0.7. 

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

[2001-06-06 22:30:24] [EMAIL PROTECTED]
Hi, 
previous patch had small bug, a memory leak, this should be ok.

Martin.

-------------------------------------------
Martin Nedbal COOPERnet
mailto: [EMAIL PROTECTED]

--- php-4.0.5_official_release/ext/sybase_ct/php_sybase_ct.c      Sun Mar
11 05:13:53 2001
+++ php-4.0.5/ext/sybase_ct/php_sybase_ct.c   Wed Jun  6 20:27:07 2001
@@ -374,8 +374,10 @@
 }


-static int php_sybase_do_connect_internal(sybase_link *sybase, char *host,
char *user, char *passwd)
+static int php_sybase_do_connect_internal(sybase_link *sybase, char *host,
char *user, char *passwd, char *charset)
 {
+CS_LOCALE *tmp_locale;
+
     SybCtLS_FETCH();

     /* set a CS_CONNECTION record */
@@ -397,6 +399,26 @@
     if (passwd) {
          ct_con_props(sybase->connection, CS_SET, CS_PASSWORD, passwd,
CS_NULLTERM, NULL);
     }
+    if (charset) {
+         if (cs_loc_alloc(SybCtG(context), &tmp_locale)!=CS_SUCCEED) {
+              php_error(E_WARNING,"Sybase: Unable to allocate locale
information.");
+         }
+         else {
+              if (cs_locale(SybCtG(context), CS_SET, tmp_locale,
CS_LC_ALL, NULL, CS_NULLTERM, NULL)!=CS_SUCCEED) {
+                   php_error(E_WARNING,"Sybase: Unable to load default
locale data.");
+              } else {
+              if (cs_locale(SybCtG(context), CS_SET, tmp_locale,
CS_SYB_CHARSET, charset, CS_NULLTERM, NULL)!=CS_SUCCEED) {
+                   php_error(E_WARNING,"Sybase: Unable to update character
set.");
+              } else {
+                   if (ct_con_props(sybase->connection, CS_SET,
CS_LOC_PROP, tmp_locale, CS_UNUSED, NULL)!=CS_SUCCEED) {
+                   php_error(E_WARNING,"Sybase: Unable to update
connection properties.");
+              }
+              cs_loc_drop (SybCtG(context),tmp_locale);
+         }
+         }
+         }
+    }
+
     ct_con_props(sybase->connection, CS_SET, CS_APPNAME, SybCtG(appname),
CS_NULLTERM, NULL);

     if (SybCtG(hostname)) {
@@ -426,7 +448,7 @@

 static void php_sybase_do_connect(INTERNAL_FUNCTION_PARAMETERS, int
persistent)
 {
-    char *user,*passwd,*host;
+    char *user,*passwd,*host,*charset;
     char *hashed_details;
     int hashed_details_length;
     sybase_link *sybase_ptr;
@@ -434,7 +456,7 @@

     switch(ZEND_NUM_ARGS()) {
          case 0: /* defaults */
-              host=user=passwd=NULL;
+              host=user=passwd=charset=NULL;
               hashed_details_length=6+3;
               hashed_details = (char *) emalloc(hashed_details_length+1);
               strcpy(hashed_details, "sybase___");
@@ -486,6 +508,27 @@
                    sprintf(hashed_details, "sybase_%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+6+3;

+                   hashed_details = (char *)
emalloc(hashed_details_length+1);
+
sprintf(hashed_details,"sybase_%s_%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;
@@ -514,7 +557,7 @@
               }

               sybase_ptr = (sybase_link *) malloc(sizeof(sybase_link));
-              if (!php_sybase_do_connect_internal(sybase_ptr, host, user,
passwd)) {
+              if (!php_sybase_do_connect_internal(sybase_ptr, host, user,
passwd, charset)) {
                    free(sybase_ptr);
                    efree(hashed_details);
                    RETURN_FALSE;
@@ -568,7 +611,7 @@
                     * NULL before trying to use it elsewhere . . .)
                     */
                    memcpy(&sybase, sybase_ptr, sizeof(sybase_link));
-                   if (!php_sybase_do_connect_internal(sybase_ptr, host,
user, passwd)) {
+                   if (!php_sybase_do_connect_internal(sybase_ptr, host,
user, passwd, charset)) {
                         memcpy(sybase_ptr, &sybase, sizeof(sybase_link));
                         efree(hashed_details);
                         RETURN_FALSE;
@@ -611,7 +654,7 @@
          }

          sybase_ptr = (sybase_link *) emalloc(sizeof(sybase_link));
-         if (!php_sybase_do_connect_internal(sybase_ptr, host, user,
passwd)) {
+         if (!php_sybase_do_connect_internal(sybase_ptr, host, user,
passwd, charset)) {
               efree(sybase_ptr);
               efree(hashed_details);
               RETURN_FALSE;



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

[2001-06-06 16:07:54] [EMAIL PROTECTED]
function sybase_connect doesn't accept fourth parameter, charset. Following patch 
solves the problem.

Martin Nedbal

--- php-4.0.5/ext/sybase_ct/php_sybase_ct.c     Sun Mar 11 05:13:53 2001
+++ php-4.0.5_sybase_ct_charset_path/ext/sybase_ct/php_sybase_ct.c      Wed Jun  6 
+15:29:42 2001
@@ -375,6 +375,8 @@
 
 
-static int php_sybase_do_connect_internal(sybase_link *sybase, char *host, char 
*user, char *passwd)
+static int php_sybase_do_connect_internal(sybase_link *sybase, char *host, char 
+*user, char *passwd, char *charset)
 {
+CS_LOCALE *tmp_locale;
+
        SybCtLS_FETCH();
 
@@ -398,4 +400,26 @@
                ct_con_props(sybase->connection, CS_SET, CS_PASSWORD, passwd, 
CS_NULLTERM, NULL);
        }
+       if (charset) {
+       // charset
+               if (cs_loc_alloc(SybCtG(context), &tmp_locale)!=CS_SUCCEED) { 
+                       php_error(E_WARNING,"Sybase: Unable to allocate locale 
+information."); 
+               } 
+               else { 
+                       if (cs_locale(SybCtG(context), CS_SET, tmp_locale, CS_LC_ALL, 
+NULL, CS_NULLTERM, NULL)!=CS_SUCCEED) {
+                               php_error(E_WARNING,"Sybase: Unable to load default 
+locale data."); 
+                       } else { 
+                       if (cs_locale(SybCtG(context), CS_SET, tmp_locale, 
+CS_SYB_CHARSET, charset, CS_NULLTERM, NULL)!=CS_SUCCEED) {
+                               php_error(E_WARNING,"Sybase: Unable to update 
+character set."); 
+                       } else { 
+                               if (ct_con_props(sybase->connection, CS_SET, 
+CS_LOC_PROP, tmp_locale, CS_UNUSED, NULL)!=CS_SUCCEED) {
+                               php_error(E_WARNING,"Sybase: Unable to update 
+connection properties."); 
+                       }
+               }
+               }       
+               }
+//             ct_con_props(sybase->connection, CS_SET, CS_CHARSETCNV, CS_TRUE, 
+CS_NULLTERM, NULL);
+//             ct_con_props(sybase->connection, CS_SET, CS_CHARSETCNV, charset, 
+CS_NULLTERM, NULL);
+       }
+
        ct_con_props(sybase->connection, CS_SET, CS_APPNAME, SybCtG(appname), 
CS_NULLTERM, NULL);
 
@@ -427,5 +451,5 @@
 static void php_sybase_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
 {
-       char *user,*passwd,*host;
+       char *user,*passwd,*host,*charset;
        char *hashed_details;
        int hashed_details_length;
@@ -435,5 +459,5 @@
        switch(ZEND_NUM_ARGS()) {
                case 0: /* defaults */
-                       host=user=passwd=NULL;
+                       host=user=passwd=charset=NULL;
                        hashed_details_length=6+3;
                        hashed_details = (char *) emalloc(hashed_details_length+1);
@@ -487,4 +511,25 @@
                        }
                        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+6+3;
+
+                               hashed_details = (char *) 
+emalloc(hashed_details_length+1);
+                               
+sprintf(hashed_details,"sybase_%s_%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;
@@ -515,5 +560,5 @@
 
                        sybase_ptr = (sybase_link *) malloc(sizeof(sybase_link));
-                       if (!php_sybase_do_connect_internal(sybase_ptr, host, user, 
passwd)) {
+                       if (!php_sybase_do_connect_internal(sybase_ptr, host, user, 
+passwd, charset)) {
                                free(sybase_ptr);
                                efree(hashed_details);
@@ -569,5 +614,5 @@
                                 */
                                memcpy(&sybase, sybase_ptr, sizeof(sybase_link));
-                               if (!php_sybase_do_connect_internal(sybase_ptr, host, 
user, passwd)) {
+                               if (!php_sybase_do_connect_internal(sybase_ptr, host, 
+user, passwd, charset)) {
                                        memcpy(sybase_ptr, &sybase, 
sizeof(sybase_link));
                                        efree(hashed_details);
@@ -612,5 +657,5 @@
 
                sybase_ptr = (sybase_link *) emalloc(sizeof(sybase_link));
-               if (!php_sybase_do_connect_internal(sybase_ptr, host, user, passwd)) {
+               if (!php_sybase_do_connect_internal(sybase_ptr, host, user, passwd, 
+charset)) {
                        efree(sybase_ptr);
                        efree(hashed_details);

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



ATTENTION! Do NOT reply to this email!
To reply, use the web interface found at http://bugs.php.net/?id=11320&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