Lines Matching refs:buffer

66 static status_t append_data(net_buffer *buffer, const void *data, size_t size);
95 net_buffer_private *buffer = new(nothrow) net_buffer_private;
96 if (buffer == NULL)
99 TRACE(("%ld: create buffer %p\n", find_thread(NULL), buffer));
101 buffer->data = NULL;
102 new(&buffer->ancillary_data) ancillary_data_list;
104 buffer->source = (sockaddr *)&buffer->storage.source;
105 buffer->destination = (sockaddr *)&buffer->storage.destination;
107 buffer->storage.source.ss_len = 0;
108 buffer->storage.destination.ss_len = 0;
110 buffer->interface = NULL;
111 buffer->offset = 0;
112 buffer->flags = 0;
113 buffer->size = 0;
115 buffer->type = -1;
117 return buffer;
124 net_buffer_private *buffer = (net_buffer_private *)_buffer;
126 free(buffer->data);
127 delete buffer;
131 /*! Creates a duplicate of the \a buffer. The new buffer does not share internal
137 net_buffer_private *buffer = (net_buffer_private *)_buffer;
143 if (append_data(duplicate, buffer->data, buffer->size) != B_OK) {
148 copy_metadata(duplicate, buffer);
154 /*! Clones the buffer by grabbing another reference to the underlying data.
157 If \a shareFreeSpace is \c true, the cloned buffer may claim the free
158 space in the original buffer as the original buffer can still do. If you
170 Split the buffer at offset, the header data
171 is returned as new buffer.
182 net_buffer_private* buffer = (net_buffer_private*)create_buffer(0);
183 if (buffer == NULL)
190 free_buffer(buffer);
196 // truncate original data and move it to the new buffer
197 buffer->data = (uint8*)realloc(from->data, offset);
198 buffer->size = offset;
200 // the old buffer gets the newly allocated tail data
204 return buffer;
209 Merges the second buffer with the first. If \a after is \c true, the
210 second buffer's contents will be appended to the first ones, else they
212 The second buffer will be freed if this function succeeds.
217 net_buffer_private *buffer = (net_buffer_private *)_buffer;
223 // the simple case: just append the second buffer
224 status_t error = append_data(buffer, with->data, with->size);
228 // append buffer to the second buffer, then switch the data
229 status_t error = append_data(with, buffer->data, buffer->size);
233 free(buffer->data);
234 buffer->data = with->data;
235 buffer->size = with->size;
253 net_buffer_private *buffer = (net_buffer_private *)_buffer;
255 if (offset + size > buffer->size)
260 memcpy(buffer->data + offset, data, size);
269 net_buffer_private *buffer = (net_buffer_private *)_buffer;
271 if (offset + size > buffer->size)
276 memcpy(data, buffer->data + offset, size);
288 net_buffer_private *buffer = (net_buffer_private *)_buffer;
290 uint8* newData = (uint8*)malloc(buffer->size + size);
294 memcpy(newData + size, buffer->data, buffer->size);
296 free(buffer->data);
297 buffer->data = newData;
298 buffer->size += size;
301 *_contiguousBuffer = buffer->data;
308 prepend_data(net_buffer *buffer, const void *data, size_t size)
310 status_t status = prepend_size(buffer, size, NULL);
314 write_data(buffer, 0, data, size);
326 net_buffer_private *buffer = (net_buffer_private *)_buffer;
328 uint8* newData = (uint8*)realloc(buffer->data, buffer->size + size);
333 *_contiguousBuffer = newData + buffer->size;
335 buffer->data = newData;
336 buffer->size += size;
343 append_data(net_buffer *buffer, const void *data, size_t size)
345 size_t used = buffer->size;
347 status_t status = append_size(buffer, size, NULL);
351 write_data(buffer, used, data, size);
358 Removes bytes from the beginning of the buffer.
363 net_buffer_private *buffer = (net_buffer_private *)_buffer;
365 if (bytes > buffer->size)
370 buffer->size -= bytes;
371 memmove(buffer->data, buffer->data + bytes, buffer->size);
372 buffer->data = (uint8*)realloc(buffer->data, buffer->size);
379 Removes bytes from the end of the buffer.
382 remove_trailer(net_buffer *buffer, size_t bytes)
384 return trim_data(buffer, buffer->size - bytes);
389 Trims the buffer to the specified \a newSize by removing space from
390 the end of the buffer.
395 net_buffer_private *buffer = (net_buffer_private *)_buffer;
397 if (newSize > buffer->size)
399 if (newSize == buffer->size)
402 buffer->data = (uint8*)realloc(buffer->data, newSize);
403 buffer->size = newSize;
410 Appends data coming from buffer \a source to the buffer \a buffer. It only
420 net_buffer_private *buffer = (net_buffer_private *)_buffer;
426 return append_data(buffer, source->data + offset, bytes);
431 Attaches ancillary data to the given buffer. The data are completely
432 orthogonal to the data the buffer stores.
434 \param buffer The buffer.
438 data as parameter when the buffer is destroyed.
448 // ancillary data in the buffer.
449 net_buffer_private *buffer = (net_buffer_private *)_buffer;
458 // allocate buffer
468 buffer->ancillary_data.Add(ancillaryData);
481 Detaches ancillary data from the given buffer. The associated memory is
486 \param buffer The buffer.
496 net_buffer_private *buffer = (net_buffer_private *)_buffer;
503 buffer->ancillary_data.Remove(ancillaryData);
517 Moves all ancillary data from buffer \c from to the end of the list of
518 ancillary data of buffer \c to. Note, that this is the only function that
519 transfers or copies ancillary data from one buffer to another.
521 \param from The buffer from which to remove the ancillary data.
522 \param to The buffer to which to add teh ancillary data.
551 \param buffer The buffer.
556 \return A pointer to the next ancillary data in the buffer. \c NULL after
563 net_buffer_private *buffer = (net_buffer_private *)_buffer;
568 ancillaryData = buffer->ancillary_data.Head();
571 ancillaryData = buffer->ancillary_data.GetNext(ancillaryData);
585 Tries to directly access the requested space in the buffer.
589 \return B_BAD_VALUE if the offset is outside of the buffer's bounds.
590 \return B_ERROR in case the buffer is not contiguous at that location.
596 net_buffer_private *buffer = (net_buffer_private *)_buffer;
598 if (offset + size > buffer->size)
601 *_contiguousBuffer = buffer->data + offset;
609 net_buffer_private *buffer = (net_buffer_private *)_buffer;
611 if (offset + size > buffer->size || size == 0)
614 uint16 sum = compute_checksum(buffer->data + offset, size);
630 net_buffer_private *buffer = (net_buffer_private *)_buffer;
632 iovecs[0].iov_base = buffer->data;
633 iovecs[0].iov_len = buffer->size;
647 swap_addresses(net_buffer *buffer)
649 std::swap(buffer->source, buffer->destination);
656 net_buffer_private *buffer = (net_buffer_private *)_buffer;
658 dprintf("buffer %p, size %ld, data: %p\n", buffer, buffer->size,
659 buffer->data);
660 dump_block((char*)buffer->data, min_c(buffer->size, 32), " ");