static double eval_fact(const char *buf, int *pos) /* fact = item^fact | item */ { double rv = 0.0, lhs, rhs; Token tok; DB(printf("-- eval_fact(\"%s\", &pos=%p pos=%d)\n", buf+*pos, pos, *pos)); lhs = eval_item(buf, pos); if(G_eval_error) return rv; DB(printf("-- fact lhs=%f\n", lhs)); tok = pull_token(buf, pos); if(G_eval_error) return rv; DB(printf("-- fact token type '%c' = ", tok.type)); switch(tok.type) { case '\0': DB(printf("END OF BUFFER\n")); rv = lhs; break; case '^': /* exponentiation */ rhs = eval_fact(buf, pos); DB(printf("%f^%f", lhs, rhs)); if(G_eval_error) return rv; rv = pow(lhs, rhs); DB(printf("=%f\n", rv)); break; default: DB(printf("PUSHBACK\n")); push_token(tok); rv = lhs; } DB(printf("-- fact rv=%f\n", rv)); return rv; }
static oval_result_t eval_check_state(struct oval_test *test, void **args) { struct oval_syschar_model *syschar_model; struct oval_result_item_iterator *ritems_itr; struct oresults item_ores; oval_result_t result; oval_check_t ste_check; oval_operator_t ste_opr; ste_check = oval_test_get_check(test); ste_opr = oval_test_get_state_operator(test); syschar_model = oval_result_system_get_syschar_model(SYSTEM); ores_clear(&item_ores); ritems_itr = oval_result_test_get_items(TEST); while (oval_result_item_iterator_has_more(ritems_itr)) { struct oval_result_item *ritem; struct oval_sysitem *item; oval_syschar_status_t item_status; struct oresults ste_ores; struct oval_state_iterator *ste_itr; oval_result_t item_res; ritem = oval_result_item_iterator_next(ritems_itr); item = oval_result_item_get_sysitem(ritem); item_status = oval_sysitem_get_status(item); switch (item_status) { case SYSCHAR_STATUS_ERROR: case SYSCHAR_STATUS_NOT_COLLECTED: item_res = OVAL_RESULT_ERROR; ores_add_res(&item_ores, item_res); oval_result_item_set_result(ritem, item_res); continue; case SYSCHAR_STATUS_DOES_NOT_EXIST: item_res = OVAL_RESULT_FALSE; ores_add_res(&item_ores, item_res); oval_result_item_set_result(ritem, item_res); continue; default: break; } ores_clear(&ste_ores); ste_itr = oval_test_get_states(test); while (oval_state_iterator_has_more(ste_itr)) { struct oval_state *ste; oval_result_t ste_res; ste = oval_state_iterator_next(ste_itr); ste_res = eval_item(syschar_model, item, ste); ores_add_res(&ste_ores, ste_res); } oval_state_iterator_free(ste_itr); item_res = ores_get_result_byopr(&ste_ores, ste_opr); ores_add_res(&item_ores, item_res); oval_result_item_set_result(ritem, item_res); } oval_result_item_iterator_free(ritems_itr); result = ores_get_result_bychk(&item_ores, ste_check); return result; }