summaryrefslogtreecommitdiff
path: root/cpp/src/IcePack/DescriptorParser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IcePack/DescriptorParser.cpp')
-rw-r--r--cpp/src/IcePack/DescriptorParser.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/cpp/src/IcePack/DescriptorParser.cpp b/cpp/src/IcePack/DescriptorParser.cpp
index 3f971b45e1e..e7485df2c40 100644
--- a/cpp/src/IcePack/DescriptorParser.cpp
+++ b/cpp/src/IcePack/DescriptorParser.cpp
@@ -667,6 +667,26 @@ DescriptorHandler::substitute(const string& v) const
while((beg = value.find("${", beg)) != string::npos)
{
+ if(beg > 0 && value[beg - 1] == '$')
+ {
+ string::size_type escape = beg - 1;
+ while(escape > 0 && value[escape - 1] == '$')
+ {
+ --escape;
+ }
+
+ value.replace(escape, beg - escape, (beg - escape) / 2, '$');
+ if((beg - escape) % 2)
+ {
+ ++beg;
+ continue;
+ }
+ else
+ {
+ beg -= (beg - escape) / 2;
+ }
+ }
+
end = value.find("}", beg);
if(end == string::npos)