diff options
author | Sascha Schumann <sas@php.net> | 1999-04-21 17:11:01 +0000 |
---|---|---|
committer | Sascha Schumann <sas@php.net> | 1999-04-21 17:11:01 +0000 |
commit | dcc16af80cac7a2273aba9f0d7601392280d2185 (patch) | |
tree | 2ccc21a47b02e2f5309173528a297adb8306b5fc /ext | |
parent | a6e4ef3e31629a4060dffb1fcc3153b1854d4f7b (diff) | |
download | php-git-dcc16af80cac7a2273aba9f0d7601392280d2185.tar.gz |
port some fixes, add compat routines
Diffstat (limited to 'ext')
-rw-r--r-- | ext/ereg/ereg.c | 26 | ||||
-rw-r--r-- | ext/standard/datetime.c | 11 | ||||
-rw-r--r-- | ext/standard/reg.c | 26 | ||||
-rw-r--r-- | ext/standard/string.c | 2 |
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); } |