summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_tstr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nxt_tstr.c')
-rw-r--r--src/nxt_tstr.c81
1 files changed, 27 insertions, 54 deletions
diff --git a/src/nxt_tstr.c b/src/nxt_tstr.c
index edf6860a..50df4c47 100644
--- a/src/nxt_tstr.c
+++ b/src/nxt_tstr.c
@@ -36,14 +36,8 @@ struct nxt_tstr_query_s {
nxt_tstr_state_t *state;
nxt_tstr_cache_t *cache;
- nxt_uint_t waiting;
- nxt_uint_t failed; /* 1 bit */
-
void *ctx;
void *data;
-
- nxt_work_handler_t ready;
- nxt_work_handler_t error;
};
@@ -81,7 +75,7 @@ nxt_tstr_state_new(nxt_mp_t *mp, nxt_bool_t test)
nxt_tstr_t *
-nxt_tstr_compile(nxt_tstr_state_t *state, nxt_str_t *str,
+nxt_tstr_compile(nxt_tstr_state_t *state, const nxt_str_t *str,
nxt_tstr_flags_t flags)
{
u_char *p;
@@ -159,7 +153,7 @@ nxt_tstr_test(nxt_tstr_state_t *state, nxt_str_t *str, u_char *error)
#else
nxt_sprintf(error, error + NXT_MAX_ERROR_STR,
"Unit is built without support of njs: "
- "\"--njs\" ./configure option is missing.");
+ "\"--njs\" ./configure option is missing.%Z");
return NXT_ERROR;
#endif
@@ -202,6 +196,26 @@ nxt_tstr_state_release(nxt_tstr_state_t *state)
}
+nxt_int_t
+nxt_tstr_cond_compile(nxt_tstr_state_t *state, nxt_str_t *str,
+ nxt_tstr_cond_t *cond)
+{
+ if (str->length > 0 && str->start[0] == '!') {
+ cond->negate = 1;
+
+ str->start++;
+ str->length--;
+ }
+
+ cond->expr = nxt_tstr_compile(state, str, 0);
+ if (nxt_slow_path(cond->expr == NULL)) {
+ return NXT_ERROR;
+ }
+
+ return NXT_OK;
+}
+
+
nxt_bool_t
nxt_tstr_is_const(nxt_tstr_t *tstr)
{
@@ -246,7 +260,7 @@ nxt_tstr_query_init(nxt_tstr_query_t **query_p, nxt_tstr_state_t *state,
}
-void
+nxt_int_t
nxt_tstr_query(nxt_task_t *task, nxt_tstr_query_t *query, nxt_tstr_t *tstr,
nxt_str_t *val)
{
@@ -254,11 +268,7 @@ nxt_tstr_query(nxt_task_t *task, nxt_tstr_query_t *query, nxt_tstr_t *tstr,
if (nxt_tstr_is_const(tstr)) {
nxt_tstr_str(tstr, val);
- return;
- }
-
- if (nxt_slow_path(query->failed)) {
- return;
+ return NXT_OK;
}
if (tstr->type == NXT_TSTR_VAR) {
@@ -267,8 +277,7 @@ nxt_tstr_query(nxt_task_t *task, nxt_tstr_query_t *query, nxt_tstr_t *tstr,
tstr->flags & NXT_TSTR_LOGGING);
if (nxt_slow_path(ret != NXT_OK)) {
- query->failed = 1;
- return;
+ return NXT_ERROR;
}
} else {
@@ -277,8 +286,7 @@ nxt_tstr_query(nxt_task_t *task, nxt_tstr_query_t *query, nxt_tstr_t *tstr,
tstr->u.js, val, query->ctx);
if (nxt_slow_path(ret != NXT_OK)) {
- query->failed = 1;
- return;
+ return NXT_ERROR;
}
#endif
}
@@ -294,43 +302,8 @@ nxt_tstr_query(nxt_task_t *task, nxt_tstr_query_t *query, nxt_tstr_t *tstr,
nxt_debug(task, "tstr query: \"%V\", result: \"%V\"", &str, val);
#endif
-}
-
-
-nxt_bool_t
-nxt_tstr_query_failed(nxt_tstr_query_t *query)
-{
- return query->failed;
-}
-
-void
-nxt_tstr_query_resolve(nxt_task_t *task, nxt_tstr_query_t *query, void *data,
- nxt_work_handler_t ready, nxt_work_handler_t error)
-{
- query->data = data;
- query->ready = ready;
- query->error = error;
-
- if (query->waiting == 0) {
- nxt_work_queue_add(&task->thread->engine->fast_work_queue,
- query->failed ? query->error : query->ready,
- task, query->ctx, query->data);
- }
-}
-
-
-void
-nxt_tstr_query_handle(nxt_task_t *task, nxt_tstr_query_t *query,
- nxt_bool_t failed)
-{
- query->failed |= failed;
-
- if (--query->waiting == 0) {
- nxt_work_queue_add(&task->thread->engine->fast_work_queue,
- query->failed ? query->error : query->ready,
- task, query->ctx, query->data);
- }
+ return NXT_OK;
}