static int readfiletofile(const char* path, const char* suffix, FILE* stream, off_t* sizep) { int stat = OC_NOERR; OCbytes* packet = ocbytesnew(); size_t len; /* check for leading file:/// */ if(ocstrncmp(path,"file:///",8)==0) path += 7; /* assume absolute path*/ stat = readfile(path,suffix,packet); #ifdef OCDEBUG fprintf(stderr,"readfiletofile: packet.size=%lu\n", (unsigned long)ocbyteslength(packet)); #endif if(stat != OC_NOERR) goto unwind; len = oclistlength(packet); if(stat == OC_NOERR) { size_t written; fseek(stream,0,SEEK_SET); written = fwrite(ocbytescontents(packet),1,len,stream); if(written != len) { #ifdef OCDEBUG fprintf(stderr,"readfiletofile: written!=length: %lu :: %lu\n", (unsigned long)written,(unsigned long)len); #endif stat = OC_EIO; } } if(sizep != NULL) *sizep = len; unwind: ocbytesfree(packet); return OCTHROW(stat); }
void occlose(OCstate* state) { unsigned int i; if(state == NULL) return; /* Warning: ocfreeroot will attempt to remove the root from state->trees */ /* Ok in this case because we are popping the root out of state->trees */ for(i=0;i<oclistlength(state->trees);i++) { OCnode* root = (OCnode*)oclistpop(state->trees); ocroot_free(root); } oclistfree(state->trees); ocurifree(state->uri); ocbytesfree(state->packet); ocfree(state->error.code); ocfree(state->error.message); ocfree(state->curlflags.useragent); if(state->curlflags.cookiejar) { unlink(state->curlflags.cookiejar); ocfree(state->curlflags.cookiejar); } ocfree(state->ssl.certificate); ocfree(state->ssl.key); ocfree(state->ssl.keypasswd); ocfree(state->ssl.cainfo); ocfree(state->ssl.capath); ocfree(state->proxy.host); ocfree(state->creds.username); ocfree(state->creds.password); if(state->curl != NULL) occurlclose(state->curl); ocfree(state); }
void occlose(OCstate* state) { unsigned int i; if(state == NULL) return; /* Warning: ocfreeroot will attempt to remove the root from state->trees */ /* Ok in this case because we are popping the root out of state->trees */ for(i=0;i<oclistlength(state->trees);i++) { OCnode* root = (OCnode*)oclistpop(state->trees); ocfreeroot(root); } oclistfree(state->trees); dapurlclear(&state->url); ocbytesfree(state->packet); ocfree(state->error.code); ocfree(state->error.message); if(state->contentlist != NULL) { struct OCcontent* next; struct OCcontent* curr = state->contentlist; while(curr != NULL) { next = curr->next; ocfree(curr); curr = next; } } if(state->curl != NULL) occurlclose(state->curl); if(state->clientparams != NULL) ocparamfree(state->clientparams); ocfree(state); }
void daplexcleanup(DAPlexstate** lexstatep) { DAPlexstate* lexstate = *lexstatep; if(lexstate == NULL) return; if(lexstate->input != NULL) ocfree(lexstate->input); if(lexstate->reclaim != NULL) { while(oclistlength(lexstate->reclaim) > 0) { char* word = (char*)oclistpop(lexstate->reclaim); if(word) free(word); } oclistfree(lexstate->reclaim); } ocbytesfree(lexstate->yytext); free(lexstate); *lexstatep = NULL; }
static int readfiletofile(char* path, char* suffix, FILE* stream, unsigned long* sizep) { int stat; OCbytes* packet = ocbytesnew(); size_t len; /* check for leading file:/// */ if(strncmp(path,"file:///",8)==0) path += 7; /* assume absolute path*/ stat = readfile(path,suffix,packet); if(stat != OC_NOERR) goto unwind; len = oclistlength(packet); if(stat == OC_NOERR) { size_t written; fseek(stream,0,SEEK_SET); written = fwrite(ocbytescontents(packet),1,len,stream); if(written != len) stat = OC_EIO; } if(sizep != NULL) *sizep = len; unwind: ocbytesfree(packet); return THROW(stat); }