version 1.1, 2000/12/03 22:41:04
|
version 1.2, 2001/03/29 23:12:01
|
Line 88 int ring_write(ringbuffy *rbuf, const ch
|
Line 88 int ring_write(ringbuffy *rbuf, const ch
|
} |
} |
|
|
|
|
|
int ring_writek(ringbuffy *rbuf, const char *data, int count) |
|
{ |
|
|
|
long diff, free, pos, rest; |
|
|
|
|
|
if (count <=0 || !rbuf->buffy) return 0; |
|
pos = rbuf->write_pos; |
|
rest = rbuf->size - pos; |
|
diff = rbuf->read_pos - pos; |
|
free = (diff > 0) ? diff-4 : rbuf->size+diff-4; |
|
|
|
if ( free <= 0 ) return 0; |
|
if ( free < count ) count = free; |
|
|
|
if (count >= rest){ |
|
if(memcpy(rbuf->buffy+pos, data, rest)) |
|
return -EFAULT; |
|
if (count - rest) |
|
if(memcpy(rbuf->buffy, data+rest, |
|
count - rest)) |
|
return -EFAULT; |
|
rbuf->write_pos = count - rest; |
|
} else { |
|
memcpy(rbuf->buffy+pos, data, count); |
|
rbuf->write_pos += count; |
|
} |
|
|
|
return count; |
|
} |
|
|
|
|
|
|
|
|
int ring_read(ringbuffy *rbuf, char *data, int count) |
int ring_read(ringbuffy *rbuf, char *data, int count) |
{ |
{ |
Line 147 int ring_read_direct(ringbuffy *rbuf, in
|
Line 180 int ring_read_direct(ringbuffy *rbuf, in
|
|
|
|
|
long ring_read_rest(ringbuffy *rbuf){ |
long ring_read_rest(ringbuffy *rbuf){ |
long diff, free, pos, rest; |
long diff, free, pos; |
|
|
if (!rbuf->buffy) return 0; |
if (!rbuf->buffy) return 0; |
pos = rbuf->read_pos; |
pos = rbuf->read_pos; |
rest = rbuf->size - pos; |
|
diff = rbuf->write_pos - pos; |
diff = rbuf->write_pos - pos; |
free = (diff >= 0) ? diff : rbuf->size+diff; |
free = (diff >= 0) ? diff : rbuf->size+diff; |
|
|
Line 159 long ring_read_rest(ringbuffy *rbuf){
|
Line 191 long ring_read_rest(ringbuffy *rbuf){
|
} |
} |
|
|
long ring_write_rest(ringbuffy *rbuf){ |
long ring_write_rest(ringbuffy *rbuf){ |
long diff, free, pos, rest; |
long diff, free, pos; |
|
|
if (!rbuf->buffy) return 0; |
if (!rbuf->buffy) return 0; |
pos = rbuf->write_pos; |
pos = rbuf->write_pos; |
rest = rbuf->size - pos; |
|
diff = rbuf->read_pos - pos; |
diff = rbuf->read_pos - pos; |
free = (diff > 0) ? diff-4 : rbuf->size+diff-4; |
free = (diff > 0) ? diff-4 : rbuf->size+diff-4; |
|
|