mirror of
https://github.com/i3/i3.git
synced 2025-10-29 03:13:23 +00:00
Example in https://github.com/i3/i3/actions/runs/18260895234/job/51988635887?pr=6502 `i3-log-for-124-move.t`: ``` ../libi3/font.c:332:9: runtime error: signed integer overflow: 2147483641 + 11 cannot be represented in type 'int' #0 0x5611ce962d65 in draw_text_xcb ../libi3/font.c:332 #1 0x5611ce962d65 in draw_text ../libi3/font.c:376 #2 0x5611ce95de20 in draw_util_text ../libi3/draw_util.c:219 #3 0x5611ce947e7a in x_draw_decoration ../src/x.c:751 #4 0x5611ce94f93a in x_push_node ../src/x.c:1097 #5 0x5611ce94e9d8 in x_push_node ../src/x.c:1204 #6 0x5611ce94e9d8 in x_push_node ../src/x.c:1204 #7 0x5611ce94e9d8 in x_push_node ../src/x.c:1204 #8 0x5611ce952e9b in x_push_changes ../src/x.c:1373 #9 0x5611ce922d1f in tree_render ../src/tree.c:468 #10 0x5611ce8d1bbb in handle_run_command ../src/ipc.c:220 #11 0x5611ce8c87fe in ipc_receive_message ../src/ipc.c:1481 #12 0x7effc262b64a in ev_invoke_pending (/lib/x86_64-linux-gnu/libev.so.4+0x564a) (BuildId: cfcffb10ff16734dcc7d31d002a90940abff0323) #13 0x7effc262f22e in ev_run (/lib/x86_64-linux-gnu/libev.so.4+0x922e) (BuildId: cfcffb10ff16734dcc7d31d002a90940abff0323) #14 0x5611ce809d48 in ev_loop /usr/include/ev.h:841 #15 0x5611ce809d48 in main ../src/main.c:1229 #16 0x7effc1e41ca7 (/lib/x86_64-linux-gnu/libc.so.6+0x29ca7) (BuildId: def5460e3cee00bfee25b429c97bcc4853e5b3a8) #17 0x7effc1e41d64 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29d64) (BuildId: def5460e3cee00bfee25b429c97bcc4853e5b3a8) #18 0x5611ce80e770 in _start (/usr/src/i3/build/i3+0x230770) (BuildId: 181abde9a3dd28a8a4be68b90b9b710c8e280633) SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../libi3/font.c:332:9 ``` Unrelated but I fixed the build fails in `next` because of a false-positive: ``` In file included from ../include/all.h:40, from ../src/commands.c:10: ../src/commands.c: In function ‘cmd_floating’: ../include/log.h:30:33: error: ‘%s’ directive argument is null [-Werror=format-overflow=] 30 | #define DLOG(fmt, ...) debuglog("%s:%s:%d - " fmt, __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__) | ^~~~~~~~~~~~~ ../src/commands.c:1193:13: note: in expansion of macro ‘DLOG’ 1193 | DLOG("should switch mode to %s\n", floating_mode); | ^~~~ cc1: all warnings being treated as errors ninja: build stopped: subcommand failed. ```
Introduction ============ libi3 is an *INTERNAL* library which contains functions that i3 and related tools (i3-msg, i3-input, i3-nagbar, i3-config-wizard, i3bar) use. It is NOT to be used by other programs. Structure ========= Every function gets its own .c file, which in turn gets compiled into an .o object file. Afterwards, all .o files are archived into one static library (libi3.a). This library will be linked into all i3 binaries. The linker is able to eliminate unused .o files when linking, so only the functions which you actually use will be included in the corresponding binary.