| 107 | } |
| 108 | |
| 109 | static void ringbuf_span(const struct log_book *log, |
| 110 | size_t start, size_t len, |
| 111 | void **buf1, size_t *buf1len, |
| 112 | void **buf2, size_t *buf2len) |
| 113 | { |
| 114 | size_t size = sizeof(log->ringbuf); |
| 115 | size_t off = start % size; |
| 116 | size_t first = size - off; |
| 117 | |
| 118 | assert(len <= size); |
| 119 | |
| 120 | if (first > len) |
| 121 | first = len; |
| 122 | |
| 123 | *buf1 = (void *)(log->ringbuf + off); |
| 124 | *buf1len = first; |
| 125 | |
| 126 | if (first == len) { |
| 127 | *buf2 = NULL; |
| 128 | *buf2len = 0; |
| 129 | } else { |
| 130 | *buf2 = (void *)log->ringbuf; |
| 131 | *buf2len = len - first; |
| 132 | } |
| 133 | } |
| 134 | |
| 135 | /* buf1/buf1len & buf2/buf2len -> dest/destlen */ |
| 136 | static size_t copy_from(void *dest, size_t destlen, |
no outgoing calls
no test coverage detected