mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
New way of handling the builtin language strings. Now the string pointers are no longer stored as initialised data, but calculated by walking one long string containing all language strings separated by \0. While this doesn't need more RAM, it fixes the problem that loading incomplete .lng files after complete ones did not reset the missing strings to the default, and it also decreases the binary size by >1700 bytes.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5608 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
3c2fefdb99
commit
0f04029293
4 changed files with 29 additions and 4 deletions
|
@ -25,9 +25,21 @@ extern int printf(const char *format, ...);
|
|||
#include "language.h"
|
||||
#include "lang.h"
|
||||
#include "debug.h"
|
||||
#include "string.h"
|
||||
|
||||
static unsigned char language_buffer[MAX_LANGUAGE_SIZE];
|
||||
|
||||
void lang_init(void)
|
||||
{
|
||||
int i;
|
||||
unsigned char *ptr = (unsigned char *) language_builtin;
|
||||
|
||||
for (i = 0; i < LANG_LAST_INDEX_IN_ARRAY; i++) {
|
||||
language_strings[i] = ptr;
|
||||
ptr += strlen(ptr) + 1; /* advance pointer to next string */
|
||||
}
|
||||
}
|
||||
|
||||
int lang_load(const char *filename)
|
||||
{
|
||||
int filesize;
|
||||
|
@ -39,6 +51,7 @@ int lang_load(const char *filename)
|
|||
if(filesize != MAX_LANGUAGE_SIZE) {
|
||||
if((language_buffer[0] == LANGUAGE_COOKIE) &&
|
||||
(language_buffer[1] == LANGUAGE_VERSION)) {
|
||||
lang_init(); /* initialize with builtin */
|
||||
unsigned char *ptr=&language_buffer[2];
|
||||
int id;
|
||||
filesize-=2;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue