From 60cc993e5afb3327482b172cc7e54c469b231741 Mon Sep 17 00:00:00 2001 From: "Norris, Lee" Date: Thu, 16 Sep 2010 14:06:26 +0800 Subject: [PATCH] Support -Xbootclasspath/a and /p for dvmProcessOptions in dalvik/vm/Init.c Change-Id: I5549031ae6d6414797a22421e6bf62d1be08ac9a --- vm/Init.c | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/vm/Init.c b/vm/Init.c index 66303958c..ca6e59303 100644 --- a/vm/Init.c +++ b/vm/Init.c @@ -725,11 +725,39 @@ static int dvmProcessOptions(int argc, const char* const argv[], free(gDvm.bootClassPathStr); gDvm.bootClassPathStr = strdup(path); - /* - * TODO: support -Xbootclasspath/a and /p, which append or - * prepend to the default bootclasspath. We set the default - * path earlier. - */ + } else if (strncmp(argv[i], "-Xbootclasspath/a:", + sizeof("-Xbootclasspath/a:")-1) == 0) { + const char* appPath = argv[i] + sizeof("-Xbootclasspath/a:")-1; + + if (*(appPath) == '\0') { + dvmFprintf(stderr, "Missing appending bootclasspath path list\n"); + return -1; + } + char* allPath; + + if (asprintf(&allPath, "%s:%s", gDvm.bootClassPathStr, appPath) < 0) { + dvmFprintf(stderr, "Can't append to bootclasspath path list\n"); + return -1; + } + free(gDvm.bootClassPathStr); + gDvm.bootClassPathStr = allPath; + + } else if (strncmp(argv[i], "-Xbootclasspath/p:", + sizeof("-Xbootclasspath/p:")-1) == 0) { + const char* prePath = argv[i] + sizeof("-Xbootclasspath/p:")-1; + + if (*(prePath) == '\0') { + dvmFprintf(stderr, "Missing prepending bootclasspath path list\n"); + return -1; + } + char* allPath; + + if (asprintf(&allPath, "%s:%s", prePath, gDvm.bootClassPathStr) < 0) { + dvmFprintf(stderr, "Can't prepend to bootclasspath path list\n"); + return -1; + } + free(gDvm.bootClassPathStr); + gDvm.bootClassPathStr = allPath; } else if (strncmp(argv[i], "-D", 2) == 0) { /* set property */ -- 2.11.0