cleanup: api tweaks

This commit is contained in:
bnnm 2024-07-18 23:50:45 +02:00
parent ea630eeead
commit b0962ea354
4 changed files with 21 additions and 12 deletions

View File

@ -268,8 +268,7 @@ static void test_libsf_size(libvgmstream_streamfile_t* libsf) {
static void test_libsf_name(libvgmstream_streamfile_t* libsf) {
VGM_STEP();
char name[128];
libsf->get_name(libsf->user_data, name, sizeof(name));
const char* name = libsf->get_name(libsf->user_data);
assert(strcmp(name, "api.bin") == 0);
}

View File

@ -42,9 +42,9 @@ typedef struct libvgmstream_streamfile_t {
*/
int64_t (*get_size)(void* user_data);
/* copy current filename to name buf
/* get current filename
*/
void (*get_name)(void* user_data, char* name, int name_size); //TODO return char*?
const char* (*get_name)(void* user_data);
/* open another streamfile from filename (may be some path/protocol, or same as current get_name = reopen)
* - vgmstream mainly opens stuff based on current get_name (relative), so there shouldn't be need to transform this path

View File

@ -9,6 +9,7 @@ typedef struct {
int64_t offset;
int64_t size;
STREAMFILE* inner_sf;
char name[PATH_LIMIT];
} libsf_data_t;
static int libsf_read(void* user_data, uint8_t* dst, int dst_size) {
@ -58,16 +59,16 @@ static int64_t libsf_get_size(void* user_data) {
return data->size;
}
static void libsf_get_name(void* user_data, char* name, int name_size) {
if (!name || !name_size)
return;
name[0] = '\0';
static const char* libsf_get_name(void* user_data) {
libsf_data_t* data = user_data;
if (!data)
return;
return NULL;
data->inner_sf->get_name(data->inner_sf, name, name_size); /* default */
if (data->name[0] == '\0') {
data->inner_sf->get_name(data->inner_sf, data->name, sizeof(data->name));
}
return data->name;
}
struct libvgmstream_streamfile_t* libsf_open(void* user_data, const char* filename) {

View File

@ -33,7 +33,16 @@ static offv_t api_get_offset(API_STREAMFILE* sf) {
static void api_get_name(API_STREAMFILE* sf, char* name, size_t name_size) {
void* user_data = sf->libsf->user_data;
sf->libsf->get_name(user_data, name, name_size);
if (!name || !name_size)
return;
name[0] = '\0';
const char* external_name = sf->libsf->get_name(user_data);
if (!external_name)
return;
snprintf(name, name_size, "%s", external_name);
name[name_size - 1] = '\0';
}
static STREAMFILE* api_open(API_STREAMFILE* sf, const char* filename, size_t buf_size) {