--- title: "πŸ§‘πŸ»β€πŸ’» indent ΠΈΠ· OpenBSD Π² Linux" date: 2022-10-06T16:06:13+03:00 draft: false tags: [c, linux, openbsd] --- ## О ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ [indent.1](https://man.openbsd.org/indent.1) β€” unix ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° для исправлСния отступов ΠΈ форматирования исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Π‘ΠΈ. **Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»:** [OpenBSD manual page](https://man.openbsd.org/indent.1) [Indent_(Unix) _Wikipedia_](https://en.wikipedia.org/wiki/Indent_(Unix)) Π­Ρ‚Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° своСобразный **code beautifier** для Π‘ΠΈ. ## GNU Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π’ Linux сущСствуСт [GNU Indent](https://www.gnu.org/software/indent/manual/), ΠΊΠΎΠ΄ доступСн Π½Π° сСрвСрах **savannah.gnu.org**: ```sh git clone https://git.savannah.gnu.org/git/indent.git ``` ВСрсия 2.2.12 Π²Ρ‹ΡˆΠ»Π° 18 апрСля 2021 Π³ΠΎΠ΄Π°. Но вСдь этоТС GNU, Π±Π΅Π΅. ## OpenBSD рСализация Π’ OpenBSD Π΅ΡΡ‚ΡŒ своя вСрсия. Издавно извСстно, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ OpenBSD _ΠΎΠ½ΠΈ ΠΏΠΈΡˆΡƒΡ‚ Π»ΡƒΡ‡ΡˆΠΈΠΉ C ΠΊΠΎΠ΄ Π² ΠΌΠΈΡ€Π΅_ [[1](https://www.opennet.ru/openforum/vsluhforumID3/128533.html#57)]. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ доступСн ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ссылкС: ```text https://github.com/openbsd/src/tree/master/usr.bin/indent ``` Однако ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π΅ получится, Π±Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ :) ## Код Π― ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π» исходный ΠΊΠΎΠ΄ Π½Π° свой Git сСрвСр ΠΈ сдСлал ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² Linux. ΠšΠΎΠΌΠΌΠΈΡ‚ с измСнСниями доступСн ΠΏΠΎ [этой ссылкС](https://git.a2s.su/iiiypuk/indent/commit/a250dd83d47981cf6ed9a4382aae120a7fb24468). ИзмСнСния ΠΊΠΎΡΠ½ΡƒΠ»ΠΈΡΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²: * Makefile * args.c * indent.c * lexi.c Π’ Ρ„Π°ΠΉΠ»Π΅ `Makefile` я Π·Π°ΠΊΠΎΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π» строку с ΠΈΠ½ΠΊΠ»ΡƒΠ΄ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ для сборки OpenBSD. ```text .include ``` Π’ Ρ„Π°ΠΉΠ»Π΅ `indent.c` ΡƒΠ±Ρ€Π°Π» ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ бСзопасности OpenBSD [Pledge](https://man.openbsd.org/pledge.2). ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄: ```c if (pledge("stdio rpath wpath cpath", NULL) == -1) err(1, "pledge"); ``` Мои ΠΏΡ€Π°Π²ΠΊΠΈ: ```text #if defined(__linux__) // #else if (pledge("stdio rpath wpath cpath", NULL) == -1) err(1, "pledge"); #endif ``` Π’ Ρ„Π°ΠΉΠ»Π°Ρ… `args.c` ΠΈ `indent.c` я сколхозил, Π·Π°ΠΌΠ΅Π½ΠΈΠ² OpenBSD спСцифичныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `errc` ΠΈ `warnc` Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `printf`. По Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠΎΡ…ΠΎΠΆΠ΅ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π΅Ρ‰Ρ‘ ΠΊΠΎΠ΄ ошибки, Π½ΠΎ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈ Ρ‚Π°ΠΊ сойдёт. Π’ Ρ„Π°ΠΉΠ»Π΅ `lexi.c` Π·Π°ΠΌΠ΅Π½ΠΈΠ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `strlcpy` Π½Π° `strncpy`: ```diff - strlcpy(ps.procname, token, sizeof ps.procname); + strncpy(ps.procname, token, sizeof ps.procname); ``` Π Π°Π±ΠΎΡ‚ΡŽΡ‚ ΠΎΠ½ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΏΠΎ Ρ€Π°Π·Π½ΠΎΠΌΡƒ, Π½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒΡΡ Π² ΡˆΡ‚Π°Ρ‚Π½ΠΎΠΉ обстановкС Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ. ## Π˜Ρ‚ΠΎΠ³ По Ρ„Π°ΠΊΡ‚Ρƒ ΠΊΠΎΠ΄ оказался ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ кросс-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ². Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… сборок Π½Π΅Ρ‚, собирайтС сами!