Loading cmds/installd/commands.c +38 −5 Original line number Diff line number Diff line Loading @@ -621,6 +621,38 @@ static void run_dexopt(int zip_fd, int odex_fd, const char* input_file_name, ALOGE("execl(%s) failed: %s\n", DEX_OPT_BIN, strerror(errno)); } static int split_count(const char *str) { char *ctx; int count = 0; char buf[PROPERTY_VALUE_MAX]; strncpy(buf, str, sizeof(buf)); char *pBuf = buf; while(strtok_r(pBuf, " ", &ctx) != NULL) { count++; pBuf = NULL; } return count; } static int split(char *buf, char **argv) { char *ctx; int count = 0; char *tok; char *pBuf = buf; while((tok = strtok_r(pBuf, " ", &ctx)) != NULL) { argv[count++] = tok; pBuf = NULL; } return count; } static void run_patchoat(int input_fd, int oat_fd, const char* input_file_name, const char* output_file_name, const char *pkgname __unused, const char *instruction_set) { Loading Loading @@ -693,7 +725,8 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name, dex2oat_isa_features, NULL) > 0; char dex2oat_flags[PROPERTY_VALUE_MAX]; bool have_dex2oat_flags = property_get("dalvik.vm.dex2oat-flags", dex2oat_flags, NULL) > 0; int dex2oat_flags_count = property_get("dalvik.vm.dex2oat-flags", dex2oat_flags, NULL) <= 0 ? 0 : split_count(dex2oat_flags); ALOGV("dalvik.vm.dex2oat-flags=%s\n", dex2oat_flags); // If we booting without the real /data, don't spend time compiling. Loading Loading @@ -771,7 +804,7 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name, + (have_dex2oat_Xms_flag ? 2 : 0) + (have_dex2oat_Xmx_flag ? 2 : 0) + (have_dex2oat_compiler_filter_flag ? 1 : 0) + (have_dex2oat_flags ? 1 : 0)]; + dex2oat_flags_count]; int i = 0; argv[i++] = (char*)DEX2OAT_BIN; argv[i++] = zip_fd_arg; Loading Loading @@ -799,14 +832,14 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name, if (have_dex2oat_compiler_filter_flag) { argv[i++] = dex2oat_compiler_filter_arg; } if (have_dex2oat_flags) { argv[i++] = dex2oat_flags; if (dex2oat_flags_count) { i += split(dex2oat_flags, argv + i); } // Do not add after dex2oat_flags, they should override others for debugging. argv[i] = NULL; execv(DEX2OAT_BIN, (char* const *)argv); ALOGE("execl(%s) failed: %s\n", DEX2OAT_BIN, strerror(errno)); ALOGE("execv(%s) failed: %s\n", DEX2OAT_BIN, strerror(errno)); } static int wait_child(pid_t pid) Loading Loading
cmds/installd/commands.c +38 −5 Original line number Diff line number Diff line Loading @@ -621,6 +621,38 @@ static void run_dexopt(int zip_fd, int odex_fd, const char* input_file_name, ALOGE("execl(%s) failed: %s\n", DEX_OPT_BIN, strerror(errno)); } static int split_count(const char *str) { char *ctx; int count = 0; char buf[PROPERTY_VALUE_MAX]; strncpy(buf, str, sizeof(buf)); char *pBuf = buf; while(strtok_r(pBuf, " ", &ctx) != NULL) { count++; pBuf = NULL; } return count; } static int split(char *buf, char **argv) { char *ctx; int count = 0; char *tok; char *pBuf = buf; while((tok = strtok_r(pBuf, " ", &ctx)) != NULL) { argv[count++] = tok; pBuf = NULL; } return count; } static void run_patchoat(int input_fd, int oat_fd, const char* input_file_name, const char* output_file_name, const char *pkgname __unused, const char *instruction_set) { Loading Loading @@ -693,7 +725,8 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name, dex2oat_isa_features, NULL) > 0; char dex2oat_flags[PROPERTY_VALUE_MAX]; bool have_dex2oat_flags = property_get("dalvik.vm.dex2oat-flags", dex2oat_flags, NULL) > 0; int dex2oat_flags_count = property_get("dalvik.vm.dex2oat-flags", dex2oat_flags, NULL) <= 0 ? 0 : split_count(dex2oat_flags); ALOGV("dalvik.vm.dex2oat-flags=%s\n", dex2oat_flags); // If we booting without the real /data, don't spend time compiling. Loading Loading @@ -771,7 +804,7 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name, + (have_dex2oat_Xms_flag ? 2 : 0) + (have_dex2oat_Xmx_flag ? 2 : 0) + (have_dex2oat_compiler_filter_flag ? 1 : 0) + (have_dex2oat_flags ? 1 : 0)]; + dex2oat_flags_count]; int i = 0; argv[i++] = (char*)DEX2OAT_BIN; argv[i++] = zip_fd_arg; Loading Loading @@ -799,14 +832,14 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name, if (have_dex2oat_compiler_filter_flag) { argv[i++] = dex2oat_compiler_filter_arg; } if (have_dex2oat_flags) { argv[i++] = dex2oat_flags; if (dex2oat_flags_count) { i += split(dex2oat_flags, argv + i); } // Do not add after dex2oat_flags, they should override others for debugging. argv[i] = NULL; execv(DEX2OAT_BIN, (char* const *)argv); ALOGE("execl(%s) failed: %s\n", DEX2OAT_BIN, strerror(errno)); ALOGE("execv(%s) failed: %s\n", DEX2OAT_BIN, strerror(errno)); } static int wait_child(pid_t pid) Loading