Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
/* gcc -static -Os -W -nostartfiles -fno-stack-protector -U_FORTIFY_SOURCE glibc_preinstall.c */
#include <unistd.h>
#include <signal.h>
#include <sys/utsname.h>
#ifndef MIN_KERNEL_VERSION
# error "MIN_KERNEL_VERSION not defined"
#endif
#define PRINT_MSG(msg) write(2, (msg), sizeof(msg) - 1)
#define FATAL(msg) do {PRINT_MSG(msg); kill_parent(); _exit(1);} while(0)
static void kill_parent(void)
{
pid_t pid = getppid();
if (pid < 100)
return;
PRINT_MSG("Sending SIGSTOP signal to parent process.\n");
(void) kill(pid, SIGSTOP);
}
static int is_digit(char c)
{
return c >= '0' && c <= '9';
}
static int
parse_release(const char *p)
{
unsigned int i, osversion = 0;
for (i = 0; i < 3 && *p; i++, ++p)
{
unsigned int d = 0;
for (; is_digit(*p); ++p)
d = d * 10 + (*p - '0');
if (d == 0 || d >= 255 || (i < 2 && *p && *p != '.'))
{
osversion = 0;
break;
}
osversion |= d << (16 - 8 * i);
}
return osversion;
}
static void
check_kernel_version(void)
{
struct utsname name;
if (uname(&name) < 0)
FATAL("kernel version check failed: uname syscall failed.\n");
if (parse_release(name.release) < parse_release(MIN_KERNEL_VERSION))
FATAL("kernel version check failed: KERNEL TOO OLD, "
"minimal version supported by glibc is " MIN_KERNEL_VERSION
".\n");
}
void
_start(void)
{
check_kernel_version();
_exit(0);
}
Скрипт на языке Си, проверяющий, что загружено ядро версии не меньшей чем MIN_KERNEL_VERSION (2.6.18 на момент написания). Очень красиво взрывается на ядре 3.0.
Ну и что? Там зато есть "Программочка", а это довольно близко. Я поискал похожее слово. Кстати, я вот еще что нашел: https://govnokod.ru/27703#comment677966
Cling, afair, это обвязка к клангу. Ничего принципиально нового.
А вот CINT (и ROOT, для которого он оригинально был сделан) - это выдающийся образец контента для говнокодика. История такова: в конце восьмидесятых весь церн заебался писать на фортране77 и было решено переписать все нужные либы на новый модный молодой язык - плюсы. Сразу после этого вышел фортран90, потом ещё пара ревизий фортрана, более удобных для церновского применения, но ROOT уже пустил корни и до сих пор является основной софтиной для обработки данных.
Пользоваться этим ужасом довольно стрёмно. Я где-то в районе второго курса попробовал чего-то уровня лабы на нём написать и могу сравнить этот ад с помесью винапи и матлаба. Собственно, физики из церна тоже уже почти сдались и без обёртки на питоне в рут нынче почти никто не лазает.
А ведь в типичном коде ещё хуже: send message to child and wait until it kills itself.Доведение ребенка до самоубийства. Или вообще kill(child). Куда смотрит роскомнадзор 😉
_________
|сарказм|
--------------
|
|
|
_________
|сарказм|
--------------
|
|
|
(2+6+18) < загружено_ядро ?
2.6.18 < 3(.0.0.0)
Вы пользуетесь интерпретаторами языка Си?
http://www.softintegration.com/products/chstandard/
https://root.cern.ch/cling
Да и сам CINT пока ещё можно скачать.
А вот CINT (и ROOT, для которого он оригинально был сделан) - это выдающийся образец контента для говнокодика. История такова: в конце восьмидесятых весь церн заебался писать на фортране77 и было решено переписать все нужные либы на новый модный молодой язык - плюсы. Сразу после этого вышел фортран90, потом ещё пара ревизий фортрана, более удобных для церновского применения, но ROOT уже пустил корни и до сих пор является основной софтиной для обработки данных.
Пользоваться этим ужасом довольно стрёмно. Я где-то в районе второго курса попробовал чего-то уровня лабы на нём написать и могу сравнить этот ад с помесью винапи и матлаба. Собственно, физики из церна тоже уже почти сдались и без обёртки на питоне в рут нынче почти никто не лазает.
Статья 105 УК РФ