]> git.lyx.org Git - lyx.git/commitdiff
Do not use lyxerr in from_ascii(char const *)
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Mon, 9 Sep 2024 10:08:23 +0000 (12:08 +0200)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Mon, 9 Sep 2024 13:08:36 +0000 (15:08 +0200)
This function is used a lot to initialize static docstrings. This is
an issue in theory because lyxerr may not have been initialized in
time.

In practice of course, lyxerr will only be used when there is a
non-ascii character in the parameter, which is really not supposed to
happen.

This gets rid of 75 coverity reports.

src/support/docstring.cpp
src/support/lassert.cpp
src/support/lassert.h

index cbee18a20a4584ce9f41e87eec322d080cb102f6..59e26298df07999380fadbf598de2ac6e4f79cd0 100644 (file)
@@ -40,7 +40,7 @@ docstring const from_ascii(char const * ascii)
                char_type *d = &s[0];
                while (--n >= 0) {
                        d[n] = ascii[n];
-                       LATTEST(static_cast<unsigned char>(ascii[n]) < 0x80);
+                       LATTEST_STATIC(static_cast<unsigned char>(ascii[n]) < 0x80);
                }
        }
        return s;
index 3e594153cbe89ecb879b7d071cb0404ca371b3b9..31ebfeb0d98f34b4f8ae0616fc42b010763a8999 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <boost/assert.hpp>
 
+#include <iostream>
 
 #ifdef LYX_CALLSTACK_PRINTING
 #include <cstdio>
@@ -55,6 +56,13 @@ void doAssert(char const * expr, char const * file, long line)
 }
 
 
+void doAssertStatic(char const * expr, char const * file, long line)
+{
+       cerr << "ASSERTION " << expr << " VIOLATED IN " << file << ":" << line << endl;
+       BOOST_ASSERT(false);
+}
+
+
 docstring formatHelper(docstring const & msg,
        char const * expr, char const * file, long line)
 {
index b142cc2f59de5709d32a906c096107d609686384..58f299f7af02edf19f701a1350191febd5a2eade 100644 (file)
@@ -34,6 +34,11 @@ LATTEST(expr)
   continue with the usual program flow, but failure of expr still means that
   there is something that needs to be fixed.
 
+LATTEST_STATIC(expr)
+  This is the same as macro LATTEST above, except
+  that it does not use lyxerr, so that it is suitable in static
+  variables initialization.
+
 LASSERT(expr, escape)
   This macro should be used when a failure of expr is not compatible with
   continuing the ordinary program flow, but is something from which we can
@@ -61,6 +66,7 @@ LAPPERR(expr)
 
 
 void doAssert(char const * expr, char const * file, long line);
+void doAssertStatic(char const * expr, char const * file, long line);
 void doWarnIf(char const * expr, char const * file, long line);
 void doBufErr(char const * expr, char const * file, long line);
 void doAppErr(char const * expr, char const * file, long line);
@@ -76,6 +82,9 @@ docstring printCallStack();
 #define LATTEST(expr) \
        if (expr) {} else { lyx::doAssert(#expr, __FILE__, __LINE__); }
 
+#define LATTEST_STATIC(expr) \
+       if (expr) {} else { lyx::doAssertStatic(#expr, __FILE__, __LINE__); }
+
 #define LASSERT(expr, escape) \
        if (expr) {} else { lyx::doAssert(#expr, __FILE__, __LINE__); escape; }