static ssize_t _read_pktbuf ( timeshift_file_t *tsf, int fd, pktbuf_t **pktbuf ) { ssize_t r, cnt = 0; size_t sz; /* Size */ r = _read_buf(tsf, fd, &sz, sizeof(sz)); if (r < 0) return -1; if (r != sizeof(sz)) return 0; cnt += r; /* Empty And Sanity Check */ if (!sz || sz > 1024 * 1024) { *pktbuf = NULL; return cnt; } /* Data */ *pktbuf = pktbuf_alloc(NULL, sz); r = _read_buf(tsf, fd, pktbuf_ptr(*pktbuf), sz); if (r != sz) { pktbuf_destroy(*pktbuf); *pktbuf = NULL; return r < 0 ? -1 : 0; } cnt += r; return cnt; }
int main() { static rtp_packet *pp; static pktbuf_t *pb; int32_t i, j, n,ts; if (pktbuf_create(&pb, PKTBUF_SIZE) == 0) { printf("Failed to create buffer\n"); exit(-1); } xmemchk(); for(i = 0; i < 100000; i++) { n = lrand48() % 16; for(j = 0; j <= n; j++) { pp = (rtp_packet*)xmalloc(sizeof(rtp_packet)); pp->ts = ts ++; add_thing(pb, pp); } n = lrand48() % 16; for(j = 0; j < n; j++) { remove_thing(pb); } } pktbuf_destroy(&pb); xmemdmp(); printf("Okay\n"); return 0; }