summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2013-04-05 09:22:24 +0000
committerAlexey Samsonov <samsonov@google.com>2013-04-05 09:22:24 +0000
commitd2069321e0b6bcba6290a35ed407f9b1190abd03 (patch)
treee70d4b03e03a3fdb5305b0c3abc8ca1cbc4b6948 /llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
parentc6ee5835d640e3ea1fae871e80838bc84547bf39 (diff)
downloadbcm5719-llvm-d2069321e0b6bcba6290a35ed407f9b1190abd03.tar.gz
bcm5719-llvm-d2069321e0b6bcba6290a35ed407f9b1190abd03.zip
llvm-symbolizer: correctly parse filenames given in quotes
llvm-svn: 178859
Diffstat (limited to 'llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp')
-rw-r--r--llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp23
1 files changed, 18 insertions, 5 deletions
diff --git a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
index d039ec691f1..0cafffaf712 100644
--- a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
+++ b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
@@ -70,12 +70,25 @@ static bool parseCommand(bool &IsData, std::string &ModuleName,
// If no cmd, assume it's CODE.
IsData = false;
}
- // FIXME: Handle case when filename is given in quotes.
- if (char *FilePath = strtok(pos, kDelimiters)) {
- ModuleName = FilePath;
- if (char *OffsetStr = strtok((char *)0, kDelimiters))
- ModuleOffsetStr = OffsetStr;
+ // Skip delimiters and parse input filename.
+ pos += strspn(pos, kDelimiters);
+ if (*pos == '"' || *pos == '\'') {
+ char quote = *pos;
+ pos++;
+ char *end = strchr(pos, quote);
+ if (end == 0)
+ return false;
+ ModuleName = std::string(pos, end - pos);
+ pos = end + 1;
+ } else {
+ int name_length = strcspn(pos, kDelimiters);
+ ModuleName = std::string(pos, name_length);
+ pos += name_length;
}
+ // Skip delimiters and parse module offset.
+ pos += strspn(pos, kDelimiters);
+ int offset_length = strcspn(pos, kDelimiters);
+ ModuleOffsetStr = std::string(pos, offset_length);
if (StringRef(ModuleOffsetStr).getAsInteger(0, ModuleOffset))
return false;
return true;
OpenPOWER on IntegriCloud