Merge "Fix skin issue when launching emulator from tree."
diff --git a/android/avd/info.c b/android/avd/info.c
index f850f5b..3463f6a 100644
--- a/android/avd/info.c
+++ b/android/avd/info.c
@@ -780,12 +780,23 @@
 {
     char* skinName;
     char* skinDirPath;
-    char  temp[PATH_MAX], *p=temp, *end=p+sizeof(temp);
 
     avdInfo_getSkinInfo(i, &skinName, &skinDirPath);
     if (skinDirPath == NULL)
         return 0;
 
+    int result = avdInfo_getSkinHardwareIni(i, skinName, skinDirPath);
+
+    AFREE(skinName);
+    AFREE(skinDirPath);
+
+    return result;
+}
+
+int avdInfo_getSkinHardwareIni( AvdInfo* i, char* skinName, char* skinDirPath)
+{
+    char  temp[PATH_MAX], *p=temp, *end=p+sizeof(temp);
+
     p = bufprint(temp, end, "%s/%s/hardware.ini", skinDirPath, skinName);
     if (p >= end || !path_exists(temp)) {
         DD("no skin-specific hardware.ini in %s", skinDirPath);
@@ -793,6 +804,8 @@
     }
 
     D("found skin-specific hardware.ini: %s", temp);
+    if (i->skinHardwareIni != NULL)
+        iniFile_free(i->skinHardwareIni);
     i->skinHardwareIni = iniFile_newFromFile(temp);
     if (i->skinHardwareIni == NULL)
         return -1;
@@ -1082,7 +1095,7 @@
     /* First, see if the config.ini contains a SKIN_PATH entry that
      * names the full directory path for the skin.
      */
-    if ( i->configIni != NULL ) {
+    if (i->configIni != NULL ) {
         skinPath = iniFile_getString( i->configIni, SKIN_PATH, NULL );
         if (skinPath != NULL) {
             /* If this skin name is magic or a direct directory path
diff --git a/android/avd/info.h b/android/avd/info.h
index 11f4897..4388b7c 100644
--- a/android/avd/info.h
+++ b/android/avd/info.h
@@ -106,6 +106,9 @@
  */
 AvdInfo*  avdInfo_new( const char*  name, AvdInfoParams*  params );
 
+/* Update the AvdInfo hardware config from a given skin name and path */
+int avdInfo_getSkinHardwareIni( AvdInfo* i, char* skinName, char* skinDirPath);
+
 /* A special function used to setup an AvdInfo for use when starting
  * the emulator from the Android build system. In this specific instance
  * we're going to create temporary files to hold all writable image
diff --git a/android/main.c b/android/main.c
index 561428b..51d481c 100644
--- a/android/main.c
+++ b/android/main.c
@@ -319,6 +319,9 @@
 
         opts->skindir = skinDir;
         D("autoconfig: -skindir %s", opts->skindir);
+
+        /* update the avd hw config from this new skin */
+        avdInfo_getSkinHardwareIni(avd, opts->skin, opts->skindir);
     }
 
     /* Read hardware configuration */