summaryrefslogtreecommitdiff
path: root/ext
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
parenta6e4ef3e31629a4060dffb1fcc3153b1854d4f7b (diff)
downloadphp-git-dcc16af80cac7a2273aba9f0d7601392280d2185.tar.gz
port some fixes, add compat routines
Diffstat (limited to 'ext')
-rw-r--r--ext/ereg/ereg.c26
-rw-r--r--ext/standard/datetime.c11
-rw-r--r--ext/standard/reg.c26
-rw-r--r--ext/standard/string.c2
4 files changed, 41 insertions, 24 deletions
diff --git a/ext/ereg/ereg.c b/ext/ereg/ereg.c
index 42d36493d6..8b81e82e7f 100644
--- a/ext/ereg/ereg.c
+++ b/ext/ereg/ereg.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);
}
/* }}} */
diff --git a/ext/standard/datetime.c b/ext/standard/datetime.c
index 3c82fe0918..191371a8c2 100644
--- a/ext/standard/datetime.c
+++ b/ext/standard/datetime.c
@@ -463,6 +463,7 @@ void php3_strftime(INTERNAL_FUNCTION_PARAMETERS)
char *format,*buf;
time_t timestamp;
struct tm *ta;
+ int max_reallocs = 5;
size_t buf_len=64, real_len;
switch (ARG_COUNT(ht)) {
@@ -495,11 +496,15 @@ void php3_strftime(INTERNAL_FUNCTION_PARAMETERS)
while ((real_len=strftime(buf,buf_len,format,ta))==buf_len || real_len==0) {
buf_len *= 2;
buf = (char *) erealloc(buf, buf_len);
+ if(!--max_reallocs) break;
}
- return_value->value.str.val = (char *) erealloc(buf,real_len+1);
- return_value->value.str.len = real_len;
- return_value->type = IS_STRING;
+ if(real_len && real_len != buf_len) {
+ buf = (char *) erealloc(buf,real_len+1);
+ RETURN_STRINGL(buf, real_len, 0);
+ }
+ efree(buf);
+ RETURN_FALSE;
}
#endif
/*
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);
}
/* }}} */
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 0750aa8734..b9db2614b9 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -972,7 +972,7 @@ void php3_ucwords(INTERNAL_FUNCTION_PARAMETERS)
if(*(r+1)){
r++;
*r=toupper((unsigned char)*r);
- }
+ } else break;
}
RETVAL_STRING(arg->value.str.val,1);
}