diff options
Diffstat (limited to 'android/avd/hw-config.c')
-rw-r--r-- | android/avd/hw-config.c | 78 |
1 files changed, 73 insertions, 5 deletions
diff --git a/android/avd/hw-config.c b/android/avd/hw-config.c index b449bb3..65796d9 100644 --- a/android/avd/hw-config.c +++ b/android/avd/hw-config.c @@ -11,6 +11,7 @@ */ #include "android/avd/hw-config.h" #include "android/utils/ini.h" +#include "android/utils/system.h" #include <string.h> #include <stdlib.h> @@ -18,6 +19,61 @@ /* the global variable containing the hardware config for this device */ AndroidHwConfig android_hw[1]; +static int +stringToBoolean( const char* value ) +{ + if (!strcmp(value,"1") || + !strcmp(value,"yes") || + !strcmp(value,"YES") || + !strcmp(value,"true") || + !strcmp(value,"TRUE")) + { + return 1; + } + else + return 0; +} + +static int64_t +diskSizeToInt64( const char* diskSize ) +{ + char* end; + int64_t value; + + value = strtoll(diskSize, &end, 10); + if (*end == 'k' || *end == 'K') + value *= 1024ULL; + else if (*end == 'm' || *end == 'M') + value *= 1024*1024ULL; + else if (*end == 'g' || *end == 'G') + value *= 1024*1024*1024ULL; + + return value; +} + + +void +androidHwConfig_init( AndroidHwConfig* config, + int apiLevel ) +{ +#define HWCFG_BOOL(n,s,d,a,t) config->n = stringToBoolean(d); +#define HWCFG_INT(n,s,d,a,t) config->n = d; +#define HWCFG_STRING(n,s,d,a,t) config->n = ASTRDUP(d); +#define HWCFG_DOUBLE(n,s,d,a,t) config->n = d; +#define HWCFG_DISKSIZE(n,s,d,a,t) config->n = diskSizeToInt64(d); + +#include "android/avd/hw-config-defs.h" + + /* Special case for hw.keyboard.lid, we need to set the + * default to FALSE for apiLevel >= 12. This allows platform builds + * to get correct orientation emulation even if they don't bring + * a custom hardware.ini + */ + if (apiLevel >= 12) { + config->hw_keyboard_lid = 0; + } +} + int androidHwConfig_read( AndroidHwConfig* config, IniFile* ini ) @@ -27,11 +83,11 @@ androidHwConfig_read( AndroidHwConfig* config, /* use the magic of macros to implement the hardware configuration loaded */ -#define HWCFG_BOOL(n,s,d,a,t) config->n = iniFile_getBoolean(ini, s, d); -#define HWCFG_INT(n,s,d,a,t) config->n = iniFile_getInteger(ini, s, d); -#define HWCFG_STRING(n,s,d,a,t) config->n = iniFile_getString(ini, s, d); -#define HWCFG_DOUBLE(n,s,d,a,t) config->n = iniFile_getDouble(ini, s, d); -#define HWCFG_DISKSIZE(n,s,d,a,t) config->n = iniFile_getDiskSize(ini, s, d); +#define HWCFG_BOOL(n,s,d,a,t) if (iniFile_getValue(ini, s)) { config->n = iniFile_getBoolean(ini, s, d); } +#define HWCFG_INT(n,s,d,a,t) if (iniFile_getValue(ini, s)) { config->n = iniFile_getInteger(ini, s, d); } +#define HWCFG_STRING(n,s,d,a,t) if (iniFile_getValue(ini, s)) { AFREE(config->n); config->n = iniFile_getString(ini, s, d); } +#define HWCFG_DOUBLE(n,s,d,a,t) if (iniFile_getValue(ini, s)) { config->n = iniFile_getDouble(ini, s, d); } +#define HWCFG_DISKSIZE(n,s,d,a,t) if (iniFile_getValue(ini, s)) { config->n = iniFile_getDiskSize(ini, s, d); } #include "android/avd/hw-config-defs.h" @@ -57,3 +113,15 @@ androidHwConfig_write( AndroidHwConfig* config, return 0; } + +void +androidHwConfig_done( AndroidHwConfig* config ) +{ +#define HWCFG_BOOL(n,s,d,a,t) config->n = 0; +#define HWCFG_INT(n,s,d,a,t) config->n = 0; +#define HWCFG_STRING(n,s,d,a,t) AFREE(config->n); +#define HWCFG_DOUBLE(n,s,d,a,t) config->n = 0.0; +#define HWCFG_DISKSIZE(n,s,d,a,t) config->n = 0; + +#include "android/avd/hw-config-defs.h" +} |