mirror of
https://github.com/ZmnSCPxj/clboss.git
synced 2026-08-14 12:43:19 +02:00
This commit addresses a compatibility issue introduced by GCC in version 13 (refer to [1]). The issue is present in both the Arch base system and the latest version of Fedora. To resolve this, the commit introduces a Kernel-mimicking approach through a new `Compiler.hpp` file. In this file, we define various compiler hacks required to enhance code readability by reducing verbosity. For more details on the issue, see [1]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107134 ``` In file included from ./Boss/Msg/RequestPeerFromScid.hpp:4, from Boss/Mod/PeerFromScidMapper.cpp:3: ./Ln/Scid.hpp:16:14: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'? 16 | std::uint64_t val; | ^~~~~~~~ | wint_t ./Ln/Scid.hpp: In constructor 'Ln::Scid::Scid(std::nullptr_t)': ./Ln/Scid.hpp:19:44: error: class 'Ln::Scid' does not have any field named 'val' 19 | Scid(std::nullptr_t _ = nullptr) : val(0) { } | ^~~ ./Ln/Scid.hpp: In member function 'Ln::Scid::operator bool() const': ./Ln/Scid.hpp:25:24: error: 'val' was not declared in this scope 25 | return val != 0; | ^~~ ./Ln/Scid.hpp: In member function 'bool Ln::Scid::operator==(const Ln::Scid&) const': ./Ln/Scid.hpp:32:24: error: 'val' was not declared in this scope 32 | return val == i.val; | ^~~ ./Ln/Scid.hpp:32:33: error: 'const class Ln::Scid' has no member named 'val' 32 | return val == i.val; | ^~~ ./Ln/Scid.hpp: In member function 'bool Ln::Scid::operator<(const Ln::Scid&) const': ./Ln/Scid.hpp:39:24: error: 'val' was not declared in this scope 39 | return val < i.val; | ^~~ ./Ln/Scid.hpp:39:32: error: 'const class Ln::Scid' has no member named 'val' 39 | return val < i.val; | ^~~ /bin/sh ./libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I./external/basicsecure/ -I./external/bitcoin-ripemd160/ -I./external/bitcoin-sha256/ -I./external/secp256k1/include/ -I./external/jsmn -Wall -Werror -pthread -Wno-noexcept-type -DUSE_VALGRIND -O2 -MT Boss/Mod/libclboss_la-UnmanagedManager.lo -MD -MP -MF Boss/Mod/.deps/libclboss_la-UnmanagedManager.Tpo -c -o Boss/Mod/libclboss_la-UnmanagedManager.lo `test -f 'Boss/Mod/UnmanagedManager.cpp' || echo './'`Boss/Mod/UnmanagedManager.cpp libtool: compile: g++ -DHAVE_CONFIG_H -I. -I./external/basicsecure/ -I./external/bitcoin-ripemd160/ -I./external/bitcoin-sha256/ -I./external/secp256k1/include/ -I./external/jsmn -Wall -Werror -pthread -Wno-noexcept-type -DUSE_VALGRIND -O2 -MT Boss/Mod/libclboss_la-UnmanagedManager.lo -MD -MP -MF Boss/Mod/.deps/libclboss_la-UnmanagedManager.Tpo -c Boss/Mod/UnmanagedManager.cpp -o Boss/Mod/libclboss_la-UnmanagedManager.o ``` Reported-by: Lakshya Singh <@king-11> Co-Developed-by: Lakshya Singh <@king-11> Signed-off-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
49 lines
1.3 KiB
C++
49 lines
1.3 KiB
C++
#ifndef NET_SOCKETFD_HPP
|
|
#define NET_SOCKETFD_HPP
|
|
|
|
#include<cstddef>
|
|
#include<utility>
|
|
#include<vector>
|
|
#include"Net/Fd.hpp"
|
|
#include"Util/Compiler.hpp"
|
|
|
|
namespace Net {
|
|
|
|
/* RAII class for a network socket file descriptor.
|
|
* See: http://ia800504.us.archive.org/3/items/TheUltimateSo_lingerPageOrWhyIsMyTcpNotReliable/the-ultimate-so_linger-page-or-why-is-my-tcp-not-reliable.html
|
|
* This is most appropriate for sockets that represent a connection
|
|
* between us and a remote computer, not appropriate for sockets
|
|
* that are bound for listening, or which we are still setting up
|
|
* for binding.
|
|
*/
|
|
class SocketFd {
|
|
private:
|
|
Fd fd;
|
|
|
|
public:
|
|
SocketFd(std::nullptr_t _ = nullptr) : fd() { }
|
|
SocketFd(SocketFd&&) =default;
|
|
SocketFd& operator=(SocketFd&&) =default;
|
|
|
|
/* Promote from a plain fd (pre-connecting) to a
|
|
* connected socket.
|
|
*/
|
|
explicit SocketFd(Fd&& o) : fd(std::move(o)) { }
|
|
|
|
~SocketFd();
|
|
|
|
int get() const { return fd.get(); }
|
|
int release() { return fd.release(); }
|
|
void swap(SocketFd& o) { fd.swap(o.fd); }
|
|
void reset(int fd_ = -1) { fd.reset(fd_); }
|
|
|
|
operator bool() const { return (bool)fd; }
|
|
bool operator!() const {return !((bool)fd); }
|
|
|
|
void write(std::vector<std::uint8_t> const&);
|
|
std::vector<std::uint8_t> read(std::size_t);
|
|
};
|
|
|
|
}
|
|
|
|
#endif /* NET_SOCKETFD_HPP */
|