int zigzag(dataptr dz) { int exit_status; int *thisstart, *lastend = dz->lparray[ZIGZAG_TIMES], minsamp; int oldminsec = 0; int init = 1; int *ziglistend = dz->lparray[ZIGZAG_TIMES] + dz->itemcnt; int outbuf_space = dz->buflen, samps_left; int obufno, splbufno; switch(dz->process) { case(ZIGZAG): obufno = 2; splbufno = 3; break; case(LOOP): case(SCRAMBLE): obufno = 1; splbufno = 2; break; default: sprintf(errstr,"Unknown case in zigzag()\n"); return(PROGRAM_ERROR); } if((exit_status = find_zzchunk(&thisstart,&lastend,ziglistend,&minsamp,dz))!=CONTINUE) { if(exit_status == FINISHED) exit_status = GOAL_FAILED; switch(dz->process) { case(ZIGZAG): sprintf(errstr,"WARNING: No valid zigzag found\n"); break; case(LOOP): sprintf(errstr,"WARNING: No valid loop found\n"); break; case(SCRAMBLE): sprintf(errstr,"WARNING: No valid scramble found\n"); break; } return(exit_status); } if((exit_status = adjust_buffer(minsamp,&oldminsec,init,dz))<0) return(exit_status); init = 0; while(lastend < ziglistend) { if((exit_status = do_zigzags(thisstart,lastend,&outbuf_space,obufno,splbufno,dz))<0) return(exit_status); if((exit_status = find_zzchunk(&thisstart,&lastend,ziglistend,&minsamp,dz))!=CONTINUE) { if(exit_status==FINISHED) break; else return(exit_status); } if((exit_status = adjust_buffer(minsamp,&oldminsec,init,dz))<0) return(exit_status); } samps_left = dz->sbufptr[obufno] - dz->sampbuf[obufno]; do_end_splice(samps_left,obufno,dz); if(samps_left > 0) return write_samps(dz->sampbuf[obufno],samps_left,dz); return FINISHED; }
/* * This function is an /enumerator/ in the terminology of iteratees * [http://okmij.org/ftp/Streams.html]. * * Return value: 0 - success, -1 - error. */ static int process_file(enum Codec_T ct, const char *inpath, struct Buffer *inbuf, const struct Repr_Format *repr) { debug_print("process_file: \"%s\"", inpath); FILE *f = NULL; if (streq(inpath, "-")) { f = stdin; } else if ((f = fopen(inpath, "rb")) == NULL) { error(0, errno, "%s", inpath); return -1; } if (adjust_buffer(inbuf, f) < 0) { error(0, errno, "%s", inpath); return -1; } int retval = -1; size_t filepos = 0; struct Stream str = STREAM_INIT; void *z = NULL; for (;;) { const size_t orig_size = read_block(inbuf->wptr, inbuf->size, f, &str); str.type = ((str.size = orig_size) == 0) ? S_EOF : S_CHUNK; str.data = inbuf->wptr; if (str.type == S_EOF && str.errmsg != NULL) { error_at_line(0, 0, inpath, filepos, "%s", str.errmsg); break; } const IterV indic = run_codec(ct, &z, &str, repr); assert(indic == IE_DONE || indic == IE_CONT); filepos += orig_size - str.size; if (indic == IE_CONT && str.errmsg != NULL) { error_at_line(0, 0, inpath, filepos, "%s", str.errmsg); break; } assert(str.size == 0); if (indic == IE_DONE) { retval = 0; break; } } if (!streq(inpath, "-")) retval |= fclose(f); free(str.errmsg); free_codec(ct, z); /* XXX malloc/free for each input file is not good */ return retval; }
void replace_extension(int ix, const char *filename, const char *extension) { char *last_dot = strrchr(filename, '.'); size_t filename_len; if (last_dot == NULL) { filename_len = strlen(filename); } else { filename_len = last_dot - filename; } adjust_buffer(filename_len + strlen(extension) + 2); memcpy(buffer, filename, filename_len); buffer[filename_len] = '.'; strcpy(buffer + filename_len + 1, extension); print_result(buffer); }
void HttpProtocol::OnBufferRealloced(char* oldbuf,char* newbuf) { #define adjust_buffer(x) if(oldbuf) { x = &newbuf[x - oldbuf]; } adjust_buffer(m_phStatusCode); adjust_buffer(m_phStatusText); adjust_buffer(m_phMethod); adjust_buffer(m_phUrl); adjust_buffer(m_phVersion); adjust_buffer(m_phHost); adjust_buffer(m_phCookie); adjust_buffer(m_phConnection); adjust_buffer(m_phAccept); adjust_buffer(m_phAcceptEncoding); adjust_buffer(m_phAcceptLanguage); adjust_buffer(m_phAcceptCharset); adjust_buffer(m_phContentType); adjust_buffer(m_phContentLength); adjust_buffer(m_phContentEndcoding); adjust_buffer(m_phAuthorization); adjust_buffer(m_phSetCookie); adjust_buffer(m_phCookie); adjust_buffer(m_phReferer); adjust_buffer(m_phLocation); adjust_buffer(m_phWWWAuthorization); #undef adjust_buffer }