X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=visor;a=blobdiff_plain;f=libvisor%2Fsrc%2Fvisor.c;h=12b5a02ab0b730b54a80395d7eb98763269ea3a2;hp=1f9804fc0829ad57f48e3e8fca1e28b65667c9f3;hb=94c867869ece77f27cf3c8b637d44e13d86f5b88;hpb=8cae8696beb7f1fa2dfc4e85be2fd5d9cf52a265 diff --git a/libvisor/src/visor.c b/libvisor/src/visor.c index 1f9804f..12b5a02 100644 --- a/libvisor/src/visor.c +++ b/libvisor/src/visor.c @@ -213,7 +213,7 @@ void split_span(struct vi_buffer *vb, struct vi_span *sp, vi_addr spoffs, unsign if(tail > sp) { /* we produced one or more zero-sized spans, drop them */ - num_move = vb->spans + vb->num_spans - (tail - sp); + num_move = vb->num_spans - (tail - sp); memmove(sp, tail, num_move * sizeof *sp); vb->num_spans -= num_move; } @@ -223,6 +223,7 @@ static int add_span(struct vi_buffer *vb, vi_addr at, int src, vi_addr start, un { struct visor *vi = vb->vi; struct vi_span *sp; + vi_addr spoffs; /* make sure we have space for at least two new spans (split + add) */ if(vb->num_spans + 1 >= vb->max_spans) { @@ -270,6 +271,7 @@ void vi_buf_reset(struct vi_buffer *vb) memset(vb, 0, sizeof *vb); vb->prev = prev; vb->next = next; + vb->vi = vi; } int vi_buf_read(struct vi_buffer *vb, const char *path) @@ -371,14 +373,16 @@ long vi_buf_size(struct vi_buffer *vb) return sz; } -struct vi_span *vi_buf_find_span(struct vi_buffer *vb, vi_addr at) +struct vi_span *vi_buf_find_span(struct vi_buffer *vb, vi_addr at, vi_addr *soffs) { int i; - long sz = 0; + long sz = 0, prev_sz; for(i=0; inum_spans; i++) { + prev_sz = sz; sz += vb->spans[i].size; if(sz > at) { + if(soffs) *soffs = at - prev_sz; return vb->spans + i; } }