Exemple #1
0
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;
}
Exemple #2
0
/*
 * 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;
}
Exemple #3
0
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
	}