} while (0)
#define ZVAL_EMPTY_STRING(z) do { \
- ZVAL_STRINGL(z, "", 0); \
+ ZVAL_STR(z, STR_EMPTY_ALLOC()); \
} while (0)
#define ZVAL_PSTRINGL(z, s, l) do { \
/* }}} */
/* {{{ date_format - (gm)date helper */
-static char *date_format(char *format, int format_len, timelib_time *t, int localtime)
+static zend_string *date_format(char *format, int format_len, timelib_time *t, int localtime)
{
smart_str string = {0};
int i, length = 0;
int weekYearSet = 0;
if (!format_len) {
- return estrdup("");
+ return STR_EMPTY_ALLOC();
}
if (localtime) {
timelib_time_offset_dtor(offset);
}
- return string.c;
+ return string.s;
}
static void php_date(INTERNAL_FUNCTION_PARAMETERS, int localtime)
char *format;
int format_len;
long ts;
- char *string;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &format, &format_len, &ts) == FAILURE) {
RETURN_FALSE;
ts = time(NULL);
}
- string = php_format_date(format, format_len, ts, localtime TSRMLS_CC);
-
-//??? RETVAL_STRING(string, 0);
- RETVAL_STRING(string);
+ RETURN_STR(php_format_date(format, format_len, ts, localtime TSRMLS_CC));
}
/* }}} */
-PHPAPI char *php_format_date(char *format, int format_len, time_t ts, int localtime TSRMLS_DC) /* {{{ */
+PHPAPI zend_string *php_format_date(char *format, int format_len, time_t ts, int localtime TSRMLS_DC) /* {{{ */
{
timelib_time *t;
timelib_tzinfo *tzi;
- char *string;
+ zend_string *string;
t = timelib_time_ctor();
}
/* first we add the date and time in ISO format */
-//??? ZVAL_STRING(zv, date_format("Y-m-d H:i:s", 12, dateobj->time, 1), 0);
- ZVAL_STRING(&zv, date_format("Y-m-d H:i:s", 12, dateobj->time, 1));
+ ZVAL_STR(&zv, date_format("Y-m-d H:i:s", 12, dateobj->time, 1));
zend_hash_str_update(props, "date", sizeof("date")-1, &zv);
/* then we add the timezone name (or similar) */
}
dateobj = (php_date_obj *) Z_OBJ_P(object);
DATE_CHECK_INITIALIZED(dateobj->time, DateTime);
-//??? RETURN_STRING(date_format(format, format_len, dateobj->time, dateobj->time->is_localtime), 0);
- RETURN_STRING(date_format(format, format_len, dateobj->time, dateobj->time->is_localtime));
+ RETURN_STR(date_format(format, format_len, dateobj->time, dateobj->time->is_localtime));
}
/* }}} */
#define add_nominal() \
array_init(&element); \
add_assoc_long(&element, "ts", timestamp_begin); \
- add_assoc_string(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, timestamp_begin, 0 TSRMLS_CC), 0); \
+ add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, timestamp_begin, 0 TSRMLS_CC)); \
add_assoc_long(&element, "offset", tzobj->tzi.tz->type[0].offset); \
add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[0].isdst); \
add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[0].abbr_idx], 1); \
#define add(i,ts) \
array_init(&element); \
add_assoc_long(&element, "ts", ts); \
- add_assoc_string(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, ts, 0 TSRMLS_CC), 0); \
+ add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, ts, 0 TSRMLS_CC)); \
add_assoc_long(&element, "offset", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \
add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst); \
add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx], 1); \
smart_str_0(&string);
- return string.c;
+ return string.s;
}
/* }}} */
#define _php_strftime php_strftime
PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gm);
#endif
-PHPAPI char *php_format_date(char *format, int format_len, time_t ts, int localtime TSRMLS_DC);
+PHPAPI zend_string *php_format_date(char *format, int format_len, time_t ts, int localtime TSRMLS_DC);
/* Mechanism to set new TZ database */
PHPAPI void php_date_set_tzdb(timelib_tzdb *tzdb);
if ('\\' == *walk || '$' == *walk) {
smart_str_appendl(&code, segment, walk - segment);
if (walk_last == '\\') {
- code.c[code.len-1] = *walk++;
+ code.s->val[code.s->len-1] = *walk++;
segment = walk;
walk_last = 0;
continue;
compiled_string_description = zend_make_compiled_string_description("regexp code" TSRMLS_CC);
/* Run the code */
- if (zend_eval_stringl(code.c, code.len, &retval, compiled_string_description TSRMLS_CC) == FAILURE) {
+ if (zend_eval_stringl(code.s->val, code.s->len, &retval, compiled_string_description TSRMLS_CC) == FAILURE) {
efree(compiled_string_description);
- php_error_docref(NULL TSRMLS_CC,E_ERROR, "Failed evaluating code: %s%s", PHP_EOL, code.c);
+ php_error_docref(NULL TSRMLS_CC,E_ERROR, "Failed evaluating code: %s%s", PHP_EOL, code.s->val);
/* zend_error() does not return in this case */
}
efree(compiled_string_description);
}
if (Z_TYPE(intern->array) == IS_OBJECT) {
- php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "Cannot append properties to objects, use %s::offsetSet() instead", Z_OBJCE_P(object)->name);
+ php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "Cannot append properties to objects, use %s::offsetSet() instead", Z_OBJCE_P(object)->name->val);
return;
}
Return a copy of the contained array */
SPL_METHOD(Array, getArrayCopy)
{
- zval *object = getThis(), *tmp;
+ zval *object = getThis();
spl_array_object *intern = (spl_array_object*)Z_OBJ_P(object);
array_init(return_value);
- zend_hash_copy(HASH_OF(return_value), spl_array_get_hash_table(intern, 0 TSRMLS_CC), (copy_ctor_func_t) zval_add_ref);
+ zend_hash_copy(Z_ARRVAL_P(return_value), spl_array_get_hash_table(intern, 0 TSRMLS_CC), (copy_ctor_func_t) zval_add_ref);
} /* }}} */
static HashTable *spl_array_get_properties(zval *object TSRMLS_DC) /* {{{ */
/* done */
PHP_VAR_SERIALIZE_DESTROY(var_hash);
- if (buf.c) {
- RETVAL_STRINGL(buf.c, buf.len);
- smart_str_free(&buf);
- return;
+ if (buf.s) {
+ RETVAL_STR(buf.s);
}
zval_ptr_dtor(&members);
static void spl_ptr_llist_copy(spl_ptr_llist *from, spl_ptr_llist *to TSRMLS_DC) /* {{{ */
{
- spl_ptr_llist_element *current = from->head, *next;
+ spl_ptr_llist_element *current = from->head, *next;
spl_ptr_llist_ctor_func ctor = from->ctor;
while (current) {
/* done */
PHP_VAR_SERIALIZE_DESTROY(var_hash);
- if (buf.c) {
- RETVAL_STRINGL(buf.c, buf.len);
- smart_str_free(&buf);
- return;
+ if (buf.s) {
+ RETURN_STR(buf.s);
} else {
RETURN_NULL();
}
zval has_next;
int level;
- smart_str_appendl(&str, object->prefix[0].c, object->prefix[0].len);
+ smart_str_appendl(&str, object->prefix[0].s->val, object->prefix[0].s->len);
for (level = 0; level < object->level; ++level) {
zend_call_method_with_0_params(&object->iterators[level].zobject, object->iterators[level].ce, NULL, "hasnext", &has_next);
if (Z_TYPE(has_next) != IS_UNDEF) {
if (Z_LVAL(has_next)) {
- smart_str_appendl(&str, object->prefix[1].c, object->prefix[1].len);
+ smart_str_appendl(&str, object->prefix[1].s->val, object->prefix[1].s->len);
} else {
- smart_str_appendl(&str, object->prefix[2].c, object->prefix[2].len);
+ smart_str_appendl(&str, object->prefix[2].s->val, object->prefix[2].s->len);
}
zval_ptr_dtor(&has_next);
}
zend_call_method_with_0_params(&object->iterators[level].zobject, object->iterators[level].ce, NULL, "hasnext", &has_next);
if (Z_TYPE(has_next) != IS_UNDEF) {
if (Z_LVAL(has_next)) {
- smart_str_appendl(&str, object->prefix[3].c, object->prefix[3].len);
+ smart_str_appendl(&str, object->prefix[3].s->val, object->prefix[3].s->len);
} else {
- smart_str_appendl(&str, object->prefix[4].c, object->prefix[4].len);
+ smart_str_appendl(&str, object->prefix[4].s->val, object->prefix[4].s->len);
}
zval_ptr_dtor(&has_next);
}
- smart_str_appendl(&str, object->prefix[5].c, object->prefix[5].len);
+ smart_str_appendl(&str, object->prefix[5].s->val, object->prefix[5].s->len);
smart_str_0(&str);
- RETVAL_STRINGL(str.c, str.len);
- smart_str_free(&str);
+ RETURN_STR(str.s);
}
-static void spl_recursive_tree_iterator_get_entry(spl_recursive_it_object * object, zval * return_value TSRMLS_DC)
+static void spl_recursive_tree_iterator_get_entry(spl_recursive_it_object *object, zval *return_value TSRMLS_DC)
{
zend_object_iterator *iterator = object->iterators[object->level].iterator;
zval *data;
zend_restore_error_handling(&error_handling TSRMLS_CC);
}
-static void spl_recursive_tree_iterator_get_postfix(spl_recursive_it_object * object, zval * return_value TSRMLS_DC)
+static void spl_recursive_tree_iterator_get_postfix(spl_recursive_it_object *object, zval *return_value TSRMLS_DC)
{
- RETVAL_STRINGL(object->postfix[0].c, object->postfix[0].len);
+ RETVAL_STR(object->postfix[0].s);
+ Z_ADDREF_P(return_value);
}
/* {{{ proto void RecursiveTreeIterator::__construct(RecursiveIterator|IteratorAggregate it [, int flags = RTIT_BYPASS_KEY [, int cit_flags = CIT_CATCH_GET_CHILD [, mode = RIT_SELF_FIRST ]]]) throws InvalidArgumentException
{
zend_object *old_object;
zend_object *new_object;
- spl_SplObjectStorage *intern;
old_object = Z_OBJ_P(zobject);
new_object = spl_object_storage_new_ex(old_object->ce, zobject TSRMLS_CC);
/* done */
PHP_VAR_SERIALIZE_DESTROY(var_hash);
- if (buf.c) {
- RETVAL_STRINGL(buf.c, buf.len);
- smart_str_free(&buf);
- return;
+ if (buf.s) {
+ RETURN_STR(buf.s);
} else {
RETURN_NULL();
}
smart_str_appendc(&csvline, '\n');
smart_str_0(&csvline);
- ret = php_stream_write(stream, csvline.c, csvline.len);
+ ret = php_stream_write(stream, csvline.s->val, csvline.s->len);
smart_str_free(&csvline);
static php_stream_filter *strfilter_strip_tags_create(const char *filtername, zval *filterparams, int persistent TSRMLS_DC)
{
php_strip_tags_filter *inst;
- smart_str tags_ss = { 0, 0, 0 };
+ smart_str tags_ss = {0};
inst = pemalloc(sizeof(php_strip_tags_filter), persistent);
} else {
/* FIXME: convert_to_* may clutter zvals and lead it into segfault ? */
convert_to_string_ex(filterparams);
-
- tags_ss.c = Z_STRVAL_P(filterparams);
- tags_ss.len = Z_STRLEN_P(filterparams);
- tags_ss.a = 0;
+ smart_str_setl(&tags_ss, Z_STRVAL_P(filterparams), Z_STRLEN_P(filterparams));
}
}
- if (php_strip_tags_filter_ctor(inst, tags_ss.c, tags_ss.len, persistent) != SUCCESS) {
- if (tags_ss.a != 0) {
-//??? STR_FREE(tags_ss.c);
- }
+ if (php_strip_tags_filter_ctor(inst, tags_ss.s->val, tags_ss.s->len, persistent) != SUCCESS) {
+ smart_str_free(&tags_ss);
pefree(inst, persistent);
return NULL;
}
- if (tags_ss.a != 0) {
-//??? STR_FREE(tags_ss.c);
- }
+ smart_str_free(&tags_ss);
return php_stream_filter_alloc(&strfilter_strip_tags_ops, inst, persistent);
}
/* Skip these types */
continue;
} else {
- if (formstr->len) {
+ if (formstr->s->len) {
smart_str_appendl(formstr, arg_sep, arg_sep_len);
}
/* Simple key=value */
}
if (php_url_encode_hash_ex(HASH_OF(formdata), &formstr, prefix, prefix_len, NULL, 0, NULL, 0, (Z_TYPE_P(formdata) == IS_OBJECT ? formdata : NULL), arg_sep, enc_type TSRMLS_CC) == FAILURE) {
- if (formstr.c) {
- efree(formstr.c);
+ if (formstr.s) {
+ smart_str_free(&formstr);
}
RETURN_FALSE;
}
- if (!formstr.c) {
+ if (!formstr.s) {
RETURN_EMPTY_STRING();
}
smart_str_0(&formstr);
-//??? RETURN_STRINGL(formstr.c, formstr.len, 0);
- RETURN_STRINGL(formstr.c, formstr.len);
+ RETURN_STR(formstr.s);
}
/* }}} */
finish:
smart_str_appendl(&header, "\r\n", sizeof("\r\n")-1);
- if (php_stream_write(stream, header.c, header.len) != header.len) {
+ if (php_stream_write(stream, header.s->val, header.s->len) != header.s->len) {
php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "Cannot connect to HTTPS server through proxy");
php_stream_close(stream);
stream = NULL;
}
smart_str_0(&tmpstr);
/* Remove newlines and spaces from start and end. there's at least one extra \r\n at the end that needs to go. */
- if (tmpstr.c) {
- tmp = php_trim(tmpstr.c, strlen(tmpstr.c), NULL, 0, NULL, 3 TSRMLS_CC);
+ if (tmpstr.s) {
+ tmp = php_trim(tmpstr.s->val, tmpstr.s->len, NULL, 0, NULL, 3 TSRMLS_CC);
smart_str_free(&tmpstr);
}
}
#endif
#define smart_str_0(x) do { \
- if ((x)->c) { \
- (x)->c[(x)->len] = '\0'; \
+ if ((x)->s) { \
+ (x)->s->val[(x)->s->len] = '\0'; \
} \
} while (0)
#define SMART_STR_START_SIZE 78
#endif
+
#ifdef SMART_STR_USE_REALLOC
-#define SMART_STR_REALLOC(a,b,c) realloc((a),(b))
+#define SMART_STR_DO_REALLOC(b, w) do { \
+ (b)->s = erealloc((buf)->s, sizeof(zend_string) + (b)->a); \
+} while (0)
#else
-#define SMART_STR_REALLOC(a,b,c) perealloc((a),(b),(c))
+#define SMART_STR_DO_REALLOC(b, w) do { \
+ (b)->s = perealloc((b)->s, sizeof(zend_string) + (b)->a, (w)); \
+} while (0)
#endif
-#define SMART_STR_DO_REALLOC(d, what) \
- (d)->c = SMART_STR_REALLOC((d)->c, (d)->a + 1, (what))
#define smart_str_alloc4(d, n, what, newlen) do { \
- if (!(d)->c) { \
- (d)->len = 0; \
+ if (!(d)->s) { \
newlen = (n); \
(d)->a = newlen < SMART_STR_START_SIZE \
? SMART_STR_START_SIZE \
: newlen + SMART_STR_PREALLOC; \
- SMART_STR_DO_REALLOC(d, what); \
+ (d)->s = STR_ALLOC((d)->a, (what)); \
+ (d)->s->len = 0; \
} else { \
- newlen = (d)->len + (n); \
+ newlen = (d)->s->len + (n); \
if (newlen >= (d)->a) { \
(d)->a = newlen + SMART_STR_PREALLOC; \
- SMART_STR_DO_REALLOC(d, what); \
+ SMART_STR_DO_REALLOC((d), (what)); \
} \
} \
} while (0)
#define smart_str_append_unsigned(dest, val) \
smart_str_append_unsigned_ex((dest), (val), 0)
-#define smart_str_appendc_ex(dest, ch, what) do { \
- register size_t __nl; \
- smart_str_alloc4((dest), 1, (what), __nl); \
- (dest)->len = __nl; \
- ((unsigned char *) (dest)->c)[(dest)->len - 1] = (ch); \
+#define smart_str_appendc_ex(dest, ch, what) do { \
+ register size_t __nl; \
+ smart_str_alloc4((dest), 1, (what), __nl); \
+ (dest)->s->len = __nl; \
+ ((unsigned char *) (dest)->s->val)[(dest)->s->len - 1] = (ch); \
} while (0)
-#define smart_str_free_ex(s, what) do { \
- smart_str *__s = (smart_str *) (s); \
- if (__s->c) { \
- pefree(__s->c, what); \
- __s->c = NULL; \
+#define smart_str_free_ex(buf, what) do { \
+ smart_str *__s = (smart_str *) (buf); \
+ if (__s->s) { \
+ STR_RELEASE(__s->s); \
+ __s->s = NULL; \
} \
- __s->a = __s->len = 0; \
+ __s->a = 0; \
} while (0)
#define smart_str_appendl_ex(dest, src, nlen, what) do { \
smart_str *__dest = (smart_str *) (dest); \
\
smart_str_alloc4(__dest, (nlen), (what), __nl); \
- memcpy(__dest->c + __dest->len, (src), (nlen)); \
- __dest->len = __nl; \
+ memcpy(__dest->s->val + __dest->s->len, (src), (nlen)); \
+ __dest->s->len = __nl; \
} while (0)
/* input: buf points to the END of the buffer */
} while (0)
/* buf points to the END of the buffer */
-#define smart_str_print_long4(buf, num, vartype, result) do { \
+#define smart_str_print_long4(buf, num, vartype, result) do { \
if (num < 0) { \
/* this might cause problems when dealing with LONG_MIN \
and machines which don't support long long. Works \
flawlessly on 32bit x86 */ \
- smart_str_print_unsigned4((buf), -(num), vartype, (result)); \
+ smart_str_print_unsigned4((buf), -(num), vartype, (result));\
*--(result) = '-'; \
} else { \
smart_str_print_unsigned4((buf), (num), vartype, (result)); \
#define smart_str_append_off_t_ex(dest, num, type) \
smart_str_append_generic_ex((dest), (num), (type), off_t, _long)
-#define smart_str_append_ex(dest, src, what) \
- smart_str_appendl_ex((dest), ((smart_str *)(src))->c, \
- ((smart_str *)(src))->len, (what));
+#define smart_str_append_ex(dest, src, what) \
+ smart_str_appendl_ex((dest), ((smart_str *)(src))->s->val, \
+ ((smart_str *)(src))->s->len, (what));
#define smart_str_setl(dest, src, nlen) do { \
- (dest)->len = (nlen); \
- (dest)->a = (nlen) + 1; \
- (dest)->c = (char *) (src); \
+ smart_str_appendl_ex((dest), (src), (nlen), 0); \
} while (0)
#define smart_str_sets(dest, src) \
#include <sys/types.h>
typedef struct {
- char *c;
- size_t len;
+ zend_string *s;
size_t a;
} smart_str;
}
smart_str_0(&implstr);
- if (implstr.len) {
-//??? RETURN_STRINGL(implstr.c, implstr.len, 0);
- RETURN_STRINGL(implstr.c, implstr.len);
+ if (implstr.s) {
+ RETURN_STR(implstr.s);
} else {
smart_str_free(&implstr);
RETURN_EMPTY_STRING();
smart_str_appendl(&result, &S(text)[nextwpos], L(text) - nextwpos);
- if (result.c != NULL) {
+ if (result.s) {
smart_str_0(&result);
-//??? RETVAL_STRINGL(result.c, result.len, 0);
- RETVAL_STRINGL(result.c, result.len);
+ RETURN_STR(result.s);
} else {
RETURN_EMPTY_STRING();
}
const char *bash = NULL;
const char *sep = "?";
- q = (p = url->c) + url->len;
+ q = (p = url->s->val) + url->s->len;
scan:
done:
/* Don't modify URLs of the format "#mark" */
- if (bash && bash - url->c == 0) {
+ if (bash && bash - url->s->val == 0) {
smart_str_append(dest, url);
return;
}
if (bash)
- smart_str_appendl(dest, url->c, bash - url->c);
+ smart_str_appendl(dest, url->s->val, bash - url->s->val);
else
smart_str_append(dest, url);
{
char f = 0;
- if (strncasecmp(ctx->arg.c, ctx->lookup_data, ctx->arg.len) == 0)
+ if (strncasecmp(ctx->arg.s->val, ctx->lookup_data, ctx->arg.s->len) == 0)
f = 1;
if (quotes)
{
int doit = 0;
- if (ctx->form_app.len > 0) {
- switch (ctx->tag.len) {
+ if (ctx->form_app.s->len > 0) {
+ switch (ctx->tag.s->len) {
case sizeof("form") - 1:
- if (!strncasecmp(ctx->tag.c, "form", sizeof("form") - 1)) {
+ if (!strncasecmp(ctx->tag.s->val, "form", sizeof("form") - 1)) {
doit = 1;
}
- if (doit && ctx->val.c && ctx->lookup_data && *ctx->lookup_data) {
- char *e, *p = zend_memnstr(ctx->val.c, "://", sizeof("://") - 1, ctx->val.c + ctx->val.len);
+ if (doit && ctx->val.s->val && ctx->lookup_data && *ctx->lookup_data) {
+ char *e, *p = (char *)zend_memnstr(ctx->val.s->val, "://", sizeof("://") - 1, ctx->val.s->val + ctx->val.s->len);
if (p) {
- e = memchr(p, '/', (ctx->val.c + ctx->val.len) - p);
+ e = memchr(p, '/', (ctx->val.s->val + ctx->val.s->len) - p);
if (!e) {
- e = ctx->val.c + ctx->val.len;
+ e = ctx->val.s->val + ctx->val.s->len;
}
if ((e - p) && strncasecmp(p, ctx->lookup_data, (e - p))) {
doit = 0;
break;
case sizeof("fieldset") - 1:
- if (!strncasecmp(ctx->tag.c, "fieldset", sizeof("fieldset") - 1)) {
+ if (!strncasecmp(ctx->tag.s->val, "fieldset", sizeof("fieldset") - 1)) {
doit = 1;
}
break;
int ok = 0;
unsigned int i;
- ctx->tag.len = 0;
+ ctx->tag.s->len = 0;
smart_str_appendl(&ctx->tag, start, YYCURSOR - start);
- for (i = 0; i < ctx->tag.len; i++)
- ctx->tag.c[i] = tolower((int)(unsigned char)ctx->tag.c[i]);
- if ((ctx->lookup_data = zend_hash_str_find_ptr(ctx->tags, ctx->tag.c, ctx->tag.len)) != NULL)
+ for (i = 0; i < ctx->tag.s->len; i++)
+ ctx->tag.s->val[i] = tolower((int)(unsigned char)ctx->tag.s->val[i]);
+ /* intentionally using str_find here, in case the hash value is set, but the string val is changed later */
+ if ((ctx->lookup_data = zend_hash_str_find_ptr(ctx->tags, ctx->tag.s->val, ctx->tag.s->len)) != NULL)
ok = 1;
STATE = ok ? STATE_NEXT_ARG : STATE_PLAIN;
}
static inline void handle_arg(STD_PARA)
{
- ctx->arg.len = 0;
+ ctx->arg.s->len = 0;
smart_str_appendl(&ctx->arg, start, YYCURSOR - start);
}
smart_str_appendl(&ctx->buf, newdata, newlen);
- YYCURSOR = ctx->buf.c;
- YYLIMIT = ctx->buf.c + ctx->buf.len;
+ YYCURSOR = ctx->buf.s->val;
+ YYLIMIT = ctx->buf.s->val + ctx->buf.s->len;
switch (STATE) {
case STATE_PLAIN: goto state_plain;
state_plain:
start = YYCURSOR;
-#line 373 "ext/standard/url_scanner_ex.c"
+#line 374 "ext/standard/url_scanner_ex.c"
{
YYCTYPE yych;
static const unsigned char yybm[] = {
goto yy15;
}
++YYCURSOR;
-#line 308 "ext/standard/url_scanner_ex.re"
+#line 309 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); STATE = STATE_TAG; goto state_tag; }
-#line 418 "ext/standard/url_scanner_ex.c"
+#line 419 "ext/standard/url_scanner_ex.c"
yy15:
++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1);
if (yybm[0+yych] & 128) {
goto yy15;
}
-#line 309 "ext/standard/url_scanner_ex.re"
+#line 310 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); goto state_plain; }
-#line 428 "ext/standard/url_scanner_ex.c"
+#line 429 "ext/standard/url_scanner_ex.c"
}
-#line 310 "ext/standard/url_scanner_ex.re"
+#line 311 "ext/standard/url_scanner_ex.re"
state_tag:
start = YYCURSOR;
-#line 436 "ext/standard/url_scanner_ex.c"
+#line 437 "ext/standard/url_scanner_ex.c"
{
YYCTYPE yych;
static const unsigned char yybm[] = {
yych = *YYCURSOR;
goto yy25;
yy21:
-#line 315 "ext/standard/url_scanner_ex.re"
+#line 316 "ext/standard/url_scanner_ex.re"
{ handle_tag(STD_ARGS); /* Sets STATE */; passthru(STD_ARGS); if (STATE == STATE_PLAIN) goto state_plain; else goto state_next_arg; }
-#line 489 "ext/standard/url_scanner_ex.c"
+#line 490 "ext/standard/url_scanner_ex.c"
yy22:
++YYCURSOR;
-#line 316 "ext/standard/url_scanner_ex.re"
+#line 317 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); goto state_plain_begin; }
-#line 494 "ext/standard/url_scanner_ex.c"
+#line 495 "ext/standard/url_scanner_ex.c"
yy24:
++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1);
}
goto yy21;
}
-#line 317 "ext/standard/url_scanner_ex.re"
+#line 318 "ext/standard/url_scanner_ex.re"
state_next_arg_begin:
state_next_arg:
start = YYCURSOR;
-#line 514 "ext/standard/url_scanner_ex.c"
+#line 515 "ext/standard/url_scanner_ex.c"
{
YYCTYPE yych;
static const unsigned char yybm[] = {
++YYCURSOR;
if ((yych = *YYCURSOR) == '>') goto yy39;
yy29:
-#line 328 "ext/standard/url_scanner_ex.re"
+#line 329 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); goto state_plain_begin; }
-#line 581 "ext/standard/url_scanner_ex.c"
+#line 582 "ext/standard/url_scanner_ex.c"
yy30:
++YYCURSOR;
yy31:
-#line 325 "ext/standard/url_scanner_ex.re"
+#line 326 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); handle_form(STD_ARGS); goto state_plain_begin; }
-#line 587 "ext/standard/url_scanner_ex.c"
+#line 588 "ext/standard/url_scanner_ex.c"
yy32:
++YYCURSOR;
yych = *YYCURSOR;
goto yy38;
yy33:
-#line 326 "ext/standard/url_scanner_ex.re"
+#line 327 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); goto state_next_arg; }
-#line 595 "ext/standard/url_scanner_ex.c"
+#line 596 "ext/standard/url_scanner_ex.c"
yy34:
++YYCURSOR;
-#line 327 "ext/standard/url_scanner_ex.re"
+#line 328 "ext/standard/url_scanner_ex.re"
{ --YYCURSOR; STATE = STATE_ARG; goto state_arg; }
-#line 600 "ext/standard/url_scanner_ex.c"
+#line 601 "ext/standard/url_scanner_ex.c"
yy36:
yych = *++YYCURSOR;
goto yy29;
yych = *YYCURSOR;
goto yy31;
}
-#line 329 "ext/standard/url_scanner_ex.re"
+#line 330 "ext/standard/url_scanner_ex.re"
state_arg:
start = YYCURSOR;
-#line 624 "ext/standard/url_scanner_ex.c"
+#line 625 "ext/standard/url_scanner_ex.c"
{
YYCTYPE yych;
static const unsigned char yybm[] = {
yych = *YYCURSOR;
goto yy47;
yy43:
-#line 334 "ext/standard/url_scanner_ex.re"
+#line 335 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); handle_arg(STD_ARGS); STATE = STATE_BEFORE_VAL; goto state_before_val; }
-#line 674 "ext/standard/url_scanner_ex.c"
+#line 675 "ext/standard/url_scanner_ex.c"
yy44:
++YYCURSOR;
-#line 335 "ext/standard/url_scanner_ex.re"
+#line 336 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); STATE = STATE_NEXT_ARG; goto state_next_arg; }
-#line 679 "ext/standard/url_scanner_ex.c"
+#line 680 "ext/standard/url_scanner_ex.c"
yy46:
++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1);
}
goto yy43;
}
-#line 336 "ext/standard/url_scanner_ex.re"
+#line 337 "ext/standard/url_scanner_ex.re"
state_before_val:
start = YYCURSOR;
-#line 696 "ext/standard/url_scanner_ex.c"
+#line 697 "ext/standard/url_scanner_ex.c"
{
YYCTYPE yych;
static const unsigned char yybm[] = {
if (yych == ' ') goto yy57;
if (yych == '=') goto yy55;
yy51:
-#line 342 "ext/standard/url_scanner_ex.re"
+#line 343 "ext/standard/url_scanner_ex.re"
{ --YYCURSOR; goto state_next_arg_begin; }
-#line 745 "ext/standard/url_scanner_ex.c"
+#line 746 "ext/standard/url_scanner_ex.c"
yy52:
++YYCURSOR;
yych = *YYCURSOR;
goto yy56;
yy53:
-#line 341 "ext/standard/url_scanner_ex.re"
+#line 342 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); STATE = STATE_VAL; goto state_val; }
-#line 753 "ext/standard/url_scanner_ex.c"
+#line 754 "ext/standard/url_scanner_ex.c"
yy54:
yych = *++YYCURSOR;
goto yy51;
YYCURSOR = YYMARKER;
goto yy51;
}
-#line 343 "ext/standard/url_scanner_ex.re"
+#line 344 "ext/standard/url_scanner_ex.re"
state_val:
start = YYCURSOR;
-#line 782 "ext/standard/url_scanner_ex.c"
+#line 783 "ext/standard/url_scanner_ex.c"
{
YYCTYPE yych;
static const unsigned char yybm[] = {
yych = *(YYMARKER = ++YYCURSOR);
if (yych != '>') goto yy76;
yy63:
-#line 352 "ext/standard/url_scanner_ex.re"
+#line 353 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); goto state_next_arg_begin; }
-#line 845 "ext/standard/url_scanner_ex.c"
+#line 846 "ext/standard/url_scanner_ex.c"
yy64:
yych = *(YYMARKER = ++YYCURSOR);
if (yych == '>') goto yy63;
yych = *YYCURSOR;
goto yy69;
yy66:
-#line 351 "ext/standard/url_scanner_ex.re"
+#line 352 "ext/standard/url_scanner_ex.re"
{ handle_val(STD_ARGS, 0, ' '); goto state_next_arg_begin; }
-#line 857 "ext/standard/url_scanner_ex.c"
+#line 858 "ext/standard/url_scanner_ex.c"
yy67:
yych = *++YYCURSOR;
goto yy63;
goto yy63;
yy73:
++YYCURSOR;
-#line 350 "ext/standard/url_scanner_ex.re"
+#line 351 "ext/standard/url_scanner_ex.re"
{ handle_val(STD_ARGS, 1, '\''); goto state_next_arg_begin; }
-#line 886 "ext/standard/url_scanner_ex.c"
+#line 887 "ext/standard/url_scanner_ex.c"
yy75:
++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1);
}
if (yych >= '>') goto yy72;
++YYCURSOR;
-#line 349 "ext/standard/url_scanner_ex.re"
+#line 350 "ext/standard/url_scanner_ex.re"
{ handle_val(STD_ARGS, 1, '"'); goto state_next_arg_begin; }
-#line 899 "ext/standard/url_scanner_ex.c"
+#line 900 "ext/standard/url_scanner_ex.c"
}
-#line 353 "ext/standard/url_scanner_ex.re"
+#line 354 "ext/standard/url_scanner_ex.re"
stop:
/* XXX: Crash avoidance. Need to work with reporter to figure out what goes wrong */
if (rest < 0) rest = 0;
- if (rest) memmove(ctx->buf.c, start, rest);
- ctx->buf.len = rest;
+ if (rest) memmove(ctx->buf.s->val, start, rest);
+ ctx->buf.s->len = rest;
}
char *php_url_scanner_adapt_single_url(const char *url, size_t urllen, const char *name, const char *value, size_t *newlen TSRMLS_DC)
{
+ char *result;
smart_str surl = {0};
smart_str buf = {0};
smart_str url_app = {0};
append_modified_url(&surl, &buf, &url_app, PG(arg_separator).output);
smart_str_0(&buf);
- if (newlen) *newlen = buf.len;
+ if (newlen) *newlen = buf.s->len;
+ result = estrndup(buf.s->val, buf.s->len);
smart_str_free(&url_app);
+ smart_str_free(&buf);
- return buf.c;
+ return result;
}
xx_mainloop(ctx, src, srclen TSRMLS_CC);
- *newlen = ctx->result.len;
- if (!ctx->result.c) {
+ *newlen = ctx->result.s->len;
+ if (!ctx->result.s) {
smart_str_appendl(&ctx->result, "", 0);
}
smart_str_0(&ctx->result);
if (do_flush) {
- smart_str_appendl(&ctx->result, ctx->buf.c, ctx->buf.len);
- *newlen += ctx->buf.len;
+ smart_str_appendl(&ctx->result, ctx->buf.s->val, ctx->buf.s->len);
+ *newlen += ctx->buf.s->len;
smart_str_free(&ctx->buf);
}
- retval = ctx->result.c;
- ctx->result.c = NULL;
- ctx->result.len = 0;
+ retval = estrndup(ctx->result.s->val, ctx->result.s->len);
+ smart_str_free(&ctx->result);
return retval;
}
{
size_t len;
- if (BG(url_adapt_state_ex).url_app.len != 0) {
+ if (BG(url_adapt_state_ex).url_app.s->len != 0) {
*handled_output = url_adapt_ext(output, output_len, &len, (zend_bool) (mode & (PHP_OUTPUT_HANDLER_END | PHP_OUTPUT_HANDLER_CONT | PHP_OUTPUT_HANDLER_FLUSH | PHP_OUTPUT_HANDLER_FINAL) ? 1 : 0) TSRMLS_CC);
if (sizeof(uint) < sizeof(size_t)) {
if (len > UINT_MAX)
len = UINT_MAX;
}
*handled_output_len = len;
- } else if (BG(url_adapt_state_ex).url_app.len == 0) {
+ } else if (BG(url_adapt_state_ex).url_app.s->len == 0) {
url_adapt_state_ex_t *ctx = &BG(url_adapt_state_ex);
- if (ctx->buf.len) {
- smart_str_appendl(&ctx->result, ctx->buf.c, ctx->buf.len);
+ if (ctx->buf.s) {
+ smart_str_appendl(&ctx->result, ctx->buf.s->val, ctx->buf.s->len);
smart_str_appendl(&ctx->result, output, output_len);
- *handled_output = ctx->result.c;
- *handled_output_len = ctx->buf.len + output_len;
+ *handled_output = estrndup(ctx->result.s->val, ctx->result.s->len);
+ *handled_output_len = ctx->buf.s->len + output_len;
- ctx->result.c = NULL;
- ctx->result.len = 0;
smart_str_free(&ctx->buf);
+ smart_str_free(&ctx->result);
} else {
*handled_output = estrndup(output, *handled_output_len = output_len);
}
}
- if (BG(url_adapt_state_ex).url_app.len != 0) {
+ if (BG(url_adapt_state_ex).url_app.s->len != 0) {
smart_str_appends(&BG(url_adapt_state_ex).url_app, PG(arg_separator).output);
}
PHPAPI int php_url_scanner_reset_vars(TSRMLS_D)
{
- BG(url_adapt_state_ex).form_app.len = 0;
- BG(url_adapt_state_ex).url_app.len = 0;
+ BG(url_adapt_state_ex).form_app.s->len = 0;
+ BG(url_adapt_state_ex).url_app.s->len = 0;
return SUCCESS;
}
{
BG(url_adapt_state_ex).tags = NULL;
- BG(url_adapt_state_ex).form_app.c = BG(url_adapt_state_ex).url_app.c = 0;
- BG(url_adapt_state_ex).form_app.len = BG(url_adapt_state_ex).url_app.len = 0;
+ BG(url_adapt_state_ex).form_app.s = BG(url_adapt_state_ex).url_app.s = NULL;
REGISTER_INI_ENTRIES();
return SUCCESS;
const char *bash = NULL;
const char *sep = "?";
- q = (p = url->c) + url->len;
+ q = (p = url->s->val) + url->s->len;
scan:
/*!re2c
done:
/* Don't modify URLs of the format "#mark" */
- if (bash && bash - url->c == 0) {
+ if (bash && bash - url->s->val == 0) {
smart_str_append(dest, url);
return;
}
if (bash)
- smart_str_appendl(dest, url->c, bash - url->c);
+ smart_str_appendl(dest, url->s->val, bash - url->s->val);
else
smart_str_append(dest, url);
{
char f = 0;
- if (strncasecmp(ctx->arg.c, ctx->lookup_data, ctx->arg.len) == 0)
+ if (strncasecmp(ctx->arg.s->val, ctx->lookup_data, ctx->arg.s->len) == 0)
f = 1;
if (quotes)
{
int doit = 0;
- if (ctx->form_app.len > 0) {
- switch (ctx->tag.len) {
+ if (ctx->form_app.s->len > 0) {
+ switch (ctx->tag.s->len) {
case sizeof("form") - 1:
- if (!strncasecmp(ctx->tag.c, "form", sizeof("form") - 1)) {
+ if (!strncasecmp(ctx->tag.s->val, "form", sizeof("form") - 1)) {
doit = 1;
}
- if (doit && ctx->val.c && ctx->lookup_data && *ctx->lookup_data) {
- char *e, *p = zend_memnstr(ctx->val.c, "://", sizeof("://") - 1, ctx->val.c + ctx->val.len);
+ if (doit && ctx->val.s->val && ctx->lookup_data && *ctx->lookup_data) {
+ char *e, *p = (char *)zend_memnstr(ctx->val.s->val, "://", sizeof("://") - 1, ctx->val.s->val + ctx->val.s->len);
if (p) {
- e = memchr(p, '/', (ctx->val.c + ctx->val.len) - p);
+ e = memchr(p, '/', (ctx->val.s->val + ctx->val.s->len) - p);
if (!e) {
- e = ctx->val.c + ctx->val.len;
+ e = ctx->val.s->val + ctx->val.s->len;
}
if ((e - p) && strncasecmp(p, ctx->lookup_data, (e - p))) {
doit = 0;
break;
case sizeof("fieldset") - 1:
- if (!strncasecmp(ctx->tag.c, "fieldset", sizeof("fieldset") - 1)) {
+ if (!strncasecmp(ctx->tag.s->val, "fieldset", sizeof("fieldset") - 1)) {
doit = 1;
}
break;
int ok = 0;
unsigned int i;
- ctx->tag.len = 0;
+ ctx->tag.s->len = 0;
smart_str_appendl(&ctx->tag, start, YYCURSOR - start);
- for (i = 0; i < ctx->tag.len; i++)
- ctx->tag.c[i] = tolower((int)(unsigned char)ctx->tag.c[i]);
- if ((ctx->lookup_data = zend_hash_str_find_ptr(ctx->tags, ctx->tag.c, ctx->tag.len)) != NULL)
+ for (i = 0; i < ctx->tag.s->len; i++)
+ ctx->tag.s->val[i] = tolower((int)(unsigned char)ctx->tag.s->val[i]);
+ /* intentionally using str_find here, in case the hash value is set, but the string val is changed later */
+ if ((ctx->lookup_data = zend_hash_str_find_ptr(ctx->tags, ctx->tag.s->val, ctx->tag.s->len)) != NULL)
ok = 1;
STATE = ok ? STATE_NEXT_ARG : STATE_PLAIN;
}
static inline void handle_arg(STD_PARA)
{
- ctx->arg.len = 0;
+ ctx->arg.s->len = 0;
smart_str_appendl(&ctx->arg, start, YYCURSOR - start);
}
smart_str_appendl(&ctx->buf, newdata, newlen);
- YYCURSOR = ctx->buf.c;
- YYLIMIT = ctx->buf.c + ctx->buf.len;
+ YYCURSOR = ctx->buf.s->val;
+ YYLIMIT = ctx->buf.s->val + ctx->buf.s->len;
switch (STATE) {
case STATE_PLAIN: goto state_plain;
/* XXX: Crash avoidance. Need to work with reporter to figure out what goes wrong */
if (rest < 0) rest = 0;
- if (rest) memmove(ctx->buf.c, start, rest);
- ctx->buf.len = rest;
+ if (rest) memmove(ctx->buf.s->val, start, rest);
+ ctx->buf.s->len = rest;
}
char *php_url_scanner_adapt_single_url(const char *url, size_t urllen, const char *name, const char *value, size_t *newlen TSRMLS_DC)
{
+ char *result;
smart_str surl = {0};
smart_str buf = {0};
smart_str url_app = {0};
append_modified_url(&surl, &buf, &url_app, PG(arg_separator).output);
smart_str_0(&buf);
- if (newlen) *newlen = buf.len;
+ if (newlen) *newlen = buf.s->len;
+ result = estrndup(buf.s->val, buf.s->len);
smart_str_free(&url_app);
+ smart_str_free(&buf);
- return buf.c;
+ return result;
}
xx_mainloop(ctx, src, srclen TSRMLS_CC);
- *newlen = ctx->result.len;
- if (!ctx->result.c) {
+ *newlen = ctx->result.s->len;
+ if (!ctx->result.s) {
smart_str_appendl(&ctx->result, "", 0);
}
smart_str_0(&ctx->result);
if (do_flush) {
- smart_str_appendl(&ctx->result, ctx->buf.c, ctx->buf.len);
- *newlen += ctx->buf.len;
+ smart_str_appendl(&ctx->result, ctx->buf.s->val, ctx->buf.s->len);
+ *newlen += ctx->buf.s->len;
smart_str_free(&ctx->buf);
}
- retval = ctx->result.c;
- ctx->result.c = NULL;
- ctx->result.len = 0;
+ retval = estrndup(ctx->result.s->val, ctx->result.s->len);
+ smart_str_free(&ctx->result);
return retval;
}
{
size_t len;
- if (BG(url_adapt_state_ex).url_app.len != 0) {
+ if (BG(url_adapt_state_ex).url_app.s->len != 0) {
*handled_output = url_adapt_ext(output, output_len, &len, (zend_bool) (mode & (PHP_OUTPUT_HANDLER_END | PHP_OUTPUT_HANDLER_CONT | PHP_OUTPUT_HANDLER_FLUSH | PHP_OUTPUT_HANDLER_FINAL) ? 1 : 0) TSRMLS_CC);
if (sizeof(uint) < sizeof(size_t)) {
if (len > UINT_MAX)
len = UINT_MAX;
}
*handled_output_len = len;
- } else if (BG(url_adapt_state_ex).url_app.len == 0) {
+ } else if (BG(url_adapt_state_ex).url_app.s->len == 0) {
url_adapt_state_ex_t *ctx = &BG(url_adapt_state_ex);
- if (ctx->buf.len) {
- smart_str_appendl(&ctx->result, ctx->buf.c, ctx->buf.len);
+ if (ctx->buf.s) {
+ smart_str_appendl(&ctx->result, ctx->buf.s->val, ctx->buf.s->len);
smart_str_appendl(&ctx->result, output, output_len);
- *handled_output = ctx->result.c;
- *handled_output_len = ctx->buf.len + output_len;
+ *handled_output = estrndup(ctx->result.s->val, ctx->result.s->len);
+ *handled_output_len = ctx->buf.s->len + output_len;
- ctx->result.c = NULL;
- ctx->result.len = 0;
smart_str_free(&ctx->buf);
+ smart_str_free(&ctx->result);
} else {
*handled_output = estrndup(output, *handled_output_len = output_len);
}
}
- if (BG(url_adapt_state_ex).url_app.len != 0) {
+ if (BG(url_adapt_state_ex).url_app.s->len != 0) {
smart_str_appends(&BG(url_adapt_state_ex).url_app, PG(arg_separator).output);
}
PHPAPI int php_url_scanner_reset_vars(TSRMLS_D)
{
- BG(url_adapt_state_ex).form_app.len = 0;
- BG(url_adapt_state_ex).url_app.len = 0;
+ BG(url_adapt_state_ex).form_app.s->len = 0;
+ BG(url_adapt_state_ex).url_app.s->len = 0;
return SUCCESS;
}
{
BG(url_adapt_state_ex).tags = NULL;
- BG(url_adapt_state_ex).form_app.c = BG(url_adapt_state_ex).url_app.c = 0;
- BG(url_adapt_state_ex).form_app.len = BG(url_adapt_state_ex).url_app.len = 0;
+ BG(url_adapt_state_ex).form_app.s = BG(url_adapt_state_ex).url_app.s = NULL;
REGISTER_INI_ENTRIES();
return SUCCESS;
{
smart_str buf = {0};
php_var_export_ex(struc, level, &buf TSRMLS_CC);
- smart_str_0 (&buf);
- PHPWRITE(buf.c, buf.len);
+ smart_str_0(&buf);
+ PHPWRITE(buf.s->val, buf.s->len);
smart_str_free(&buf);
}
/* }}} */
smart_str_0 (&buf);
if (return_output) {
- RETVAL_STRINGL(buf.c, buf.len);
+ RETURN_STR(buf.s);
} else {
- PHPWRITE(buf.c, buf.len);
+ PHPWRITE(buf.s->val, buf.s->len);
+ smart_str_free(&buf);
}
- smart_str_free(&buf);
}
/* }}} */
RETURN_FALSE;
}
- if (buf.c) {
-//??? RETURN_STRINGL(buf.c, buf.len, 0);
- RETURN_STRINGL(buf.c, buf.len);
+ if (buf.s) {
+ RETURN_STR(buf.s);
} else {
RETURN_NULL();
}
{
uint64_t max_vars = PG(max_input_vars);
- vars->ptr = vars->str.c;
- vars->end = vars->str.c + vars->str.len;
+ vars->ptr = vars->str.s->val;
+ vars->end = vars->str.s->val + vars->str.s->len;
while (add_post_var(arr, vars, eof TSRMLS_CC)) {
if (++vars->cnt > max_vars) {
php_error_docref(NULL TSRMLS_CC, E_WARNING,
}
if (!eof) {
- memmove(vars->str.c, vars->ptr, vars->str.len = vars->end - vars->ptr);
+ memmove(vars->str.s->val, vars->ptr, vars->str.s->len = vars->end - vars->ptr);
}
return SUCCESS;
}
smart_str_appendl(&post_data.str, buf, len);
if (SUCCESS != add_post_vars(arr, &post_data, 0 TSRMLS_CC)) {
- if (post_data.str.c) {
- efree(post_data.str.c);
+ if (post_data.str.s) {
+ smart_str_free(&post_data.str);
}
return;
}
}
add_post_vars(arr, &post_data, 1 TSRMLS_CC);
- if (post_data.str.c) {
- efree(post_data.str.c);
+ if (post_data.str.s) {
+ smart_str_free(&post_data.str);
}
}
}
* Macro that does padding. The padding is done by printing
* the character ch.
*/
-#define PAD(xbuf, count, ch) do { \
- if ((count) > 0) { \
- size_t newlen; \
- smart_str_alloc(xbuf, (count), 0); \
- memset(xbuf->c + xbuf->len, ch, (count)); \
- xbuf->len += (count); \
- } \
+#define PAD(xbuf, count, ch) do { \
+ if ((count) > 0) { \
+ size_t newlen; \
+ smart_str_alloc(xbuf, (count), 0); \
+ memset(xbuf->s->val + xbuf->s->len, ch, (count)); \
+ xbuf->s->len += (count); \
+ } \
} while (0)
#define NUM(c) (c - '0')
case 'n':
- *(va_arg(ap, int *)) = xbuf->len;
+ *(va_arg(ap, int *)) = xbuf->s->len;
goto skip_output;
/*
PHPAPI int vspprintf(char **pbuf, size_t max_len, const char *format, va_list ap) /* {{{ */
{
smart_str xbuf = {0};
+ int result;
xbuf_format_converter(&xbuf, format, ap);
- if (max_len && xbuf.len > max_len) {
- xbuf.len = max_len;
+ if (max_len && xbuf.s->len > max_len) {
+ xbuf.s->len = max_len;
}
smart_str_0(&xbuf);
- *pbuf = xbuf.c;
+ *pbuf = estrndup(xbuf.s->val, xbuf.s->len);
+ result = xbuf.s->len;
+ smart_str_free(&xbuf);
- return xbuf.len;
+ return result;
}
/* }}} */
}
smart_str_appendl(&buffer, "\r\n", 2);
- php_cli_server_client_send_through(client, buffer.c, buffer.len);
+ php_cli_server_client_send_through(client, buffer.s->val, buffer.s->len);
smart_str_free(&buffer);
return SAPI_HEADER_SENT_SUCCESSFULLY;
php_cli_server_chunk *chunk;
smart_str buffer = { 0 };
append_http_status_line(&buffer, client->request.protocol_version, status, 1);
- if (!buffer.c) {
+ if (!buffer.s) {
/* out of memory */
goto fail;
}
smart_str_appendl_ex(&buffer, "\r\n", 2, 1);
smart_str_appendl_ex(&buffer, "\r\n", 2, 1);
- chunk = php_cli_server_chunk_heap_new(buffer.c, buffer.c, buffer.len);
+ chunk = php_cli_server_chunk_heap_new(buffer.s->val, buffer.s->val, buffer.s->len);
if (!chunk) {
smart_str_free_ex(&buffer, 1);
goto fail;
}
append_http_status_line(&buffer, client->request.protocol_version, status, 1);
- if (!buffer.c) {
+ if (!buffer.s) {
/* out of memory */
php_cli_server_log_response(client, 500, NULL TSRMLS_CC);
return FAILURE;
smart_str_append_generic_ex(&buffer, client->request.sb.st_size, 1, size_t, _unsigned);
smart_str_appendl_ex(&buffer, "\r\n", 2, 1);
smart_str_appendl_ex(&buffer, "\r\n", 2, 1);
- chunk = php_cli_server_chunk_heap_new(buffer.c, buffer.c, buffer.len);
+ chunk = php_cli_server_chunk_heap_new(buffer.s->val, buffer.s->val, buffer.s->len);
if (!chunk) {
smart_str_free_ex(&buffer, 1);
php_cli_server_log_response(client, 500, NULL TSRMLS_CC);