X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=visor;a=blobdiff_plain;f=libvisor%2Fsrc%2Fvisor.c;h=948968051348a81ded53c13d11d7fcaa1b02b444;hp=1f9804fc0829ad57f48e3e8fca1e28b65667c9f3;hb=7357e1f153279a9d84d8671f02fa146575d4935e;hpb=24f7b6535c6c25040f4a2f2c655a913c177531eb diff --git a/libvisor/src/visor.c b/libvisor/src/visor.c index 1f9804f..9489680 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) { @@ -371,14 +372,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; } }