shithub: mcfs

ref: 74533c8ff1ab84ff0949d52c3726ccfcfc1bf76a
dir: mcfs/ass.c

View raw version
#include <u.h>
#include <libc.h>
#include <bio.h>
#include "common.h"
#include "packet.h"

static int
sanitize(uchar *s, int sz)
{
	uchar *o, *i;

	for(o = i = s; sz > 0;){
		if(*i == '\r'){
			if(sz <= 1 || i[1] != '\n')
				*o++ = '\n';
			i++;
		}else
			*o++ = *i++;
		sz--;
	}

	return o-s;
}

int
asspacket(Biobuf *out, Packetctx *ctx, Packet *p, int np, uvlong ts, int key)
{
	int i;

	USED(ts, key);
	if(ctx->frid == 0)
		Bwrite(out, ctx->codec.priv.data, sanitize(ctx->codec.priv.data, ctx->codec.priv.sz));
	for(i = 0; i < np; i++, p++){
		Bwrite(out, p->data, sanitize(p->data, p->sz));
		Bwrite(out, "\n", 1);
	}
	ctx->frid++;
	Bflush(out);

	return 0;
}