| 67 | } |
| 68 | |
| 69 | ProcedureCtx *Proc_Get(const char *proc_name) { |
| 70 | if(!__procedures) return NULL; |
| 71 | size_t proc_name_len = strlen(proc_name) + 1; |
| 72 | char proc_name_lowercase [proc_name_len]; |
| 73 | str_tolower_ascii(proc_name, proc_name_lowercase, &proc_name_len); |
| 74 | ProcGenerator gen = raxFind(__procedures, (unsigned char *)proc_name_lowercase, |
| 75 | proc_name_len); |
| 76 | if(gen == raxNotFound) return NULL; |
| 77 | ProcedureCtx *ctx = gen(); |
| 78 | |
| 79 | // Set procedure state to not initialized. |
| 80 | ctx->state = PROCEDURE_NOT_INIT; |
| 81 | return ctx; |
| 82 | } |
| 83 | |
| 84 | ProcedureResult Proc_Invoke(ProcedureCtx *proc, const SIValue *args, const char **yield) { |
| 85 | ASSERT(proc != NULL); |
no test coverage detected