diff options
author | Michael Vogt <mvo@debian.org> | 2014-06-18 11:21:35 +0200 |
---|---|---|
committer | Michael Vogt <mvo@debian.org> | 2014-06-18 11:24:16 +0200 |
commit | 8d20b69d2fd7a8fec82bb559f0e39059bbaecf1b (patch) | |
tree | 000fce642c5c12f3cc8b5472bcd03994c78b5050 /apt-pkg/contrib/strutl.cc | |
parent | 17091f2f33de16c2dae501e7868f7aec4fc3452f (diff) | |
parent | 82ced5c894cd013721f432ae8da66114155e04c7 (diff) |
Merge remote-tracking branch 'donkult/debian/sid' into debian/experimental
Conflicts:
apt-private/private-install.cc
Diffstat (limited to 'apt-pkg/contrib/strutl.cc')
-rw-r--r-- | apt-pkg/contrib/strutl.cc | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc index 2100ee47b..ce69c7a02 100644 --- a/apt-pkg/contrib/strutl.cc +++ b/apt-pkg/contrib/strutl.cc @@ -434,23 +434,30 @@ string TimeToStr(unsigned long Sec) /* This replaces all occurrences of Subst with Contents in Str. */ string SubstVar(const string &Str,const string &Subst,const string &Contents) { + if (Subst.empty() == true) + return Str; + string::size_type Pos = 0; string::size_type OldPos = 0; string Temp; - - while (OldPos < Str.length() && + + while (OldPos < Str.length() && (Pos = Str.find(Subst,OldPos)) != string::npos) { - Temp += string(Str,OldPos,Pos) + Contents; - OldPos = Pos + Subst.length(); + if (OldPos != Pos) + Temp.append(Str, OldPos, Pos - OldPos); + if (Contents.empty() == false) + Temp.append(Contents); + OldPos = Pos + Subst.length(); } - + if (OldPos == 0) return Str; - + + if (OldPos >= Str.length()) + return Temp; return Temp + string(Str,OldPos); } - string SubstVar(string Str,const struct SubstVar *Vars) { for (; Vars->Subst != 0; Vars++) |