static ssize_t _write ( timeshift_file_t *tsf, const void *buf, size_t count ) { uint8_t *ram; size_t alloc; ssize_t ret; if (tsf->ram) { pthread_mutex_lock(&tsf->ram_lock); if (tsf->ram_size < tsf->woff + count) { if (tsf->ram_size >= timeshift_conf.ram_segment_size) alloc = MAX(count, 64*1024); else alloc = MAX(count, 4*1024*1024); ram = realloc(tsf->ram, tsf->ram_size + alloc); if (ram == NULL) { tvhwarn(LS_TIMESHIFT, "RAM timeshift memalloc failed"); pthread_mutex_unlock(&tsf->ram_lock); return -1; } memoryinfo_append(×hift_memoryinfo_ram, alloc); tsf->ram = ram; tsf->ram_size += alloc; } memcpy(tsf->ram + tsf->woff, buf, count); tsf->woff += count; pthread_mutex_unlock(&tsf->ram_lock); return count; } ret = _write_fd(tsf->wfd, buf, count); if (ret > 0) tsf->woff += ret; return ret; }
pktbuf_t * pktbuf_append(pktbuf_t *pb, const void *data, size_t size) { void *ndata; if (pb == NULL) return pktbuf_alloc(data, size); ndata = realloc(pb->pb_data, pb->pb_size + size); if (ndata) { pb->pb_data = ndata; memcpy(ndata + pb->pb_size, data, size); pb->pb_size += size; memoryinfo_append(&pktbuf_memoryinfo, size); } return pb; }