Compare commits
6 Commits
1bf5e6a051
...
7badcf80cf
| Author | SHA1 | Date | |
|---|---|---|---|
| 7badcf80cf | |||
| 7f122d9e89 | |||
| 984c7c0a89 | |||
| ce318c7930 | |||
| eff6c79e9e | |||
| aaade52146 |
36
ports/bzip2/build.sh
Executable file
36
ports/bzip2/build.sh
Executable file
@@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/bash ../install.sh
|
||||||
|
|
||||||
|
NAME='bzip2'
|
||||||
|
VERSION='1.0.8'
|
||||||
|
DOWNLOAD_URL="https://sourceware.org/pub/bzip2/bzip2-$VERSION.tar.gz#ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269"
|
||||||
|
|
||||||
|
configure() {
|
||||||
|
:
|
||||||
|
}
|
||||||
|
|
||||||
|
build() {
|
||||||
|
make -j$(nproc) -f Makefile-libbz2_so CC="$CC" || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
install() {
|
||||||
|
cp -v libbz2.so.$VERSION $BANAN_SYSROOT/usr/lib/ || exit 1
|
||||||
|
ln -svf libbz2.so.$VERSION $BANAN_SYSROOT/usr/lib/libbz2.so || exit 1
|
||||||
|
ln -svf libbz2.so.$VERSION $BANAN_SYSROOT/usr/lib/libbz2.so.1 || exit 1
|
||||||
|
ln -svf libbz2.so.$VERSION $BANAN_SYSROOT/usr/lib/libbz2.so.1.0 || exit 1
|
||||||
|
|
||||||
|
cp -v bzlib.h $BANAN_SYSROOT/usr/include/ || exit 1
|
||||||
|
|
||||||
|
cat > $BANAN_SYSROOT/usr/lib/pkgconfig/bzip2.pc << EOF
|
||||||
|
prefix=/usr
|
||||||
|
exec_prefix=\${prefix}
|
||||||
|
bindir=\${exec_prefix}/bin
|
||||||
|
libdir=\${exec_prefix}/lib
|
||||||
|
includedir=\${prefix}/include
|
||||||
|
|
||||||
|
Name: bzip2
|
||||||
|
Description: A file compression library
|
||||||
|
Version: $VERSION
|
||||||
|
Libs: -L\${libdir} -lbz2
|
||||||
|
Cflags: -I\${includedir}
|
||||||
|
EOF
|
||||||
|
}
|
||||||
23
ports/libarchive/build.sh
Executable file
23
ports/libarchive/build.sh
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash ../install.sh
|
||||||
|
|
||||||
|
NAME='libarchive'
|
||||||
|
VERSION='3.8.6'
|
||||||
|
DOWNLOAD_URL="https://github.com/libarchive/libarchive/releases/download/v$VERSION/libarchive-$VERSION.tar.xz#8ac57c1f5e99550948d1fe755c806d26026e71827da228f36bef24527e372e6f"
|
||||||
|
DEPENDENCIES=('zlib' 'zstd' 'bzip2' 'xz')
|
||||||
|
|
||||||
|
configure() {
|
||||||
|
cmake --fresh -B build -S . -G Ninja \
|
||||||
|
--toolchain="$BANAN_TOOLCHAIN_DIR/Toolchain.txt" \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DENABLE_TEST=OFF \
|
||||||
|
|| exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
build() {
|
||||||
|
cmake --build build || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
install() {
|
||||||
|
cmake --install build || exit 1
|
||||||
|
}
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
NAME='xbanan'
|
NAME='xbanan'
|
||||||
VERSION='git'
|
VERSION='git'
|
||||||
DOWNLOAD_URL="https://git.bananymous.com/Bananymous/xbanan.git#b228ef13c41adff2738acaeda5db804ebf493bfd"
|
DOWNLOAD_URL="https://git.bananymous.com/Bananymous/xbanan.git#b2c642f03d2e498e9d6acd55cc89a5e76c220811"
|
||||||
DEPENDENCIES=('mesa' 'libX11' 'xorgproto')
|
DEPENDENCIES=('xorgproto')
|
||||||
|
|
||||||
configure() {
|
configure() {
|
||||||
cmake --fresh -B build -S . -G Ninja \
|
cmake --fresh -B build -S . -G Ninja \
|
||||||
|
|||||||
@@ -48,19 +48,7 @@ struct uthread
|
|||||||
uintptr_t dtv[1 + 256];
|
uintptr_t dtv[1 + 256];
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(__x86_64__)
|
#define _get_uthread() ((struct uthread*)__builtin_thread_pointer())
|
||||||
#define _get_uthread() ({ \
|
|
||||||
struct uthread* _uthread; \
|
|
||||||
__asm__ volatile("movq %%fs:0, %0" : "=r"(_uthread)); \
|
|
||||||
_uthread; \
|
|
||||||
})
|
|
||||||
#elif defined(__i686__)
|
|
||||||
#define _get_uthread() ({ \
|
|
||||||
struct uthread* _uthread; \
|
|
||||||
__asm__ volatile("movl %%gs:0, %0" : "=r"(_uthread)); \
|
|
||||||
_uthread; \
|
|
||||||
})
|
|
||||||
#endif
|
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -96,12 +96,12 @@ namespace LibGUI
|
|||||||
return on_socket_error(function);
|
return on_socket_error(function);
|
||||||
}
|
}
|
||||||
|
|
||||||
packet.serialize(m_in_buffer.span());
|
packet.serialize(m_out_buffer.span());
|
||||||
|
|
||||||
size_t total_sent = 0;
|
size_t total_sent = 0;
|
||||||
while (total_sent < serialized_size)
|
while (total_sent < serialized_size)
|
||||||
{
|
{
|
||||||
const ssize_t nsend = send(m_server_fd, m_in_buffer.data() + total_sent, serialized_size - total_sent, 0);
|
const ssize_t nsend = send(m_server_fd, m_out_buffer.data() + total_sent, serialized_size - total_sent, 0);
|
||||||
if (nsend < 0)
|
if (nsend < 0)
|
||||||
dwarnln("send: {}", strerror(errno));
|
dwarnln("send: {}", strerror(errno));
|
||||||
if (nsend <= 0)
|
if (nsend <= 0)
|
||||||
@@ -327,15 +327,14 @@ namespace LibGUI
|
|||||||
m_in_buffer_size += nrecv;
|
m_in_buffer_size += nrecv;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t bytes_handled = 0;
|
BAN::ConstByteSpan in_span = m_in_buffer.span().slice(0, m_in_buffer_size);
|
||||||
while (m_in_buffer_size - bytes_handled >= sizeof(PacketHeader))
|
while (in_span.size() >= sizeof(PacketHeader))
|
||||||
{
|
{
|
||||||
BAN::ConstByteSpan packet_span = m_in_buffer.span().slice(bytes_handled);
|
const auto header = in_span.as<const PacketHeader>();
|
||||||
const auto header = packet_span.as<const PacketHeader>();
|
if (in_span.size() < header.size || header.size < sizeof(LibGUI::PacketHeader))
|
||||||
if (packet_span.size() < header.size || header.size < sizeof(LibGUI::PacketHeader))
|
|
||||||
break;
|
break;
|
||||||
packet_span = packet_span.slice(0, header.size);
|
|
||||||
|
|
||||||
|
const auto packet_span = in_span.slice(0, header.size);
|
||||||
switch (header.type)
|
switch (header.type)
|
||||||
{
|
{
|
||||||
#define TRY_OR_BREAK(...) ({ auto&& e = (__VA_ARGS__); if (e.is_error()) break; e.release_value(); })
|
#define TRY_OR_BREAK(...) ({ auto&& e = (__VA_ARGS__); if (e.is_error()) break; e.release_value(); })
|
||||||
@@ -402,16 +401,16 @@ namespace LibGUI
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
bytes_handled += header.size;
|
in_span = in_span.slice(header.size);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: this will only move a single partial packet, so this is fine
|
// NOTE: this will only move a single partial packet, so this is fine
|
||||||
m_in_buffer_size -= bytes_handled;
|
|
||||||
memmove(
|
memmove(
|
||||||
m_in_buffer.data(),
|
m_in_buffer.data(),
|
||||||
m_in_buffer.data() + bytes_handled,
|
in_span.data(),
|
||||||
m_in_buffer_size
|
in_span.size()
|
||||||
);
|
);
|
||||||
|
m_in_buffer_size = in_span.size();
|
||||||
|
|
||||||
if (m_in_buffer_size >= sizeof(LibGUI::PacketHeader))
|
if (m_in_buffer_size >= sizeof(LibGUI::PacketHeader))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -35,9 +35,6 @@
|
|||||||
#define DEFINE_PACKET_EXTRA(name, extra, ...) \
|
#define DEFINE_PACKET_EXTRA(name, extra, ...) \
|
||||||
struct name \
|
struct name \
|
||||||
{ \
|
{ \
|
||||||
static constexpr PacketType type = PacketType::name; \
|
|
||||||
static constexpr uint32_t type_u32 = static_cast<uint32_t>(type); \
|
|
||||||
\
|
|
||||||
extra; \
|
extra; \
|
||||||
\
|
\
|
||||||
FOR_EACH(FIELD_DECL, __VA_ARGS__) \
|
FOR_EACH(FIELD_DECL, __VA_ARGS__) \
|
||||||
@@ -45,8 +42,7 @@
|
|||||||
size_t serialized_size() const \
|
size_t serialized_size() const \
|
||||||
{ \
|
{ \
|
||||||
size_t serialized_size = 0; \
|
size_t serialized_size = 0; \
|
||||||
serialized_size += Serialize::serialized_size_impl<uint32_t>(0); \
|
serialized_size += Serialize::serialized_size_impl(PacketHeader {}); \
|
||||||
serialized_size += Serialize::serialized_size_impl<uint32_t>(type_u32); \
|
|
||||||
FOR_EACH(ADD_SERIALIZED_SIZE, __VA_ARGS__) \
|
FOR_EACH(ADD_SERIALIZED_SIZE, __VA_ARGS__) \
|
||||||
return serialized_size; \
|
return serialized_size; \
|
||||||
} \
|
} \
|
||||||
@@ -54,16 +50,17 @@
|
|||||||
void serialize(BAN::ByteSpan buffer) const \
|
void serialize(BAN::ByteSpan buffer) const \
|
||||||
{ \
|
{ \
|
||||||
const uint32_t serialized_size = this->serialized_size(); \
|
const uint32_t serialized_size = this->serialized_size(); \
|
||||||
Serialize::serialize_impl<uint32_t>(buffer, serialized_size); \
|
Serialize::serialize_impl(buffer, PacketHeader { \
|
||||||
Serialize::serialize_impl<uint32_t>(buffer, type_u32); \
|
.size = serialized_size, \
|
||||||
|
.type = PacketType::name, \
|
||||||
|
}); \
|
||||||
FOR_EACH(SERIALIZE, __VA_ARGS__); \
|
FOR_EACH(SERIALIZE, __VA_ARGS__); \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
static BAN::ErrorOr<name> deserialize(BAN::ConstByteSpan buffer) \
|
static BAN::ErrorOr<name> deserialize(BAN::ConstByteSpan buffer) \
|
||||||
{ \
|
{ \
|
||||||
const uint32_t size_u32 = TRY(Serialize::deserialize_impl<uint32_t>(buffer)); \
|
const auto header = TRY(Serialize::deserialize_impl<PacketHeader>(buffer)); \
|
||||||
const uint32_t type_u32 = TRY(Serialize::deserialize_impl<uint32_t>(buffer)); \
|
if (header.type != PacketType::name || header.size != buffer.size() + sizeof(PacketHeader)) \
|
||||||
if (type_u32 != name::type_u32 || size_u32 != buffer.size() + 2 * sizeof(uint32_t)) \
|
|
||||||
return BAN::Error::from_errno(EINVAL); \
|
return BAN::Error::from_errno(EINVAL); \
|
||||||
name value; \
|
name value; \
|
||||||
FOR_EACH(DESERIALIZE, __VA_ARGS__) \
|
FOR_EACH(DESERIALIZE, __VA_ARGS__) \
|
||||||
|
|||||||
Reference in New Issue
Block a user