From 2ee1c326ebaba7867f02c5e4e343e984d78d37a0 Mon Sep 17 00:00:00 2001 From: Moe-hacker Date: Tue, 11 Nov 2025 23:59:40 +0800 Subject: [PATCH 01/16] non: sync catsh update --- src/catsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/catsh b/src/catsh index 6e0f945..10cd136 160000 --- a/src/catsh +++ b/src/catsh @@ -1 +1 @@ -Subproject commit 6e0f945034e769d587b6d475f0e59c7c9c2c8c5b +Subproject commit 10cd1368bbd1bd5b34214b05114fee9aeaba8b11 From 5ec1718b50b356240ff758d76b44e5ae061c266e Mon Sep 17 00:00:00 2001 From: Moe-hacker Date: Thu, 13 Nov 2025 22:34:32 +0800 Subject: [PATCH 02/16] feat: add easteregg --- Makefile | 4 +- build.c | 7 +++ src/easteregg/daijin.c | 108 +++++++++++++++++++++++++++++++++++++++++ src/easteregg/daijin.h | 27 +++++++++++ src/include/rurima.h | 1 + src/main.c | 4 ++ 6 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 src/easteregg/daijin.c create mode 100644 src/easteregg/daijin.h diff --git a/Makefile b/Makefile index 175d1dd..ef67188 100644 --- a/Makefile +++ b/Makefile @@ -41,14 +41,14 @@ CLEAN_LOG = @printf ' $(CCCOLOR)CLEAN$(ENDCOLOR) $(BINCOLOR)%b$(ENDCOLOR)\n' STRIP = strip # Formater. FORMATER = clang-format -i -SRC = src/*.c +SRC = src/*.c src/easteregg/*.c HEADER = src/include/*.h # Checker. CHECKER = clang-tidy CHECKER_FLAGS = --checks=*,-clang-analyzer-security.insecureAPI.strcpy,-altera-unroll-loops,-cert-err33-c,-concurrency-mt-unsafe,-clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling,-readability-function-cognitive-complexity,-cppcoreguidelines-avoid-magic-numbers,-readability-magic-numbers,-bugprone-easily-swappable-parameters,-cert-err34-c,-misc-include-cleaner,-readability-identifier-length,-bugprone-signal-handler,-cert-msc54-cpp,-cert-sig30-c,-altera-id-dependent-backward-branch,-bugprone-suspicious-realloc-usage,-hicpp-signed-bitwise,-clang-analyzer-security.insecureAPI.UncheckedReturn -include config.mk # Target. -objects = catsh/src/catsh.o net.o checkdep.o dockerhub.o exec.o info.o lxcmirror.o shared.o signal.o archive.o subcommand.o main.o ruri/src/easteregg/action.o ruri/src/easteregg/nekofeng.o ruri/src/easteregg/layer.o ruri/src/easteregg/typewriter.o ruri/src/caplist.o ruri/src/chroot.o ruri/src/cprintf.o ruri/src/info.o ruri/src/rurienv.o ruri/src/rurifetch.o ruri/src/seccomp.o ruri/src/signal.o ruri/src/umount.o ruri/src/unshare.o ruri/src/rootless.o ruri/src/mount.o ruri/src/k2v.o ruri/src/elf-magic.o ruri/src/config.o ruri/src/cgroup.o ruri/src/passwd.o ruri/src/ps.o ruri/src/ruri.o +objects = easteregg/daijin.o catsh/src/catsh.o net.o checkdep.o dockerhub.o exec.o info.o lxcmirror.o shared.o signal.o archive.o subcommand.o main.o ruri/src/easteregg/action.o ruri/src/easteregg/nekofeng.o ruri/src/easteregg/layer.o ruri/src/easteregg/typewriter.o ruri/src/caplist.o ruri/src/chroot.o ruri/src/cprintf.o ruri/src/info.o ruri/src/rurienv.o ruri/src/rurifetch.o ruri/src/seccomp.o ruri/src/signal.o ruri/src/umount.o ruri/src/unshare.o ruri/src/rootless.o ruri/src/mount.o ruri/src/k2v.o ruri/src/elf-magic.o ruri/src/config.o ruri/src/cgroup.o ruri/src/passwd.o ruri/src/ps.o ruri/src/ruri.o O = out BIN_TARGET = rurima .NOTPARALLEL: diff --git a/build.c b/build.c index 47fd17f..802453f 100644 --- a/build.c +++ b/build.c @@ -659,8 +659,15 @@ void build() for (int i = 0; catsh_files && catsh_files[i] != NULL; i++) { add_args(&files, catsh_files[i]); } + char easteregg_src_rma[PATH_MAX]; + sprintf(easteregg_src_rma, "%s/easteregg", SRC_DIR); + char **easteregg_rma_files = find_file(easteregg_src_rma, ".c", NULL); + for (int i = 0; easteregg_rma_files && easteregg_rma_files[i] != NULL; i++) { + add_args(&files, easteregg_rma_files[i]); + } compile_files_parallel(files, JOBS); free_args(easteregg_files); + free_args(easteregg_rma_files); free_args(catsh_files); free_args(files); // Link diff --git a/src/easteregg/daijin.c b/src/easteregg/daijin.c new file mode 100644 index 0000000..33cd2c8 --- /dev/null +++ b/src/easteregg/daijin.c @@ -0,0 +1,108 @@ +#include "daijin.h" +// NOLINTNEXTLINE +static short x_win, y_win; +static size_t strlen_char32_rma(const char32_t *_Nonnull str) +{ + size_t len = 0; + // clang-format off + while (str[len] != U'\0') { + len++; + } + // clang-format on + return len; +} +static void print_art(int x, bool clear) +{ + // clang-format off + char32_t art[][128] = { + U" ⣀⠤⠤⠤⠤⢀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + U"⣰⠋⠁⠀⠀⠀⠀⠀⠈⠲⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + U"⢯⣀⣀⣀⡀⠀⠀⠀⠀⠀⠈⢦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⢀⠀⠀⠀⠀⠀⠀⠀", + U"⠀⠀⠠⣏⠀⡀⠀⢀⡀⠀⠀⠈⡆⠀⠀⠀⠀⠀⠀⢀⣀⠤⠔⠂⠁⠀⠀⠀⠀⠉⠰⢄⠀⠀⠀⠀", + U"⠀⠀⠀⠀⠀⠈⠉⠒⢌⢳⠀⠀⢹⠀⠀⠀⢞⠩⠃⣀⠖⠂⠀⠀⠀⠀⠀⡴⣧⡒⢤⡀⠱⡄⠀⠀", + U"⠀⠀⠀⠀⠀⠀⠀⠀⠈⣦⡇⠀⢸⠀⠀⠀⢈⡶⠚⠁⣀⠀⠀⠀⠀⠀⠀⡇⠈⠿⣷⣿⣄⠙⣦⡄", + U"⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⣼⣀⣠⠔⣁⣠⣴⣾⠀⠀⠀⠀⠀⠀⠀⠱⡀⠤⠘⠿⡿⠁⠈⣴", + U"⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡆⠀⣿⣿⣿⢿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠉⠒⠒⠉⠀⠀⠀⢺", + U"⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⢰⣏⠊⢕⡒⠾⡯⣭⣽⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠏", + U"⠀⠀⠀⠀⠀⠀⠀⠀⠀⡿⠀⣼⠈⠀⠀⠈⠉⠙⠋⠋⡇⠔⠁⠀⠀⠀⠀⠀⡀⠀⢠⣀⣤⠾⠁⠀", + U" ⢠⡇⠀⠏⠀⠀⠀⠀⠀⠀⠀⠀⢙⠦⠒⠒⢺⣁⠤⠊⠧⠔⢡⡟⠁⠀⠀ ", + U"⠀⠀⠀⠀⠀⠀⠀⠀⣸⠂⢸⡀⠀⠀⠀⠀⠀⣀⠤⠄⠛⠂⠀⠐⠊⠁⠀⠀⠀⠀⠈⣣⠀⠀⠀⠀", + U"⠀⠀⠀⠀⠀⠀⠀⠀⡟⠀⢸⠀⠀⠀⠀⢠⣞⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⡀⠀⠀⠀", + U"⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠸⡄⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⡏⠀⠀⠀⠀", + U"⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀⠀⢱⡀⠀⢰⡇⠀⠀⠀⠀⠀⢠⣀⠀⠀⠀⠀⠀⢠⠀⢹⠀⠀⠀⠀⠀", + U"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⣕⣊⠹⢆⣼⡧⡀⠀⠀⠀⠀⠀⠳⢨⠀⠀⠀⠀⡆⠀⣿⠀⠀⠀⠀⠀", + U"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠪⢗⢠⠀⠳⡌⠒⠀⠀⠀⠀⠀⠀⡆⠀⠀⢰⠁⠈⠇⠀⠀⠀⠀⠀", + U"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠁⠓⢿⣤⣀⠀⠀⠀⠀⠀⣇⠀⠀⣸⠈⠉⢳⠀⠀⠀⠀⠀", + U"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠶⢤⣄⡀⠀⢀⣸⡄⠀⣠⣱⡼⠟⠀⠀⠀⠀⠀", + U"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠈⠑⠋⠉⠁⠀⠀⠀⠀⠀⠀"}; + // clang-format on + size_t lines = sizeof(art) / sizeof(art[0]); + for (short i = 0; i < y_win - lines - 1; i++) { + printf("\n"); + } + for (size_t i = 0; i < lines; i++) { + char32_t *line = art[i]; + size_t line_len = strlen_char32_rma(line); + for (short k = 0; k < (x_win - line_len) / 2; k++) { + printf(" "); + } + for (size_t j = 0; j < line_len; j++) { + if ((i + x > (line_len - j) / 3 + 18) && clear) { + printf(" "); + continue; + } + if (!clear) { + if ((i + 10 < x + j / 3) && x > 0) { + printf("\033[0m"); + } else if ((i + 10 < x + j / 3 + 1) && x > 0) { + printf("\033[37m"); + } else { + printf("\033[38;2;254;228;208m"); + } + } + char character[64] = { '\0' }; + mbstate_t state = { 0 }; + size_t len = c32rtomb(character, line[j], &state); + if (len == (size_t)-1) { + perror("c32rtomb"); + return; + } + character[len] = '\0'; + printf("%s", character); + fflush(stdout); + } + printf("\n"); + } + printf("\033[0m"); +} +void rurima_QwQ() +{ + struct winsize w; + ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); + x_win = w.ws_col; + y_win = w.ws_row; + if (x_win < 60 || y_win < 30) { + fprintf(stderr, "Please resize your terminal to at least 60x30 and try again.\n"); + return; + } + printf("\033[?25l"); + printf("\033[?1049h"); + setlocale(LC_CTYPE, ""); + printf("\033[H\033[2J"); + print_art(0, false); + sleep(2); + for (int i = 0; i < 30; i++) { + printf("\033[H\033[2J"); + print_art(i, false); + usleep(100000); + } + sleep(2); + for (int i = 0; i < 30; i++) { + printf("\033[H\033[2J"); + print_art(i, true); + usleep(50000); + } + printf("\033[H\033[2J"); + printf("\033[?1049l"); + printf("\033[?25h"); +} \ No newline at end of file diff --git a/src/easteregg/daijin.h b/src/easteregg/daijin.h new file mode 100644 index 0000000..baa7afe --- /dev/null +++ b/src/easteregg/daijin.h @@ -0,0 +1,27 @@ +// NOLINTBEGIN +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// This program should be compiled with -lpthread. +#include +#ifndef _Nullable +#define _Nullable +#endif +#ifndef _Nonnull +#define _Nonnull +#endif +void rurima_QwQ(); +// NOLINTEND \ No newline at end of file diff --git a/src/include/rurima.h b/src/include/rurima.h index 2c9bf7d..7e97dbc 100644 --- a/src/include/rurima.h +++ b/src/include/rurima.h @@ -68,6 +68,7 @@ #include "version.h" #include "../ruri/src/include/ruri.h" #include "../catsh/src/include/catsh.h" +#include "../easteregg/daijin.h" struct RURIMA_CONFIG { char *_Nonnull docker_mirror; char *_Nonnull lxc_mirror; diff --git a/src/main.c b/src/main.c index d5b66fe..fe081a4 100644 --- a/src/main.c +++ b/src/main.c @@ -275,6 +275,10 @@ int main(int argc, char **argv) rurima_load_rootfs(argc - i - 1, &argv[i + 1]); return 0; } + if (strcmp(argv[i], "QwQ") == 0) { + rurima_QwQ(); + return 0; + } show_help(); rurima_error("{red}Invalid subcommand `%s`!\n", argv[i]); return 1; From da82abde2f0ed7f6e88185dcf257999467a1242e Mon Sep 17 00:00:00 2001 From: Moe-hacker Date: Thu, 13 Nov 2025 23:14:25 +0800 Subject: [PATCH 03/16] non: update easteregg --- src/easteregg/daijin.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/easteregg/daijin.c b/src/easteregg/daijin.c index 33cd2c8..dc57ce0 100644 --- a/src/easteregg/daijin.c +++ b/src/easteregg/daijin.c @@ -40,12 +40,14 @@ static void print_art(int x, bool clear) for (short i = 0; i < y_win - lines - 1; i++) { printf("\n"); } + fflush(stdout); for (size_t i = 0; i < lines; i++) { char32_t *line = art[i]; size_t line_len = strlen_char32_rma(line); for (short k = 0; k < (x_win - line_len) / 2; k++) { printf(" "); } + fflush(stdout); for (size_t j = 0; j < line_len; j++) { if ((i + x > (line_len - j) / 3 + 18) && clear) { printf(" "); @@ -59,6 +61,7 @@ static void print_art(int x, bool clear) } else { printf("\033[38;2;254;228;208m"); } + fflush(stdout); } char character[64] = { '\0' }; mbstate_t state = { 0 }; @@ -74,6 +77,7 @@ static void print_art(int x, bool clear) printf("\n"); } printf("\033[0m"); + fflush(stdout); } void rurima_QwQ() { From b9368040f1fc2db9c42f63f738ba2fd9c078eff5 Mon Sep 17 00:00:00 2001 From: Moe-hacker Date: Thu, 13 Nov 2025 23:16:09 +0800 Subject: [PATCH 04/16] non: update easteregg --- src/easteregg/daijin.c | 31 ++++++++++++++++++++++++++++++- src/easteregg/daijin.h | 34 +++++++++++++++++++++++++++++++--- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/src/easteregg/daijin.c b/src/easteregg/daijin.c index dc57ce0..fb130d5 100644 --- a/src/easteregg/daijin.c +++ b/src/easteregg/daijin.c @@ -1,3 +1,32 @@ +// SPDX-License-Identifier: MIT +/* + * + * This file is part of rurima, with ABSOLUTELY NO WARRANTY. + * + * MIT License + * + * Copyright (c) 2025 Moe-hacker + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * + */ #include "daijin.h" // NOLINTNEXTLINE static short x_win, y_win; @@ -79,7 +108,7 @@ static void print_art(int x, bool clear) printf("\033[0m"); fflush(stdout); } -void rurima_QwQ() +void rurima_QwQ(void) { struct winsize w; ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); diff --git a/src/easteregg/daijin.h b/src/easteregg/daijin.h index baa7afe..d5a50d5 100644 --- a/src/easteregg/daijin.h +++ b/src/easteregg/daijin.h @@ -1,4 +1,33 @@ -// NOLINTBEGIN +// SPDX-License-Identifier: MIT +/* + * + * This file is part of rurima, with ABSOLUTELY NO WARRANTY. + * + * MIT License + * + * Copyright (c) 2025 Moe-hacker + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * + */ +// NOLINTERNEXTLINE #define _GNU_SOURCE #include #include @@ -23,5 +52,4 @@ #ifndef _Nonnull #define _Nonnull #endif -void rurima_QwQ(); -// NOLINTEND \ No newline at end of file +void rurima_QwQ(void); \ No newline at end of file From 8601758365f7c8342323aba63cd05d923eb15f3e Mon Sep 17 00:00:00 2001 From: Moe-hacker Date: Thu, 13 Nov 2025 23:39:52 +0800 Subject: [PATCH 05/16] non: update easteregg --- src/easteregg/daijin.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/easteregg/daijin.c b/src/easteregg/daijin.c index fb130d5..049ed53 100644 --- a/src/easteregg/daijin.c +++ b/src/easteregg/daijin.c @@ -126,12 +126,14 @@ void rurima_QwQ(void) sleep(2); for (int i = 0; i < 30; i++) { printf("\033[H\033[2J"); + fflush(stdout); print_art(i, false); usleep(100000); } sleep(2); for (int i = 0; i < 30; i++) { printf("\033[H\033[2J"); + fflush(stdout); print_art(i, true); usleep(50000); } From ed59ab2ead88d07ffcd561b2320054a2166031c7 Mon Sep 17 00:00:00 2001 From: DreamConnected <1487442471@qq.com> Date: Sat, 15 Nov 2025 19:39:22 +0800 Subject: [PATCH 06/16] meson.build: add easteregg daijin, add new build flag DreamConnected <1487442471@qq.com> --- meson.build | 6 ++++-- src/meson.build | 5 ----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/meson.build b/meson.build index 1cad3d5..54c3cf4 100644 --- a/meson.build +++ b/meson.build @@ -27,7 +27,8 @@ common_cc_flags = [ '-Wno-unused-parameter', '-Wno-unused-but-set-variable', '-Wno-missing-field-initializers', - '-Wno-gnu-zero-variadic-macro-arguments' + '-Wno-gnu-zero-variadic-macro-arguments', + '-Wno-incompatible-pointer-types-discards-qualifiers' ] add_project_arguments(cc.get_supported_arguments(common_cc_flags), language: 'c') @@ -81,7 +82,8 @@ rurima_sources = [ 'src/net.c', 'src/shared.c', 'src/signal.c', - 'src/subcommand.c' + 'src/subcommand.c', + 'src/easteregg/daijin.c', ] rurima_deps = [ diff --git a/src/meson.build b/src/meson.build index 99df7b6..6c6c5ed 100644 --- a/src/meson.build +++ b/src/meson.build @@ -1,8 +1,3 @@ -# Rurima includes. -rurima_includes = include_directories( - 'include', - 'ruri') - ## libcatsh libcatsh_include_dir = include_directories('catsh/src/include') From b8f965f88d25d48dd6b1adf32e2978cb1b90d1f6 Mon Sep 17 00:00:00 2001 From: Moe-hacker Date: Thu, 20 Nov 2025 18:03:29 +0800 Subject: [PATCH 07/16] doc: update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 30a2b22..bffe543 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,10 @@ [![Build release](https://github.com/RuriOSS/rurima/actions/workflows/build.yml/badge.svg)](https://github.com/RuriOSS/rurima/actions/workflows/build.yml) ![](https://img.shields.io/badge/Powered%20By-GNU%20C-00d000?style=flat&labelColor=gray&logo=C) + +# Send us your feedback! +Your use case, your suggestions, and some ideas, anyway, we would love to hear from you! +[Discussions](https://github.com/RuriOSS/rurima/discussions/16) # What's new: - Some other OCI compatible registry support like ghcr.io could work with `-f/--fallback` option enabled now. # The first release: From c4491ae3e3e51313daf696ad1f37b59fa3c90279 Mon Sep 17 00:00:00 2001 From: Moe-hacker Date: Sun, 23 Nov 2025 21:19:45 +0800 Subject: [PATCH 08/16] non: sync catsh update --- src/catsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/catsh b/src/catsh index 10cd136..0323143 160000 --- a/src/catsh +++ b/src/catsh @@ -1 +1 @@ -Subproject commit 10cd1368bbd1bd5b34214b05114fee9aeaba8b11 +Subproject commit 032314350ae0fac7f7f9b5d07a070267b70e66ae From af44f4a8049fc8f82cf49459a42cf9f1815ed68d Mon Sep 17 00:00:00 2001 From: Moe-hacker Date: Sun, 23 Nov 2025 21:24:47 +0800 Subject: [PATCH 09/16] non: update version code --- src/info.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/info.c b/src/info.c index 6d8a537..8ea5973 100644 --- a/src/info.c +++ b/src/info.c @@ -52,8 +52,8 @@ void rurima_show_version_info(void) #if defined(RURI_COMMIT_ID) cprintf("{base}%s%s%s", "built-in ruri commit id .........: ", RURI_COMMIT_ID, "\n"); #endif -#if defined(LIBCAP_MAJOR) && defined(LIBCAP_MINOR) - cprintf("{base}%s%d%s%d%s", "libcap ..........................: ", LIBCAP_MAJOR, ".", LIBCAP_MINOR, "\n"); +#if defined(CTH_VERSION_STRING) + cprintf("{base}%s%s%s", "built-in catsh version ..........: ", CTH_VERSION_STRING, "\n"); #endif cprintf("{base}%s%s\n", "Compiler version ................: ", __VERSION__); cprintf("{base}%s%s\n", "Build date ......................: ", __TIMESTAMP__); From aa498f5149c7f2eeb4004cd73229e302a113747d Mon Sep 17 00:00:00 2001 From: Moe-hacker Date: Sun, 23 Nov 2025 21:26:45 +0800 Subject: [PATCH 10/16] non: sync catsh update --- src/catsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/catsh b/src/catsh index 0323143..a76391e 160000 --- a/src/catsh +++ b/src/catsh @@ -1 +1 @@ -Subproject commit 032314350ae0fac7f7f9b5d07a070267b70e66ae +Subproject commit a76391e63d33828c6e16a1372464f3824ad422ee From 8548afa020d34f00258297d9b8f3a596a750d2b1 Mon Sep 17 00:00:00 2001 From: Moe-hacker Date: Sun, 23 Nov 2025 21:47:13 +0800 Subject: [PATCH 11/16] non: improve performance of show_progress() --- src/archive.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/archive.c b/src/archive.c index a133227..1fb8c86 100644 --- a/src/archive.c +++ b/src/archive.c @@ -168,6 +168,14 @@ static void show_progress(double per) if (rurima_global_config.no_progress) { return; } + if (per < 0.0 || per > 1.0) { + return; + } + static double last_per = 0.0; + if (per - last_per < 0.005 && per < 1.0) { + return; + } + last_per = per; struct winsize size; ioctl(STDOUT_FILENO, TIOCGWINSZ, &size); unsigned short width = size.ws_col - 10; @@ -188,6 +196,7 @@ static void show_progress_with_line(float per, int line) { /* * Show progress bar. + * Callback function for cth_exec_with_file_input(). */ if (rurima_global_config.no_progress) { return; From 834cb750f5055ac404982099573b69ec98e00b54 Mon Sep 17 00:00:00 2001 From: Moe-hacker Date: Sun, 23 Nov 2025 22:07:07 +0800 Subject: [PATCH 12/16] doc: update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bffe543..5f4589f 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,11 @@ # Send us your feedback! Your use case, your suggestions, and some ideas, anyway, we would love to hear from you! -[Discussions](https://github.com/RuriOSS/rurima/discussions/16) +[Discussions](https://github.com/RuriOSS/rurima/discussions/16) +# Also, keep up to date: +Some updates and news will be posted on: +[Twitter(X)](https://x.com/RuriOSS) +And, dont forget to `rurima ota` to get the latest build! # What's new: - Some other OCI compatible registry support like ghcr.io could work with `-f/--fallback` option enabled now. # The first release: From 38f7159c527d052975bb12f5f1511a5571440f54 Mon Sep 17 00:00:00 2001 From: Moe-hacker Date: Mon, 24 Nov 2025 10:51:16 +0800 Subject: [PATCH 13/16] feat: import ssfx submodule --- .gitignore | 1 + .gitmodules | 3 +++ Makefile | 9 +++++++-- build.c | 6 ++++++ src/catsh | 2 +- src/include/rurima.h | 4 +++- src/main.c | 4 ++++ src/ruri | 2 +- src/ssfx | 1 + src/subcommand.c | 34 ++++++++++++++++++++++++++++++++++ 10 files changed, 61 insertions(+), 5 deletions(-) create mode 160000 src/ssfx diff --git a/.gitignore b/.gitignore index 8062af6..1e5190e 100644 --- a/.gitignore +++ b/.gitignore @@ -65,3 +65,4 @@ docs/.vitepress/cache docs/.vitepress/.temp docs/.vitepress/dist node_modules +sfx \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index 5edc699..fe8db4c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "src/catsh"] path = src/catsh url = https://github.com/rurioss/catsh +[submodule "src/ssfx"] + path = src/ssfx + url = https://github.com/rurioss/ssfx diff --git a/Makefile b/Makefile index ef67188..38ba7d3 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ CHECKER = clang-tidy CHECKER_FLAGS = --checks=*,-clang-analyzer-security.insecureAPI.strcpy,-altera-unroll-loops,-cert-err33-c,-concurrency-mt-unsafe,-clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling,-readability-function-cognitive-complexity,-cppcoreguidelines-avoid-magic-numbers,-readability-magic-numbers,-bugprone-easily-swappable-parameters,-cert-err34-c,-misc-include-cleaner,-readability-identifier-length,-bugprone-signal-handler,-cert-msc54-cpp,-cert-sig30-c,-altera-id-dependent-backward-branch,-bugprone-suspicious-realloc-usage,-hicpp-signed-bitwise,-clang-analyzer-security.insecureAPI.UncheckedReturn -include config.mk # Target. -objects = easteregg/daijin.o catsh/src/catsh.o net.o checkdep.o dockerhub.o exec.o info.o lxcmirror.o shared.o signal.o archive.o subcommand.o main.o ruri/src/easteregg/action.o ruri/src/easteregg/nekofeng.o ruri/src/easteregg/layer.o ruri/src/easteregg/typewriter.o ruri/src/caplist.o ruri/src/chroot.o ruri/src/cprintf.o ruri/src/info.o ruri/src/rurienv.o ruri/src/rurifetch.o ruri/src/seccomp.o ruri/src/signal.o ruri/src/umount.o ruri/src/unshare.o ruri/src/rootless.o ruri/src/mount.o ruri/src/k2v.o ruri/src/elf-magic.o ruri/src/config.o ruri/src/cgroup.o ruri/src/passwd.o ruri/src/ps.o ruri/src/ruri.o +objects = ssfx/ssfx.o easteregg/daijin.o catsh/src/catsh.o net.o checkdep.o dockerhub.o exec.o info.o lxcmirror.o shared.o signal.o archive.o subcommand.o main.o ruri/src/easteregg/action.o ruri/src/easteregg/nekofeng.o ruri/src/easteregg/layer.o ruri/src/easteregg/typewriter.o ruri/src/caplist.o ruri/src/chroot.o ruri/src/cprintf.o ruri/src/info.o ruri/src/rurienv.o ruri/src/rurifetch.o ruri/src/seccomp.o ruri/src/signal.o ruri/src/umount.o ruri/src/unshare.o ruri/src/rootless.o ruri/src/mount.o ruri/src/k2v.o ruri/src/elf-magic.o ruri/src/config.o ruri/src/cgroup.o ruri/src/passwd.o ruri/src/ps.o ruri/src/ruri.o O = out BIN_TARGET = rurima .NOTPARALLEL: @@ -75,6 +75,7 @@ build_dir: @mkdir -p $(O)/ruri/src @mkdir -p $(O)/ruri/src/easteregg @mkdir -p $(O)/catsh/src + @mkdir -p $(O)/ssfx $(objects) :%.o:src/%.c $(build_dir) @cd $(O) @$(CC) $(CFLAGS) -c ../$< -o $@ @@ -103,4 +104,8 @@ help : @echo " make clean clean" @echo "Only for developers:" @echo " make check run clang-tidy" - @echo " make format format code" \ No newline at end of file + @echo " make format format code" +up : + git submodule update --init --recursive + git submodule foreach git pull origin main + git submodule foreach git checkout main \ No newline at end of file diff --git a/build.c b/build.c index 802453f..c56e1a9 100644 --- a/build.c +++ b/build.c @@ -665,6 +665,12 @@ void build() for (int i = 0; easteregg_rma_files && easteregg_rma_files[i] != NULL; i++) { add_args(&files, easteregg_rma_files[i]); } + char ssfx_src[PATH_MAX]; + sprintf(ssfx_src, "%s/ssfx", SRC_DIR); + char **ssfx_files = find_file(ssfx_src, ".c", (char *[]){ "main.c", NULL }); + for (int i = 0; ssfx_files && ssfx_files[i] != NULL; i++) { + add_args(&files, ssfx_files[i]); + } compile_files_parallel(files, JOBS); free_args(easteregg_files); free_args(easteregg_rma_files); diff --git a/src/catsh b/src/catsh index a76391e..9aff401 160000 --- a/src/catsh +++ b/src/catsh @@ -1 +1 @@ -Subproject commit a76391e63d33828c6e16a1372464f3824ad422ee +Subproject commit 9aff401e13a96664563c8e1d3b2c1e48d969ab57 diff --git a/src/include/rurima.h b/src/include/rurima.h index 7e97dbc..04df23e 100644 --- a/src/include/rurima.h +++ b/src/include/rurima.h @@ -69,6 +69,7 @@ #include "../ruri/src/include/ruri.h" #include "../catsh/src/include/catsh.h" #include "../easteregg/daijin.h" +#include "../ssfx/include/ssfx.h" struct RURIMA_CONFIG { char *_Nonnull docker_mirror; char *_Nonnull lxc_mirror; @@ -201,4 +202,5 @@ void rurima_ota(void); void rurima_run(int argc, char **_Nonnull argv); void rurima_netns_wrapper(int argc, char **argv); void rurima_load_rootfs(int argc, char **argv); -void rurima_docker_print_config_from_json(const char *_Nonnull config, const char *_Nonnull savedir); \ No newline at end of file +void rurima_docker_print_config_from_json(const char *_Nonnull config, const char *_Nonnull savedir); +void rurima_sfx(int argc, char **argv); \ No newline at end of file diff --git a/src/main.c b/src/main.c index fe081a4..e727c62 100644 --- a/src/main.c +++ b/src/main.c @@ -279,6 +279,10 @@ int main(int argc, char **argv) rurima_QwQ(); return 0; } + if (strcmp(argv[i], "sfx") == 0) { + rurima_sfx(argc - i - 1, &argv[i + 1]); + return 0; + } show_help(); rurima_error("{red}Invalid subcommand `%s`!\n", argv[i]); return 1; diff --git a/src/ruri b/src/ruri index 442f516..2e92fa6 160000 --- a/src/ruri +++ b/src/ruri @@ -1 +1 @@ -Subproject commit 442f516dd4272545fe659d15c24235c3e0c82123 +Subproject commit 2e92fa6710be1314ab36cf0787d4f2a7e24efbf2 diff --git a/src/ssfx b/src/ssfx new file mode 160000 index 0000000..2c58626 --- /dev/null +++ b/src/ssfx @@ -0,0 +1 @@ +Subproject commit 2c5862681e5109a3cb4b214ab095faa14586d90a diff --git a/src/subcommand.c b/src/subcommand.c index 98ac747..ae4d8fe 100644 --- a/src/subcommand.c +++ b/src/subcommand.c @@ -869,4 +869,38 @@ void rurima_load_rootfs(int argc, char **argv) rurima_check_dir_deny_list(tmp_dir); cth_exec_command((char *[]){ "rm", "-rf", tmp_dir, NULL }); exit(0); +} +void rurima_sfx(int argc, char **_Nonnull argv) +{ + // + if (self_is_valid_ssfx_master()) { + rurima_log("{base}This is a valid rurima sfx master executable.\n"); + } else if (self_is_valid_ssfx_pack()) { + rurima_log("{base}This is a valid rurima sfx packed executable.\n"); + } else if (self_is_valid_ssfx_other()) { + rurima_log("{base}This is a valid rurima sfx other executable.\n"); + } else { + rurima_log("{base}This is not a valid rurima sfx executable.\n"); + } + cprintf("{red}Warning: rurima sfx feature is in development, do not use it anyway!\n"); + // + if (argc == 0) { + rurima_error("{red}No subcommand specified!\n"); + } + if (strcmp(argv[0], "pack-self") == 0) { + if (argc < 3) { + rurima_error("{red}Usage: rurima sfx pack-self \n"); + } + char *tar_exe_path = argv[1]; + char *output_file = argv[2]; + rurima_check_dir_deny_list(output_file); + pack_ssfx_master(tar_exe_path, output_file); + cprintf("{yellow}Warning: this feature is only for developers!\n"); + cprintf("{yellow}Warning: make sure that tar and rurima executable are compatible with target system!\n"); + cprintf("{yellow}Warning: make sure that tar and rurima executable are statically linked!\n"); + exit(0); + } + if (!self_is_valid_ssfx_master()) { + rurima_error("{red}This executable is not a valid rurima sfx master!\n"); + } } \ No newline at end of file From 85a01943318a57386b828303d49af754e65f3dc7 Mon Sep 17 00:00:00 2001 From: Moe-hacker Date: Mon, 24 Nov 2025 10:53:27 +0800 Subject: [PATCH 14/16] non: update info.c --- src/info.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/info.c b/src/info.c index 8ea5973..d1fbadc 100644 --- a/src/info.c +++ b/src/info.c @@ -54,6 +54,9 @@ void rurima_show_version_info(void) #endif #if defined(CTH_VERSION_STRING) cprintf("{base}%s%s%s", "built-in catsh version ..........: ", CTH_VERSION_STRING, "\n"); +#endif +#if defined(SSFX_VERSION_STRING) + cprintf("{base}%s%s%s", "built-in ssfx version ...........: ", SSFX_VERSION_STRING, "\n"); #endif cprintf("{base}%s%s\n", "Compiler version ................: ", __VERSION__); cprintf("{base}%s%s\n", "Build date ......................: ", __TIMESTAMP__); From 2290f26e1467264fa95b7262b1133cd3ad9687f9 Mon Sep 17 00:00:00 2001 From: DreamConnected <1487442471@qq.com> Date: Tue, 25 Nov 2025 16:03:57 +0800 Subject: [PATCH 15/16] git module: add sfx --- .gitignore | 1 + .gitmodules | 7 +++++-- Makefile | 9 +++++++-- README.md | 8 ++++++++ build.c | 6 ++++++ src/archive.c | 9 +++++++++ src/catsh | 2 +- src/include/rurima.h | 4 +++- src/info.c | 7 +++++-- src/main.c | 4 ++++ src/ruri | 2 +- 11 files changed, 50 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 8062af6..1e5190e 100644 --- a/.gitignore +++ b/.gitignore @@ -65,3 +65,4 @@ docs/.vitepress/cache docs/.vitepress/.temp docs/.vitepress/dist node_modules +sfx \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index 1672fdd..fe8db4c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,9 @@ [submodule "src/ruri"] path = src/ruri - url = https://github.com/RuriOSS/ruri + url = https://github.com/Moe-hacker/ruri [submodule "src/catsh"] path = src/catsh - url = https://github.com/RuriOSS/catsh + url = https://github.com/rurioss/catsh +[submodule "src/ssfx"] + path = src/ssfx + url = https://github.com/rurioss/ssfx diff --git a/Makefile b/Makefile index ef67188..38ba7d3 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ CHECKER = clang-tidy CHECKER_FLAGS = --checks=*,-clang-analyzer-security.insecureAPI.strcpy,-altera-unroll-loops,-cert-err33-c,-concurrency-mt-unsafe,-clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling,-readability-function-cognitive-complexity,-cppcoreguidelines-avoid-magic-numbers,-readability-magic-numbers,-bugprone-easily-swappable-parameters,-cert-err34-c,-misc-include-cleaner,-readability-identifier-length,-bugprone-signal-handler,-cert-msc54-cpp,-cert-sig30-c,-altera-id-dependent-backward-branch,-bugprone-suspicious-realloc-usage,-hicpp-signed-bitwise,-clang-analyzer-security.insecureAPI.UncheckedReturn -include config.mk # Target. -objects = easteregg/daijin.o catsh/src/catsh.o net.o checkdep.o dockerhub.o exec.o info.o lxcmirror.o shared.o signal.o archive.o subcommand.o main.o ruri/src/easteregg/action.o ruri/src/easteregg/nekofeng.o ruri/src/easteregg/layer.o ruri/src/easteregg/typewriter.o ruri/src/caplist.o ruri/src/chroot.o ruri/src/cprintf.o ruri/src/info.o ruri/src/rurienv.o ruri/src/rurifetch.o ruri/src/seccomp.o ruri/src/signal.o ruri/src/umount.o ruri/src/unshare.o ruri/src/rootless.o ruri/src/mount.o ruri/src/k2v.o ruri/src/elf-magic.o ruri/src/config.o ruri/src/cgroup.o ruri/src/passwd.o ruri/src/ps.o ruri/src/ruri.o +objects = ssfx/ssfx.o easteregg/daijin.o catsh/src/catsh.o net.o checkdep.o dockerhub.o exec.o info.o lxcmirror.o shared.o signal.o archive.o subcommand.o main.o ruri/src/easteregg/action.o ruri/src/easteregg/nekofeng.o ruri/src/easteregg/layer.o ruri/src/easteregg/typewriter.o ruri/src/caplist.o ruri/src/chroot.o ruri/src/cprintf.o ruri/src/info.o ruri/src/rurienv.o ruri/src/rurifetch.o ruri/src/seccomp.o ruri/src/signal.o ruri/src/umount.o ruri/src/unshare.o ruri/src/rootless.o ruri/src/mount.o ruri/src/k2v.o ruri/src/elf-magic.o ruri/src/config.o ruri/src/cgroup.o ruri/src/passwd.o ruri/src/ps.o ruri/src/ruri.o O = out BIN_TARGET = rurima .NOTPARALLEL: @@ -75,6 +75,7 @@ build_dir: @mkdir -p $(O)/ruri/src @mkdir -p $(O)/ruri/src/easteregg @mkdir -p $(O)/catsh/src + @mkdir -p $(O)/ssfx $(objects) :%.o:src/%.c $(build_dir) @cd $(O) @$(CC) $(CFLAGS) -c ../$< -o $@ @@ -103,4 +104,8 @@ help : @echo " make clean clean" @echo "Only for developers:" @echo " make check run clang-tidy" - @echo " make format format code" \ No newline at end of file + @echo " make format format code" +up : + git submodule update --init --recursive + git submodule foreach git pull origin main + git submodule foreach git checkout main \ No newline at end of file diff --git a/README.md b/README.md index 30a2b22..5f4589f 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,14 @@ [![Build release](https://github.com/RuriOSS/rurima/actions/workflows/build.yml/badge.svg)](https://github.com/RuriOSS/rurima/actions/workflows/build.yml) ![](https://img.shields.io/badge/Powered%20By-GNU%20C-00d000?style=flat&labelColor=gray&logo=C) + +# Send us your feedback! +Your use case, your suggestions, and some ideas, anyway, we would love to hear from you! +[Discussions](https://github.com/RuriOSS/rurima/discussions/16) +# Also, keep up to date: +Some updates and news will be posted on: +[Twitter(X)](https://x.com/RuriOSS) +And, dont forget to `rurima ota` to get the latest build! # What's new: - Some other OCI compatible registry support like ghcr.io could work with `-f/--fallback` option enabled now. # The first release: diff --git a/build.c b/build.c index 802453f..c56e1a9 100644 --- a/build.c +++ b/build.c @@ -665,6 +665,12 @@ void build() for (int i = 0; easteregg_rma_files && easteregg_rma_files[i] != NULL; i++) { add_args(&files, easteregg_rma_files[i]); } + char ssfx_src[PATH_MAX]; + sprintf(ssfx_src, "%s/ssfx", SRC_DIR); + char **ssfx_files = find_file(ssfx_src, ".c", (char *[]){ "main.c", NULL }); + for (int i = 0; ssfx_files && ssfx_files[i] != NULL; i++) { + add_args(&files, ssfx_files[i]); + } compile_files_parallel(files, JOBS); free_args(easteregg_files); free_args(easteregg_rma_files); diff --git a/src/archive.c b/src/archive.c index a133227..1fb8c86 100644 --- a/src/archive.c +++ b/src/archive.c @@ -168,6 +168,14 @@ static void show_progress(double per) if (rurima_global_config.no_progress) { return; } + if (per < 0.0 || per > 1.0) { + return; + } + static double last_per = 0.0; + if (per - last_per < 0.005 && per < 1.0) { + return; + } + last_per = per; struct winsize size; ioctl(STDOUT_FILENO, TIOCGWINSZ, &size); unsigned short width = size.ws_col - 10; @@ -188,6 +196,7 @@ static void show_progress_with_line(float per, int line) { /* * Show progress bar. + * Callback function for cth_exec_with_file_input(). */ if (rurima_global_config.no_progress) { return; diff --git a/src/catsh b/src/catsh index 10cd136..9aff401 160000 --- a/src/catsh +++ b/src/catsh @@ -1 +1 @@ -Subproject commit 10cd1368bbd1bd5b34214b05114fee9aeaba8b11 +Subproject commit 9aff401e13a96664563c8e1d3b2c1e48d969ab57 diff --git a/src/include/rurima.h b/src/include/rurima.h index 7e97dbc..04df23e 100644 --- a/src/include/rurima.h +++ b/src/include/rurima.h @@ -69,6 +69,7 @@ #include "../ruri/src/include/ruri.h" #include "../catsh/src/include/catsh.h" #include "../easteregg/daijin.h" +#include "../ssfx/include/ssfx.h" struct RURIMA_CONFIG { char *_Nonnull docker_mirror; char *_Nonnull lxc_mirror; @@ -201,4 +202,5 @@ void rurima_ota(void); void rurima_run(int argc, char **_Nonnull argv); void rurima_netns_wrapper(int argc, char **argv); void rurima_load_rootfs(int argc, char **argv); -void rurima_docker_print_config_from_json(const char *_Nonnull config, const char *_Nonnull savedir); \ No newline at end of file +void rurima_docker_print_config_from_json(const char *_Nonnull config, const char *_Nonnull savedir); +void rurima_sfx(int argc, char **argv); \ No newline at end of file diff --git a/src/info.c b/src/info.c index 6d8a537..d1fbadc 100644 --- a/src/info.c +++ b/src/info.c @@ -52,8 +52,11 @@ void rurima_show_version_info(void) #if defined(RURI_COMMIT_ID) cprintf("{base}%s%s%s", "built-in ruri commit id .........: ", RURI_COMMIT_ID, "\n"); #endif -#if defined(LIBCAP_MAJOR) && defined(LIBCAP_MINOR) - cprintf("{base}%s%d%s%d%s", "libcap ..........................: ", LIBCAP_MAJOR, ".", LIBCAP_MINOR, "\n"); +#if defined(CTH_VERSION_STRING) + cprintf("{base}%s%s%s", "built-in catsh version ..........: ", CTH_VERSION_STRING, "\n"); +#endif +#if defined(SSFX_VERSION_STRING) + cprintf("{base}%s%s%s", "built-in ssfx version ...........: ", SSFX_VERSION_STRING, "\n"); #endif cprintf("{base}%s%s\n", "Compiler version ................: ", __VERSION__); cprintf("{base}%s%s\n", "Build date ......................: ", __TIMESTAMP__); diff --git a/src/main.c b/src/main.c index fe081a4..e727c62 100644 --- a/src/main.c +++ b/src/main.c @@ -279,6 +279,10 @@ int main(int argc, char **argv) rurima_QwQ(); return 0; } + if (strcmp(argv[i], "sfx") == 0) { + rurima_sfx(argc - i - 1, &argv[i + 1]); + return 0; + } show_help(); rurima_error("{red}Invalid subcommand `%s`!\n", argv[i]); return 1; diff --git a/src/ruri b/src/ruri index 442f516..2e92fa6 160000 --- a/src/ruri +++ b/src/ruri @@ -1 +1 @@ -Subproject commit 442f516dd4272545fe659d15c24235c3e0c82123 +Subproject commit 2e92fa6710be1314ab36cf0787d4f2a7e24efbf2 From 936ec3b08c835b919f32fdaacb8b6113e450fa82 Mon Sep 17 00:00:00 2001 From: DreamConnected <1487442471@qq.com> Date: Wed, 26 Nov 2025 08:46:48 +0800 Subject: [PATCH 16/16] sync upstream changes, add libssfx DreamConnected <1487442471@qq.com> --- meson.build | 37 +++++++++++++++++++++++++++---------- src/meson.build | 28 ++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 10 deletions(-) diff --git a/meson.build b/meson.build index 54c3cf4..5abbfba 100644 --- a/meson.build +++ b/meson.build @@ -19,20 +19,35 @@ libruri_dependencies = [] ## Build flags common_cc_flags = [ '-Wno-pedantic', - '-Wno-newline-eof', '-Wno-sign-compare', '-Wno-unused-result', '-Wno-unused-variable', '-Wno-unused-function', '-Wno-unused-parameter', '-Wno-unused-but-set-variable', - '-Wno-missing-field-initializers', + '-Wno-missing-field-initializers' +] + +gcc_cc_flags = [ + '-Wno-restrict', + '-Wno-format-overflow', + '-Wno-discarded-qualifiers' +] + +clang_cc_flags = [ + '-Wno-newline-eof', '-Wno-gnu-zero-variadic-macro-arguments', '-Wno-incompatible-pointer-types-discards-qualifiers' ] add_project_arguments(cc.get_supported_arguments(common_cc_flags), language: 'c') +if cc.get_id() == 'clang' + add_project_arguments(cc.get_supported_arguments(clang_cc_flags), language: 'c') +else + add_project_arguments(cc.get_supported_arguments(gcc_cc_flags), language: 'c') +endif + libruri_version = '3.9.3' prefixdir = get_option('prefix') @@ -45,26 +60,28 @@ want_cap = get_option('cap') want_seccomp = get_option('seccomp') ## Cap. +libcap = dependency('libcap', required: false) if want_cap - libcap = dependency('libcap', required: false) pkgconfig_libs += libcap libruri_dependencies += libcap if libcap.found() == false add_project_arguments(cc.get_supported_arguments('-DDISABLE_LIBCAP=on'), language: 'c') endif else + libcap.found() == false add_project_arguments(cc.get_supported_arguments('-DDISABLE_LIBCAP=on'), language: 'c') endif ## Seccomp. +libseccomp = dependency('libseccomp', required: false) if want_seccomp - libseccomp = dependency('libseccomp', required: false) pkgconfig_libs += libseccomp libruri_dependencies += libseccomp if libseccomp.found() == false add_project_arguments(cc.get_supported_arguments('-DDISABLE_LIBSECCOMP=on'), language: 'c') endif else + libseccomp.found() == false add_project_arguments(cc.get_supported_arguments('-DDISABLE_LIBSECCOMP=on'), language: 'c') endif @@ -101,13 +118,13 @@ executable('rurima', install_data('README.md', install_dir: get_option('datadir') / 'doc' / meson.project_name()) summary({ - 'Build type': get_option('buildtype'), - 'Install prefix': get_option('prefix'), - 'Source directory': meson.project_source_root(), - 'Build directory': meson.project_build_root(), + 'Build type': get_option('buildtype'), + 'Install prefix': get_option('prefix'), + 'Source directory': meson.project_source_root(), + 'Build directory': meson.project_build_root(), }, section: 'Directories') summary({ - 'libcap': libcap.found(), - 'libseccomp': libseccomp.found(), + 'libcap': libcap.found(), + 'libseccomp': libseccomp.found(), }, section: 'Dependencies') diff --git a/src/meson.build b/src/meson.build index 6c6c5ed..d051983 100644 --- a/src/meson.build +++ b/src/meson.build @@ -54,6 +54,33 @@ libcprintf_dep = declare_dependency( install_headers('ruri/src/include/cprintf.h', subdir: 'cprintf') +## libssfx +libssfx_include_dir = include_directories('ssfx/include') + +libssfx_sources = [ + 'ssfx/ssfx.c', +] + +libssfx = library('ssfx', + libssfx_sources, + include_directories: libssfx_include_dir, + install: true, + version: '0.9.0', + soversion: '0', +) + +pkgconfig.generate(libssfx, + name: 'libssfx', + description: 'ssfx library', + version: '0.9.0', +) + +libssfx_dep = declare_dependency( + link_with: libssfx, + include_directories: libssfx_include_dir, +) + +install_headers('ssfx/include/ssfx.h', subdir: 'ssfx') ## libruri libruri_include_dir = include_directories( @@ -112,6 +139,7 @@ libruri_dep = declare_dependency( dependencies: [ libcprintf_dep, libcatsh_dep, + libssfx_dep, libruri_dependencies, ], )