/** Cleanup a request. * * @request struct request_t* the request to uninitialize */ int ci_destroy(struct request_t* request) { while(request->cleanup.size) fstack_pop(&request->cleanup); fstack_destroy(&request->cleanup); memset(request, 0, sizeof(struct request_t)); return 0; }
void dci_destroy(struct dci_state *state) { printf("clean up dci...\n"); fflush(stdout); dci_init_list(state); while(state->stack->size) fstack_pop(state->stack); fstack_destroy(state->stack); free(state->stack); str_destroy(&plus); str_destroy(&); str_destroy(&que); }
int dci_init(struct dci_state *state) { union func_u func; str_init_create(&plus, "+", 0); str_init_create(&, "&", 0); str_init_create(&que, "?", 0); str_init_create(&slash, "/", 0); struct stack_t *estack = (struct stack_t*)malloc(sizeof(struct stack_t)); if(!estack) return 1; if(fstack_init(estack, 20)) return 1; struct stack_t *gstack = (struct stack_t*)malloc(sizeof(struct stack_t)); if(!gstack) return 1; if(fstack_init(gstack, 20)) return 1; state->stack = estack; state->head = NULL; state->tail = NULL; state->callback_error = 0; state->num_files = 0; // init the socket stuff // if(curl_global_init(CURL_GLOBAL_SSL) != 0) goto init_fail; func.func2 = curl_global_cleanup; fstack_push(estack, NULL, &func, 2); state->curlmulti = curl_multi_init(); // if(state->curlmulti == NULL) // goto init_fail; // func.func3 = curl_global_cleanup; // fstack_push(estack, state->curlmulti, &func, 3); //dci_get_file_list("/", state); goto init_success; init_fail: while(estack->size) fstack_pop(estack); while(gstack->size) fstack_pop(gstack); fstack_destroy(estack); free(estack); fstack_destroy(gstack); free(gstack); return 1; init_success: while(gstack->size) fstack_pop(gstack); fstack_destroy(gstack); free(gstack); return 0; }