mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
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:
parent
5fcff2d872
commit
cf90932a05
5 changed files with 112 additions and 83 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue