summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorRaphael Moll <ralf@android.com>2012-06-07 13:12:04 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2012-06-07 13:12:04 -0700
commitebde54b265a4701d843060e62384fd089893f8fa (patch)
treed646a6f7b549cbd892c050f854816e6f1cafdd3c /tools
parentfcc2a604af482dfc1d6f905b0f5ddaf856536389 (diff)
parent748f9e3804834610a59081db4c2952dcb7ee00d4 (diff)
downloadbuild-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.cpp51
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;