mirror of
https://github.com/Oibaf66/frodo-wii.git
synced 2024-11-25 12:56:59 +01:00
Cleanup game data handling a bit: Move the structure to the C-file
and make the return value opaque (we shouldn't touch that stuff anyway)
This commit is contained in:
parent
b6bb39da68
commit
6631286c8a
@ -16,6 +16,22 @@
|
|||||||
/* Current magic */
|
/* Current magic */
|
||||||
#define VERSION_MAGIC VERSION(1)
|
#define VERSION_MAGIC VERSION(1)
|
||||||
|
|
||||||
|
struct game_info
|
||||||
|
{
|
||||||
|
/* These two MUST stay the same */
|
||||||
|
uint32_t sz;
|
||||||
|
uint16_t version_magic;
|
||||||
|
uint16_t flags;
|
||||||
|
|
||||||
|
uint16_t author_off;
|
||||||
|
uint16_t name_off;
|
||||||
|
uint16_t screenshot_off; /* In PNG format */
|
||||||
|
uint16_t filename_off;
|
||||||
|
uint16_t score;
|
||||||
|
uint16_t year;
|
||||||
|
uint8_t data[]; /* 4-byte aligned */
|
||||||
|
};
|
||||||
|
|
||||||
struct game_info_v0
|
struct game_info_v0
|
||||||
{
|
{
|
||||||
uint32_t sz;
|
uint32_t sz;
|
||||||
@ -201,7 +217,7 @@ void GameInfo::resetDefaults()
|
|||||||
this->screenshot = NULL;
|
this->screenshot = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct game_info *GameInfo::dump()
|
void *GameInfo::dump(size_t *out_sz)
|
||||||
{
|
{
|
||||||
size_t total_sz = sizeof(struct game_info);
|
size_t total_sz = sizeof(struct game_info);
|
||||||
size_t png_sz;
|
size_t png_sz;
|
||||||
@ -241,6 +257,7 @@ struct game_info *GameInfo::dump()
|
|||||||
memcpy(out->data + out->filename_off, this->filename, strlen(this->filename) + 1);
|
memcpy(out->data + out->filename_off, this->filename, strlen(this->filename) + 1);
|
||||||
memcpy(out->data + out->screenshot_off, png_data, png_sz);
|
memcpy(out->data + out->screenshot_off, png_data, png_sz);
|
||||||
|
|
||||||
|
*out_sz = out->sz;
|
||||||
/* Marshall it all */
|
/* Marshall it all */
|
||||||
out->sz = htonl(out->sz);
|
out->sz = htonl(out->sz);
|
||||||
out->author_off = htons(out->author_off);
|
out->author_off = htons(out->author_off);
|
||||||
@ -251,7 +268,7 @@ struct game_info *GameInfo::dump()
|
|||||||
out->score = htons(out->score);
|
out->score = htons(out->score);
|
||||||
out->year = htons(out->year);
|
out->year = htons(out->year);
|
||||||
|
|
||||||
return out;
|
return (void *)out;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GameInfo::fromDump(struct game_info *gi)
|
bool GameInfo::fromDump(struct game_info *gi)
|
||||||
|
@ -15,21 +15,7 @@ enum
|
|||||||
GENRE_PUZZLE = 4,
|
GENRE_PUZZLE = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct game_info
|
struct game_info;
|
||||||
{
|
|
||||||
/* These two MUST stay the same */
|
|
||||||
uint32_t sz;
|
|
||||||
uint16_t version_magic;
|
|
||||||
uint16_t flags;
|
|
||||||
|
|
||||||
uint16_t author_off;
|
|
||||||
uint16_t name_off;
|
|
||||||
uint16_t screenshot_off; /* In PNG format */
|
|
||||||
uint16_t filename_off;
|
|
||||||
uint16_t score;
|
|
||||||
uint16_t year;
|
|
||||||
uint8_t data[]; /* 4-byte aligned */
|
|
||||||
};
|
|
||||||
|
|
||||||
class GameInfo
|
class GameInfo
|
||||||
{
|
{
|
||||||
@ -55,7 +41,7 @@ public:
|
|||||||
void resetDefaults();
|
void resetDefaults();
|
||||||
|
|
||||||
/** Returns an allocated dump structure */
|
/** Returns an allocated dump structure */
|
||||||
struct game_info *dump();
|
void *dump(size_t *out_sz);
|
||||||
|
|
||||||
/** Fill in this game info object from a structure */
|
/** Fill in this game info object from a structure */
|
||||||
bool fromDump(struct game_info *data);
|
bool fromDump(struct game_info *data);
|
||||||
|
@ -541,12 +541,11 @@ void Gui::saveGameInfo(const char *base_path, const char *name)
|
|||||||
if (strcmp(this->cur_gameInfo->filename, "unknown") == 0)
|
if (strcmp(this->cur_gameInfo->filename, "unknown") == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
struct game_info *p = this->cur_gameInfo->dump();
|
size_t sz;
|
||||||
|
void *p = this->cur_gameInfo->dump(&sz);
|
||||||
|
|
||||||
if (p)
|
if (p)
|
||||||
{
|
{
|
||||||
size_t sz = ntohl(p->sz);
|
|
||||||
|
|
||||||
char *new_name = (char *)xmalloc(strlen(base_path) +
|
char *new_name = (char *)xmalloc(strlen(base_path) +
|
||||||
8 + strlen(name));
|
8 + strlen(name));
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
Loading…
Reference in New Issue
Block a user