diff options
Diffstat (limited to 'android/skin')
-rw-r--r-- | android/skin/file.c | 20 | ||||
-rw-r--r-- | android/skin/file.h | 1 |
2 files changed, 17 insertions, 4 deletions
diff --git a/android/skin/file.c b/android/skin/file.c index 5947ad9..dddc279 100644 --- a/android/skin/file.c +++ b/android/skin/file.c @@ -609,6 +609,7 @@ skin_file_load_from_v1( SkinFile* file, AConfig* aconfig, const char* basepat *ptail = layout; ptail = &layout->next; } + file->version = 1; return 0; } @@ -662,6 +663,7 @@ skin_file_load_from_v2( SkinFile* file, AConfig* aconfig, const char* basepat if (file->layouts == NULL) return -1; + file->version = 2; return 0; } @@ -671,19 +673,29 @@ skin_file_create_from_aconfig( AConfig* aconfig, const char* basepath ) SkinFile* file; ANEW0(file); + if ( aconfig_find(aconfig, "parts") != NULL) { if (skin_file_load_from_v2( file, aconfig, basepath ) < 0) { - skin_file_free( file ); - file = NULL; + goto BAD_FILE; + } + file->version = aconfig_int(aconfig, "version", 2); + /* The file version must be 1 or higher */ + if (file->version <= 0) { + dprint( "## WARNING: invalid skin version: %d", file->version); + goto BAD_FILE; } } else { if (skin_file_load_from_v1( file, aconfig, basepath ) < 0) { - skin_file_free( file ); - file = NULL; + goto BAD_FILE; } + file->version = 1; } return file; + +BAD_FILE: + skin_file_free( file ); + return NULL; } void diff --git a/android/skin/file.h b/android/skin/file.h index 4e3a8fc..21922e6 100644 --- a/android/skin/file.h +++ b/android/skin/file.h @@ -99,6 +99,7 @@ extern SkinDisplay* skin_layout_get_display( SkinLayout* layout ); extern SkinRotation skin_layout_get_dpad_rotation( SkinLayout* layout ); typedef struct SkinFile { + int version; /* 1, 2 or 3 */ SkinPart* parts; SkinLayout* layouts; int num_parts; |