mirror of
https://github.com/NixOS/nix.git
synced 2025-11-09 12:06:01 +01:00
Before the change `nix` was stripping warning flags
reported by `gcc-14` too eagerly:
$ nix build -f. texinfo4
error: builder for '/nix/store/i9948l91s3df44ip5jlpp6imbrcs646x-texinfo-4.13a.drv' failed with exit code 2;
last 25 log lines:
> 1495 | info_tag (mbi_iterator_t iter, int handle, size_t *plen)
> | ~~~~~~~~^~~~
> window.c:1887:39: error: passing argument 4 of 'printed_representation' from incompatible pointer type []
> 1887 | &replen);
> | ^~~~~~~
> | |
> | int *
After the change the compiler flag remains:
$ ~/patched.nix build -f. texinfo4
error: builder for '/nix/store/i9948l91s3df44ip5jlpp6imbrcs646x-texinfo-4.13a.drv' failed with exit code 2;
last 25 log lines:
> 1495 | info_tag (mbi_iterator_t iter, int handle, size_t *plen)
> | ~~~~~~~~^~~~
> window.c:1887:39: error: passing argument 4 of 'printed_representation' from incompatible pointer type [-Wincompatible-pointer-types]
> 1887 | &replen);
> | ^~~~~~~
> | |
> | int *
Note the difference in flag rendering around the warning.
https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda has a
good sumamry of why it happens. Befomre the change `nix` was handling
just one form or URL separator:
$ printf '\e]8;;http://example.com\e\\This is a link\e]8;;\e\\\n'
Now it also handled another for (used by gcc-14`):
printf '\e]8;;http://example.com\aThis is a link\e]8;;\a\n'
While at it fixed accumulation of trailing escape `\e\\` symbol.
77 lines
2.4 KiB
C++
77 lines
2.4 KiB
C++
#include "nix/util/util.hh"
|
|
#include "nix/util/types.hh"
|
|
#include "nix/util/terminal.hh"
|
|
#include "nix/util/strings.hh"
|
|
|
|
#include <limits.h>
|
|
#include <gtest/gtest.h>
|
|
|
|
#include <numeric>
|
|
|
|
namespace nix {
|
|
|
|
/* ----------------------------------------------------------------------------
|
|
* filterANSIEscapes
|
|
* --------------------------------------------------------------------------*/
|
|
|
|
TEST(filterANSIEscapes, emptyString)
|
|
{
|
|
auto s = "";
|
|
auto expected = "";
|
|
|
|
ASSERT_EQ(filterANSIEscapes(s), expected);
|
|
}
|
|
|
|
TEST(filterANSIEscapes, doesntChangePrintableChars)
|
|
{
|
|
auto s = "09 2q304ruyhr slk2-19024 kjsadh sar f";
|
|
|
|
ASSERT_EQ(filterANSIEscapes(s), s);
|
|
}
|
|
|
|
TEST(filterANSIEscapes, filtersColorCodes)
|
|
{
|
|
auto s = "\u001b[30m A \u001b[31m B \u001b[32m C \u001b[33m D \u001b[0m";
|
|
|
|
ASSERT_EQ(filterANSIEscapes(s, true, 2), " A");
|
|
ASSERT_EQ(filterANSIEscapes(s, true, 3), " A ");
|
|
ASSERT_EQ(filterANSIEscapes(s, true, 4), " A ");
|
|
ASSERT_EQ(filterANSIEscapes(s, true, 5), " A B");
|
|
ASSERT_EQ(filterANSIEscapes(s, true, 8), " A B C");
|
|
}
|
|
|
|
TEST(filterANSIEscapes, expandsTabs)
|
|
{
|
|
auto s = "foo\tbar\tbaz";
|
|
|
|
ASSERT_EQ(filterANSIEscapes(s, true), "foo bar baz");
|
|
}
|
|
|
|
TEST(filterANSIEscapes, utf8)
|
|
{
|
|
ASSERT_EQ(filterANSIEscapes("foobar", true, 5), "fooba");
|
|
ASSERT_EQ(filterANSIEscapes("fóóbär", true, 6), "fóóbär");
|
|
ASSERT_EQ(filterANSIEscapes("fóóbär", true, 5), "fóóbä");
|
|
ASSERT_EQ(filterANSIEscapes("fóóbär", true, 3), "fóó");
|
|
ASSERT_EQ(filterANSIEscapes("f€€bär", true, 4), "f€€b");
|
|
ASSERT_EQ(filterANSIEscapes("f𐍈𐍈bär", true, 4), "f𐍈𐍈b");
|
|
ASSERT_EQ(filterANSIEscapes("f🔍bar", true, 6), "f🔍bar");
|
|
ASSERT_EQ(filterANSIEscapes("f🔍bar", true, 3), "f🔍");
|
|
ASSERT_EQ(filterANSIEscapes("f🔍bar", true, 2), "f");
|
|
ASSERT_EQ(filterANSIEscapes("foo\u0301", true, 3), "foó");
|
|
}
|
|
|
|
TEST(filterANSIEscapes, osc8)
|
|
{
|
|
ASSERT_EQ(filterANSIEscapes("\e]8;;http://example.com\e\\This is a link\e]8;;\e\\"), "This is a link");
|
|
}
|
|
|
|
TEST(filterANSIEscapes, osc8_bell_as_sep)
|
|
{
|
|
// gcc-14 uses \a as a separator, xterm style:
|
|
// https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
|
|
ASSERT_EQ(filterANSIEscapes("\e]8;;http://example.com\aThis is a link\e]8;;\a"), "This is a link");
|
|
ASSERT_EQ(filterANSIEscapes("\e]8;;http://example.com\a\\This is a link\e]8;;\a"), "\\This is a link");
|
|
}
|
|
|
|
} // namespace nix
|