Improve infrastructure of numeric handling of elements in symbol tables.

When you want to work with a symbol table, and you don't know whether you
have a numeric ("string that looks like a number") or a string element in
your hands, use zend_symtable_*() functions, in place of zend_hash_*()
functions.
This commit is contained in:
Zeev Suraski 2003-07-22 16:06:07 +00:00
parent 5fcff2d872
commit cf90932a05
5 changed files with 112 additions and 83 deletions

View file

@ -33,41 +33,6 @@
#include "ext/bcmath/number.h"
#endif
ZEND_API zend_bool zend_is_numeric_key(zval *zvalue, long *val)
{
char *tmp;
long length;
tmp = zvalue->value.str.val;
length = zvalue->value.str.len;
if ((*tmp>='0' && *tmp<='9')) { /* possibly a numeric index */
char *end=tmp+length;
ulong idx;
if (*tmp++=='0' && length>2) { /* don't accept numbers with leading zeros */
return 0;
}
while (tmp<end) {
if (!(*tmp>='0' && *tmp<='9')) {
break;
}
tmp++;
}
if (tmp==end && *tmp=='\0') { /* a numeric index */
idx = strtol(zvalue->value.str.val, NULL, 10);
if (idx!=LONG_MAX) {
*val = idx;
return 1;
}
}
}
return 0;
}
ZEND_API int zend_atoi(const char *str, int str_len)
{
int retval;