commit bc624cc7809cef758939aa7fa01550ccb9d0616a
Author: Jean-Marc Lasgouttes <lasgout...@lyx.org>
Date:   Tue Oct 1 11:45:36 2024 +0200

    Do not pass a vector by value to getArgInset
    
    Instead of passing the vector by value so that stuff can be added to
    it in the function, add required elements of arguments to a second vector.
    
    While we are at it, simplify the code a bit by using a range-for and
    auto keyword.
    
    Spotted by Coverity scan
---
 src/output_latex.cpp | 31 ++++++++++++++-----------------
 1 file changed, 14 insertions(+), 17 deletions(-)

diff --git a/src/output_latex.cpp b/src/output_latex.cpp
index 478c99698d..9fdc901727 100644
--- a/src/output_latex.cpp
+++ b/src/output_latex.cpp
@@ -501,13 +501,10 @@ void TeXEnvironment(Buffer const & buf, Text const & text,
 }
 
 
-// FIXME: pass the \c required vector by reference and add the stuff
-// from \c latexargs to a different vector. This avoids a copy and
-// (more importantly?) a coverity defect.
 void getArgInsets(otexstream & os, OutputParams const & runparams,
                   Layout::LaTeXArgMap const & latexargs,
                   map<size_t, lyx::InsetArgument const *> const & ilist,
-                  vector<string> required, string const & prefix)
+                  vector<string> const & required, string const & prefix)
 {
        size_t const argnr = latexargs.size();
        if (argnr == 0)
@@ -515,24 +512,24 @@ void getArgInsets(otexstream & os, OutputParams const & 
runparams,
 
        // Default and preset args are always output, so if they require
        // other arguments, consider this.
+       vector<string> required_args;
        for (auto const & larg : latexargs) {
                Layout::latexarg const & arg = larg.second;
                if ((!arg.presetarg.empty() || !arg.defaultarg.empty()) && 
!arg.required.empty()) {
-                               vector<string> req = 
getVectorFromString(arg.required);
-                               required.insert(required.end(), req.begin(), 
req.end());
-                       }
+                       vector<string> const req = 
getVectorFromString(arg.required);
+                       required_args.insert(required_args.end(), req.begin(), 
req.end());
+               }
        }
 
        for (size_t i = 1; i <= argnr; ++i) {
-               map<size_t, InsetArgument const *>::const_iterator lit = 
ilist.find(i);
+               auto const lit = ilist.find(i);
                bool inserted = false;
                if (lit != ilist.end()) {
                        InsetArgument const * ins = lit->second;
                        if (ins) {
-                               Layout::LaTeXArgMap::const_iterator const lait =
-                                               latexargs.find(ins->name());
+                               auto const lait = latexargs.find(ins->name());
                                if (lait != latexargs.end()) {
-                                       Layout::latexarg arg = lait->second;
+                                       Layout::latexarg const arg = 
lait->second;
                                        docstring ldelim;
                                        docstring rdelim;
                                        if (!arg.nodelims) {
@@ -553,12 +550,10 @@ void getArgInsets(otexstream & os, OutputParams const & 
runparams,
                        }
                }
                if (!inserted) {
-                       Layout::LaTeXArgMap::const_iterator lait = 
latexargs.begin();
-                       Layout::LaTeXArgMap::const_iterator const laend = 
latexargs.end();
-                       for (; lait != laend; ++lait) {
+                       for (auto const & la_p : latexargs) {
                                string const name = prefix + convert<string>(i);
-                               if ((*lait).first == name) {
-                                       Layout::latexarg arg = (*lait).second;
+                               if (la_p.first == name) {
+                                       Layout::latexarg const arg = 
la_p.second;
                                        docstring preset = arg.presetarg;
                                        if (!arg.defaultarg.empty()) {
                                                if (!preset.empty())
@@ -578,7 +573,9 @@ void getArgInsets(otexstream & os, OutputParams const & 
runparams,
                                                                from_ascii("]") 
: arg.rdelim;
                                                os << ldelim << preset << 
rdelim;
                                        } else if (find(required.begin(), 
required.end(),
-                                                  (*lait).first) != 
required.end()) {
+                                                           la_p.first) != 
required.end()
+                                                      || 
find(required_args.begin(), required_args.end(),
+                                                              la_p.first) != 
required_args.end()) {
                                                docstring ldelim = 
arg.ldelim.empty() ?
                                                                from_ascii("[") 
: arg.ldelim;
                                                docstring rdelim = 
arg.rdelim.empty() ?
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to