MCPcopy Create free account
hub / github.com/RavEngine/RavEngine / SDL_WriteToDataQueue

Function SDL_WriteToDataQueue

deps/SDL2/src/SDL_dataqueue.c:174–226  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

172
173
174int
175SDL_WriteToDataQueue(SDL_DataQueue *queue, const void *_data, const size_t _len)
176{
177 size_t len = _len;
178 const Uint8 *data = (const Uint8 *) _data;
179 const size_t packet_size = queue ? queue->packet_size : 0;
180 SDL_DataQueuePacket *orighead;
181 SDL_DataQueuePacket *origtail;
182 size_t origlen;
183 size_t datalen;
184
185 if (!queue) {
186 return SDL_InvalidParamError("queue");
187 }
188
189 orighead = queue->head;
190 origtail = queue->tail;
191 origlen = origtail ? origtail->datalen : 0;
192
193 while (len > 0) {
194 SDL_DataQueuePacket *packet = queue->tail;
195 SDL_assert(!packet || (packet->datalen <= packet_size));
196 if (!packet || (packet->datalen >= packet_size)) {
197 /* tail packet missing or completely full; we need a new packet. */
198 packet = AllocateDataQueuePacket(queue);
199 if (!packet) {
200 /* uhoh, reset so we've queued nothing new, free what we can. */
201 if (!origtail) {
202 packet = queue->head; /* whole queue. */
203 } else {
204 packet = origtail->next; /* what we added to existing queue. */
205 origtail->next = NULL;
206 origtail->datalen = origlen;
207 }
208 queue->head = orighead;
209 queue->tail = origtail;
210 queue->pool = NULL;
211
212 SDL_FreeDataQueueList(packet); /* give back what we can. */
213 return SDL_OutOfMemory();
214 }
215 }
216
217 datalen = SDL_min(len, packet_size - packet->datalen);
218 SDL_memcpy(packet->data + packet->datalen, data, datalen);
219 data += datalen;
220 len -= datalen;
221 packet->datalen += datalen;
222 queue->queued_bytes += datalen;
223 }
224
225 return 0;
226}
227
228size_t
229SDL_PeekIntoDataQueue(SDL_DataQueue *queue, void *_buf, const size_t _len)

Callers 4

SDL_QueueAudioFunction · 0.85
SDL_AudioStreamPutFunction · 0.85

Calls 3

AllocateDataQueuePacketFunction · 0.85
SDL_FreeDataQueueListFunction · 0.85
SDL_memcpyFunction · 0.85

Tested by

no test coverage detected