On 30/03/2015 20:06, Bruno Albuquerque wrote:
Actually i think I was not clear about what I need. How would I apply
Err_trap for a higher level function? For example, a call to Indexer_new()
might fail under some circunstances and the program will exit due to that,
I would like for it not to exit immediately (for example, to be able to do
something else if the call fails). indexer_new() does nto accept a context
and it returns something when it works.

Try something like:

    typedef struct {
        Indexer *indexer;
    } my_context_t;

    static void
    try_create_indexer(void *arg) {
        my_context_t *ctx = (my_context_t*)arg;
        ctx->indexer = Indexer_new();
    }

    void
    other_code() {
        my_context_t ctx;
        Err *error = Err_trap(try_create_indexer, &ctx);

        if (error != NULL) {
            /* Handle error. */
        }
        else {
            /* Indexer created successfully. */
            Indexer *indexer = ctx.indexer;
        }
    }

C doesn't support closures, so such a verbose solution is necessary.

Nick

Reply via email to