示例#1
0
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(&timeshift_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;
}
示例#2
0
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;
}