diff options
author | Raphael Moll <ralf@android.com> | 2012-06-07 13:12:04 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-06-07 13:12:04 -0700 |
commit | ebde54b265a4701d843060e62384fd089893f8fa (patch) | |
tree | d646a6f7b549cbd892c050f854816e6f1cafdd3c /tools | |
parent | fcc2a604af482dfc1d6f905b0f5ddaf856536389 (diff) | |
parent | 748f9e3804834610a59081db4c2952dcb7ee00d4 (diff) | |
download | build-ebde54b265a4701d843060e62384fd089893f8fa.zip build-ebde54b265a4701d843060e62384fd089893f8fa.tar.gz build-ebde54b265a4701d843060e62384fd089893f8fa.tar.bz2 |
am 748f9e38: am b53a073d: am e375c940: Merge "SDK: Use "strip -x" for atree."
* commit '748f9e3804834610a59081db4c2952dcb7ee00d4':
SDK: Use "strip -x" for atree.
Diffstat (limited to 'tools')
-rw-r--r-- | tools/atree/fs.cpp | 51 |
1 files changed, 48 insertions, 3 deletions
diff --git a/tools/atree/fs.cpp b/tools/atree/fs.cpp index b648394..9468cfd 100644 --- a/tools/atree/fs.cpp +++ b/tools/atree/fs.cpp @@ -152,8 +152,8 @@ copy_file(const string& src, const string& dst) int strip_file(const string& path) { - // Default strip command to run is "strip" unless overridden by the STRIP env var. - const char* strip_cmd = getenv("STRIP"); + // Default strip command to run is "strip" unless overridden by the ATREE_STRIP env var. + const char* strip_cmd = getenv("ATREE_STRIP"); if (!strip_cmd || !strip_cmd[0]) { strip_cmd = "strip"; } @@ -163,7 +163,52 @@ strip_file(const string& path) return -1; } else if (pid == 0) { // Exec in the child. Only returns if execve failed. - return execlp(strip_cmd, strip_cmd, path.c_str(), (char *)NULL); + + int num_args = 0; + const char *s = strip_cmd; + while (*s) { + while (*s == ' ') ++s; + if (*s && *s != ' ') { + ++num_args; + while (*s && *s != ' ') ++s; + } + } + + if (num_args <= 0) { + fprintf(stderr, "Invalid ATREE_STRIP command '%s'\n", strip_cmd); + return 1; + + } else if (num_args == 1) { + return execlp(strip_cmd, strip_cmd, path.c_str(), (char *)NULL); + + } else { + // Split the arguments if more than 1 + char* cmd = strdup(strip_cmd); + const char** args = (const char**) malloc(sizeof(const char*) * (num_args + 2)); + + const char** curr = args; + char* s = cmd; + while (*s) { + while (*s == ' ') ++s; + if (*s && *s != ' ') { + *curr = s; + ++curr; + while (*s && *s != ' ') ++s; + if (*s) { + *s = '\0'; + ++s; + } + } + } + + args[num_args] = path.c_str(); + args[num_args + 1] = NULL; + + int ret = execvp(args[0], (char* const*)args); + free(args); + free(cmd); + return ret; + } } else { // Wait for child pid and return its exit code. int status; |