#ifdef PHP_WIN32
char *save;
#endif
- int ext_len, free_filename = 0;
+ int ext_len;
+
+ if (CHECK_NULL_PATH(filename, filename_len)) {
+ return FAILURE;
+ }
+ if (CHECK_NULL_PATH(filename, filename_len)) {
+ return FAILURE;
+ }
+
if (!strncasecmp(filename, "phar://", 7)) {
filename += 7;
filename_len -= 7;
/* {{{ php_raw_url_encode
*/
-PHPAPI char *php_raw_url_encode(char const *s, int len, int *new_length)
+PHPAPI zend_string *php_raw_url_encode(char const *s, size_t len)
{
- register int x, y;
+ register size_t x, y;
- unsigned char *str;
+ zend_string *str;
- str = (unsigned char *) safe_emalloc(3, len, 1);
+ str = zend_string_alloc(3 * len, 0);
for (x = 0, y = 0; len--; x++, y++) {
- str[y] = (unsigned char) s[x];
+ ZSTR_VAL(str)[y] = (unsigned char) s[x];
#ifndef CHARSET_EBCDIC
- if ((str[y] < '0' && str[y] != '-' && str[y] != '.') ||
- (str[y] < 'A' && str[y] > '9') ||
- (str[y] > 'Z' && str[y] < 'a' && str[y] != '_') ||
- (str[y] > 'z' && str[y] != '~')) {
- str[y++] = '%';
- str[y++] = hexchars[(unsigned char) s[x] >> 4];
- str[y] = hexchars[(unsigned char) s[x] & 15];
+ if ((ZSTR_VAL(str)[y] < '0' && ZSTR_VAL(str)[y] != '-' && ZSTR_VAL(str)[y] != '.') ||
+ (ZSTR_VAL(str)[y] < 'A' && ZSTR_VAL(str)[y] > '9') ||
+ (ZSTR_VAL(str)[y] > 'Z' && ZSTR_VAL(str)[y] < 'a' && ZSTR_VAL(str)[y] != '_') ||
+ (ZSTR_VAL(str)[y] > 'z' && ZSTR_VAL(str)[y] != '~')) {
+ ZSTR_VAL(str)[y++] = '%';
+ ZSTR_VAL(str)[y++] = hexchars[(unsigned char) s[x] >> 4];
+ ZSTR_VAL(str)[y] = hexchars[(unsigned char) s[x] & 15];
#else /*CHARSET_EBCDIC*/
- if (!isalnum(str[y]) && strchr("_-.~", str[y]) != NULL) {
- str[y++] = '%';
- str[y++] = hexchars[os_toascii[(unsigned char) s[x]] >> 4];
- str[y] = hexchars[os_toascii[(unsigned char) s[x]] & 15];
+ if (!isalnum(ZSTR_VAL(str)[y]) && strchr("_-.~", ZSTR_VAL(str)[y]) != NULL) {
+ ZSTR_VAL(str)[y++] = '%';
+ ZSTR_VAL(str)[y++] = hexchars[os_toascii[(unsigned char) s[x]] >> 4];
+ ZSTR_VAL(str)[y] = hexchars[os_toascii[(unsigned char) s[x]] & 15];
#endif /*CHARSET_EBCDIC*/
}
}