Skip to content

Commit fc3da20

Browse files
committed
Fix SDL3 IOStream implementation
1 parent e23e2c5 commit fc3da20

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

src/FAudio_platform_sdl3.c

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -435,24 +435,21 @@ static size_t FAUDIOCALL FAudio_INTERNAL_ioread(
435435
size_t size,
436436
size_t count
437437
) {
438-
FAudioIOStream *io = (FAudioIOStream*) data;
439-
return SDL_ReadIO((SDL_IOStream*) io->data, dst, size * count);
438+
return SDL_ReadIO((SDL_IOStream*) data, dst, size * count);
440439
}
441440

442441
static int64_t FAUDIOCALL FAudio_INTERNAL_ioseek(
443442
void *data,
444443
int64_t offset,
445444
int whence
446445
) {
447-
FAudioIOStream *io = (FAudioIOStream*) data;
448-
return SDL_SeekIO((SDL_IOStream*) io->data, offset, whence);
446+
return SDL_SeekIO((SDL_IOStream*) data, offset, whence);
449447
}
450448

451449
static int FAUDIOCALL FAudio_INTERNAL_ioclose(
452450
void *data
453451
) {
454-
FAudioIOStream *io = (FAudioIOStream*) data;
455-
return SDL_CloseIO((SDL_IOStream*) io->data);
452+
return SDL_CloseIO((SDL_IOStream*) data);
456453
}
457454

458455
FAudioIOStream* FAudio_fopen(const char *path)
@@ -483,11 +480,26 @@ FAudioIOStream* FAudio_memopen(void *mem, int len)
483480
return io;
484481
}
485482

483+
/* FIXME: Expose IOStreamMemData as a property! */
484+
struct SDL_IOStream
485+
{
486+
SDL_IOStreamInterface iface;
487+
void *userdata;
488+
SDL_IOStatus status;
489+
SDL_PropertiesID props;
490+
};
491+
typedef struct IOStreamMemData
492+
{
493+
Uint8 *base;
494+
Uint8 *here;
495+
Uint8 *stop;
496+
} IOStreamMemData;
497+
486498
uint8_t* FAudio_memptr(FAudioIOStream *io, size_t offset)
487499
{
488-
SDL_PropertiesID props = SDL_GetIOProperties((SDL_IOStream*) io->data);
489-
FAudio_assert(SDL_HasProperty(props, SDL_PROP_IOSTREAM_DYNAMIC_MEMORY_POINTER));
490-
return (uint8_t*) SDL_GetPointerProperty(props, SDL_PROP_IOSTREAM_DYNAMIC_MEMORY_POINTER, NULL);
500+
SDL_IOStream *stream = (SDL_IOStream*) io->data;
501+
IOStreamMemData *memdata = (IOStreamMemData*) stream->userdata;
502+
return memdata->base + offset;
491503
}
492504

493505
void FAudio_close(FAudioIOStream *io)
@@ -504,15 +516,13 @@ static size_t FAUDIOCALL FAudio_INTERNAL_iowrite(
504516
size_t size,
505517
size_t count
506518
) {
507-
FAudioIOStream *io = (FAudioIOStream*) data;
508-
SDL_WriteIO((SDL_IOStream*) io->data, src, size * count);
519+
SDL_WriteIO((SDL_IOStream*) data, src, size * count);
509520
}
510521

511522
static size_t FAUDIOCALL FAudio_INTERNAL_iosize(
512523
void *data
513524
) {
514-
FAudioIOStream *io = (FAudioIOStream*) data;
515-
return SDL_GetIOSize((SDL_IOStream*) io->data;
525+
return SDL_GetIOSize((SDL_IOStream*) data);
516526
}
517527

518528
FAudioIOStreamOut* FAudio_fopen_out(const char *path, const char *mode)

0 commit comments

Comments
 (0)