| 297 | } |
| 298 | |
| 299 | void * |
| 300 | SDL_ReserveSpaceInDataQueue(SDL_DataQueue *queue, const size_t len) |
| 301 | { |
| 302 | SDL_DataQueuePacket *packet; |
| 303 | |
| 304 | if (!queue) { |
| 305 | SDL_InvalidParamError("queue"); |
| 306 | return NULL; |
| 307 | } else if (len == 0) { |
| 308 | SDL_InvalidParamError("len"); |
| 309 | return NULL; |
| 310 | } else if (len > queue->packet_size) { |
| 311 | SDL_SetError("len is larger than packet size"); |
| 312 | return NULL; |
| 313 | } |
| 314 | |
| 315 | packet = queue->head; |
| 316 | if (packet) { |
| 317 | const size_t avail = queue->packet_size - packet->datalen; |
| 318 | if (len <= avail) { /* we can use the space at end of this packet. */ |
| 319 | void *retval = packet->data + packet->datalen; |
| 320 | packet->datalen += len; |
| 321 | queue->queued_bytes += len; |
| 322 | return retval; |
| 323 | } |
| 324 | } |
| 325 | |
| 326 | /* Need a fresh packet. */ |
| 327 | packet = AllocateDataQueuePacket(queue); |
| 328 | if (!packet) { |
| 329 | SDL_OutOfMemory(); |
| 330 | return NULL; |
| 331 | } |
| 332 | |
| 333 | packet->datalen = len; |
| 334 | queue->queued_bytes += len; |
| 335 | return packet->data; |
| 336 | } |
| 337 | |
| 338 | /* vi: set ts=4 sw=4 expandtab: */ |
| 339 |
nothing calls this directly
no test coverage detected