content.c - some more documentation - and redo init_content_file

so that g_extern.content_is_init is always set to return value
of function
This commit is contained in:
twinaphex 2015-01-08 14:41:50 +01:00
parent 9895835f04
commit 00602c41e8

View File

@ -223,7 +223,7 @@ struct sram_block
/** /**
* save_state: * save_state:
* @path - path that saved state shall be written to. * @path : path of saved state that shall be written to.
* *
* Save a state from memory to disk. * Save a state from memory to disk.
* *
@ -343,6 +343,13 @@ bool load_state(const char *path)
return ret; return ret;
} }
/**
* load_ram_file:
* @path : path of RAM state that will be loaded from.
* @type : type of memory
*
* Load a RAM state from disk to memory.
*/
void load_ram_file(const char *path, int type) void load_ram_file(const char *path, int type)
{ {
ssize_t rc; ssize_t rc;
@ -366,26 +373,40 @@ void load_ram_file(const char *path, int type)
memcpy(data, buf, rc); memcpy(data, buf, rc);
} }
if (buf)
free(buf); free(buf);
} }
/**
* save_ram_file:
* @path : path of RAM state that shall be written to.
* @type : type of memory
*
* Save a RAM state from memory to disk.
*
* In case the file could not be written to, a fallback function
* 'dump_to_file_desperate' will be called.
*/
void save_ram_file(const char *path, int type) void save_ram_file(const char *path, int type)
{ {
size_t size = pretro_get_memory_size(type); size_t size = pretro_get_memory_size(type);
void *data = pretro_get_memory_data(type); void *data = pretro_get_memory_data(type);
if (data && size > 0) if (!data)
{ return;
if (!write_file(path, data, size)) if (size <= 0)
return;
if (write_file(path, data, size))
{ {
RARCH_LOG("Saved successfully to \"%s\".\n", path);
return;
}
RARCH_ERR("Failed to save SRAM.\n"); RARCH_ERR("Failed to save SRAM.\n");
RARCH_WARN("Attempting to recover ...\n"); RARCH_WARN("Attempting to recover ...\n");
dump_to_file_desperate(data, size, type); dump_to_file_desperate(data, size, type);
} }
else
RARCH_LOG("Saved successfully to \"%s\".\n", path);
}
}
/** /**
* load_content: * load_content:
@ -512,10 +533,22 @@ end:
free((void*)info[i].data); free((void*)info[i].data);
string_list_free(additional_path_allocs); string_list_free(additional_path_allocs);
if (info)
free(info); free(info);
return ret; return ret;
} }
/**
* init_content_file:
*
* Initializes and loads a content file for the currently
* selected libretro core.
*
* g_extern.content_is_init will be set to the return value
* on exit.
*
* Returns : true if successful, otherwise false.
**/
bool init_content_file(void) bool init_content_file(void)
{ {
unsigned i; unsigned i;
@ -526,8 +559,9 @@ bool init_content_file(void)
g_extern.content_is_init = false; g_extern.content_is_init = false;
g_extern.temporary_content = string_list_new(); g_extern.temporary_content = string_list_new();
if (!g_extern.temporary_content) if (!g_extern.temporary_content)
return false; goto error;
if (*g_extern.subsystem) if (*g_extern.subsystem)
{ {
@ -539,13 +573,13 @@ bool init_content_file(void)
RARCH_ERR( RARCH_ERR(
"Failed to find subsystem \"%s\" in libretro implementation.\n", "Failed to find subsystem \"%s\" in libretro implementation.\n",
g_extern.subsystem); g_extern.subsystem);
return false; goto error;
} }
if (special->num_roms && !g_extern.subsystem_fullpaths) if (special->num_roms && !g_extern.subsystem_fullpaths)
{ {
RARCH_ERR("libretro core requires special content, but none were provided.\n"); RARCH_ERR("libretro core requires special content, but none were provided.\n");
return false; goto error;
} }
else if (special->num_roms && special->num_roms else if (special->num_roms && special->num_roms
!= g_extern.subsystem_fullpaths->size) != g_extern.subsystem_fullpaths->size)
@ -553,7 +587,7 @@ bool init_content_file(void)
RARCH_ERR("libretro core requires %u content files for subsystem \"%s\", but %u content files were provided.\n", RARCH_ERR("libretro core requires %u content files for subsystem \"%s\", but %u content files were provided.\n",
special->num_roms, special->desc, special->num_roms, special->desc,
(unsigned)g_extern.subsystem_fullpaths->size); (unsigned)g_extern.subsystem_fullpaths->size);
return false; goto error;
} }
else if (!special->num_roms && g_extern.subsystem_fullpaths else if (!special->num_roms && g_extern.subsystem_fullpaths
&& g_extern.subsystem_fullpaths->size) && g_extern.subsystem_fullpaths->size)
@ -561,7 +595,7 @@ bool init_content_file(void)
RARCH_ERR("libretro core takes no content for subsystem \"%s\", but %u content files were provided.\n", RARCH_ERR("libretro core takes no content for subsystem \"%s\", but %u content files were provided.\n",
special->desc, special->desc,
(unsigned)g_extern.subsystem_fullpaths->size); (unsigned)g_extern.subsystem_fullpaths->size);
return false; goto error;
} }
} }
@ -570,7 +604,7 @@ bool init_content_file(void)
attr.i = 0; attr.i = 0;
if (!content) if (!content)
return false; goto error;
if (*g_extern.subsystem) if (*g_extern.subsystem)
{ {
@ -619,8 +653,7 @@ bool init_content_file(void)
{ {
RARCH_ERR("Failed to extract content from zipped file: %s.\n", RARCH_ERR("Failed to extract content from zipped file: %s.\n",
temporary_content); temporary_content);
string_list_free(content); goto error;
return false;
} }
string_list_set(content, i, temporary_content); string_list_set(content, i, temporary_content);
string_list_append(g_extern.temporary_content, string_list_append(g_extern.temporary_content,
@ -630,11 +663,12 @@ bool init_content_file(void)
#endif #endif
/* Set attr to need_fullpath as appropriate. */ /* Set attr to need_fullpath as appropriate. */
ret = load_content(special, content); ret = load_content(special, content);
error:
g_extern.content_is_init = (ret) ? true : false; g_extern.content_is_init = (ret) ? true : false;
if (content)
string_list_free(content); string_list_free(content);
return ret; return ret;
} }