summaryrefslogtreecommitdiff
path: root/ext/standard/reg.c
diff options
context:
space:
mode:
authorSascha Schumann <sas@php.net>1999-04-21 17:11:01 +0000
committerSascha Schumann <sas@php.net>1999-04-21 17:11:01 +0000
commitdcc16af80cac7a2273aba9f0d7601392280d2185 (patch)
tree2ccc21a47b02e2f5309173528a297adb8306b5fc /ext/standard/reg.c
parenta6e4ef3e31629a4060dffb1fcc3153b1854d4f7b (diff)
downloadphp-git-dcc16af80cac7a2273aba9f0d7601392280d2185.tar.gz
port some fixes, add compat routines
Diffstat (limited to 'ext/standard/reg.c')
-rw-r--r--ext/standard/reg.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/ext/standard/reg.c b/ext/standard/reg.c
index 42d36493d6..8b81e82e7f 100644
--- a/ext/standard/reg.c
+++ b/ext/standard/reg.c
@@ -537,7 +537,8 @@ PHPAPI void php3_sql_regcase(INTERNAL_FUNCTION_PARAMETERS)
{
pval *string;
char *tmp;
- register int i;
+ unsigned char c;
+ register int i, j;
if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &string)==FAILURE) {
WRONG_PARAM_COUNT;
@@ -547,17 +548,22 @@ PHPAPI void php3_sql_regcase(INTERNAL_FUNCTION_PARAMETERS)
tmp = (char *) emalloc(string->value.str.len*4+1);
- for (i=0; i<string->value.str.len; i++) {
- tmp[i*4] = '[';
- tmp[i*4+1]=toupper((unsigned char)string->value.str.val[i]);
- tmp[i*4+2]=tolower((unsigned char)string->value.str.val[i]);
- tmp[i*4+3]=']';
+ for (i=j=0; i<string->value.str.len; i++) {
+ c = (unsigned char) string->value.str.val[i];
+ if(isalpha(c)) {
+ tmp[j++] = '[';
+ tmp[j++] = toupper(c);
+ tmp[j++] = tolower(c);
+ tmp[j++] = ']';
+ } else {
+ tmp[j++] = c;
+ }
}
- tmp[string->value.str.len*4]=0;
+ tmp[j]=0;
+
+ tmp = erealloc(tmp, j + 1);
- return_value->value.str.val = tmp;
- return_value->value.str.len = string->value.str.len*4;
- return_value->type = IS_STRING;
+ RETVAL_STRINGL(tmp, j, 0);
}
/* }}} */