Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 28da3288 authored by Narayan Kamath's avatar Narayan Kamath Committed by Android Git Automerger
Browse files

am cde4b13a: Merge "Allow more than one dex2oat extra option"

* commit 'cde4b13a':
  Allow more than one dex2oat extra option
parents e4499526 cde4b13a
Loading
Loading
Loading
Loading
+38 −5
Original line number Diff line number Diff line
@@ -645,6 +645,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)
{
@@ -717,7 +749,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.
@@ -795,7 +828,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;
@@ -823,14 +856,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)