1. Лучший говнокод

    В номинации:
    За время:
  2. Куча / Говнокод #9168

    +142

    1. 1
    ../../../../archive/03_Production/03_Programming/cdn/res/map_1_bg.png

    Мы не ищем простых путей

    kyzi007, 19 Января 2012

    Комментарии (0)
  3. C++ / Говнокод #9125

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    enum class TClockWise
    {
        CW=true,
        CCW=false
    };
    
    template<class T>
    std::ostream& operator<<(std::ostream &out, const TClockWise Cow)
    {
        switch(Cow)
        {
            case TClockWise::CW: out << "CW"; break;
            case TClockWise::CCW: out << "CCW"; break;
            default: MUST_NEVER_CAL_THAT;
        }
        return out;
    }

    Говногость, 16 Января 2012

    Комментарии (15)
  4. C# / Говнокод #9124

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    class SMSSender
        {
            const string API_URL = "http://api.sms****.ru/?";
            string base_URL = "";
            private string _email;
            private string _password;
            XmlDocument doc = new XmlDocument();
            Dictionary<string,string> parameters;
    
            public SMSSender(string email, string password)
            {
                _email = email;
                _password = password;
                base_URL = API_URL + "email=" + _email + "&password=" + _password + "&";
            }
    
            public bool LoginAttempt()
            {
                parameters = new Dictionary<string, string>();
                parameters.Add("method", "login");
                return APIRequest(parameters);
            }
    
            public KeyValuePair<int,object> GetCreditsLeft()
            {
                parameters = new Dictionary<string, string>();
                parameters.Add("method", "get_profie");
                APIRequest(parameters);
                return new KeyValuePair<int, object>(0, int.Parse(GetValueByName("credits")));
            }
    
            public int SendSMS(string senderName, string internationalNumber, string text)
            {
                parameters = new Dictionary<string, string>();
                parameters.Add("method", "push_msg");
                parameters.Add("text", text);
                parameters.Add("phone", internationalNumber);
                parameters.Add("sender_name", senderName);
                APIRequest(parameters);
                return int.Parse(GetValueByName("n_raw_sms"));
            }
    
            public KeyValuePair<int, object> GetLastError()
            {
                return new KeyValuePair<int, object>(int.Parse(doc.GetElementsByTagName("err_code")[0].InnerText), doc.GetElementsByTagName("text")[0].InnerText);
            }
    
            private string GetValueByName(string keyToReturn)
            {
                return doc.GetElementsByTagName(keyToReturn)[0].InnerText;
            }
    
            private bool APIRequest(Dictionary<string, string> param)
            {
                string URL = base_URL;
                foreach (KeyValuePair<string, string> p in param)
                    URL = URL + p.Key + "=" + p.Value + "&";
                doc.Load(URL);
                if (GetLastError().Key == 0) return true;
                else throw new SMSSenderException(GetLastError().Key, GetLastError().Value.ToString());
            }
        }
    
        class SMSSenderException : Exception
        {
            int _errorCode;
            string _Message;
            public SMSSenderException(int errorCode, string Message)
            {
                _errorCode = errorCode;
                _Message = Message;
            }
    
            public int ErrorCode
            {
                get { return _errorCode; }
            }
    
            override public string Message
            {
                get { return _Message; }
            }
        }
    }

    API сервер отправки принимает запросы вида http://api.****sms.ru?method=send_msg&phone=+79 123456789&text=abcdef, возвращает простейший XML с err_code и результатом выполнения запроса.
    Казалось бы, 20 строчек кода и проблема решена? Нифига, без специального класса для этого не обойтись. Совсем никак. И уж совсем ничего нельзя делать без специального Exception для этого дела.

    A1mighty, 16 Января 2012

    Комментарии (5)
  5. Куча / Говнокод #9109

    +142

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    CREATE TABLE `users` (
    
    нормальные поля типо имя
    
      `ff` text NOT NULL,
      `da` char(100) NOT NULL,

    Дали мне дампик таблицы... В полях ДА! вот это...
    00A00A00000A0A0AA793655265A00AA000000A00 00A000A72540000AA0A00560A000000A9A990000 0000AAA00000104A004010A00A000A0A0A0AA599 135A00A000A0A0000A00000000A4A450000A0AAA 010AAAA000AA9A0000AAAAA0AAA0A000104AA04A AAA000A0000A00000000AAA000A0A00000000A00 0070000AA00A0000000000A0000000A00000A080 900A0000000A00A00000AAA0000A000A00000000 A00000A0A000000000000070000A00000A000000 00A00000000000A000001A1A0000000000000000 0A00000A00000000A00000000A0A0A000A000A00 0000000000000A00AAAA00AAA000A0A00A0000A0 00AAAAA0A0AA0A00A000','01000000000100000 000000001B261000000000000000000000000000 0000000000000000000000000000000000000000 000

    kyzi007, 13 Января 2012

    Комментарии (15)
  6. Си / Говнокод #8911

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    static inline gboolean is_alt(const gchar* string)
    {
    	return ((string[0] == '<') &&
    		(string[1] == 'a' || string[1] == 'A') &&
    		(string[2] == 'l' || string[2] == 'L') &&
    		(string[3] == 't' || string[3] == 'T') &&
    		(string[4] == '>'));
    }
    
    static inline gboolean is_ctl (const gchar* string)
    {
    	return ((string[0] == '<') &&
    		(string[1] == 'c' || string[1] == 'C') &&
    		(string[2] == 't' || string[2] == 'T') &&
    		(string[3] == 'l' || string[3] == 'L') &&
    		(string[4] == '>'));
    }
    
    static inline gboolean is_modx(const gchar* string)
    {
    	return ((string[0] == '<') &&
    		(string[1] == 'm' || string[1] == 'M') &&
    		(string[2] == 'o' || string[2] == 'O') &&
    		(string[3] == 'd' || string[3] == 'D') &&
    		(string[4] >= '1' && string[4] <= '5') &&
    		(string[5] == '>'));
    }
    
    static inline gboolean is_ctrl(const gchar* string)
    {
    	return ((string[0] == '<') &&
    		(string[1] == 'c' || string[1] == 'C') &&
    		(string[2] == 't' || string[2] == 'T') &&
    		(string[3] == 'r' || string[3] == 'R') &&
    		(string[4] == 'l' || string[4] == 'L') &&
    		(string[5] == '>'));
    }
    
    static inline gboolean is_shft (const gchar* string)
    {
    	return ((string[0] == '<') &&
    		(string[1] == 's' || string[1] == 'S') &&
    		(string[2] == 'h' || string[2] == 'H') &&
    		(string[3] == 'f' || string[3] == 'F') &&
    		(string[4] == 't' || string[4] == 'T') &&
    		(string[5] == '>'));
    }
    
    // ... (ещё 100500 подобных функций)
    // ... а тем временем где-то ниже:
    
    	  if (len >= 9 && is_release (accelerator))
    	    {
    	      accelerator += 9;
    	      len -= 9;
    	      mods |= EGG_VIRTUAL_RELEASE_MASK;
    	    }
    	  else if (len >= 9 && is_control (accelerator))
    	    {
    	      accelerator += 9;
    	      len -= 9;
    	      mods |= EGG_VIRTUAL_CONTROL_MASK;
    	    }
    	  else if (len >= 9 && is_primary (accelerator))
    	    {
    	      accelerator += 9;
    	      len -= 9;
    	      mods |= EGG_VIRTUAL_CONTROL_MASK;
    	    }
    	  else if (len >= 7 && is_shift (accelerator))
    	    {
    	      accelerator += 7;
    	      len -= 7;
    	      mods |= EGG_VIRTUAL_SHIFT_MASK;
    	    }
    	  else if (len >= 6 && is_shft (accelerator))
    	    {
    	      accelerator += 6;
    	      len -= 6;
    	      mods |= EGG_VIRTUAL_SHIFT_MASK;
    	    }
    	  else if (len >= 6 && is_ctrl (accelerator))
    	    {
    	      accelerator += 6;
    	      len -= 6;
    	      mods |= EGG_VIRTUAL_CONTROL_MASK;
    	    }
    
    // ... и так далее. код целиком сюда просто не влезет.

    шедевр. что сравнение строк, что цепочка if-else. все хороши.

    полной версией можно насладиться тут:
    https://github.com/mate-desktop/mate-control-center/blob/master/capplets/keybindings/eggaccelerators.c

    angry C nerd, 06 Января 2012

    Комментарии (15)
  7. PHP / Говнокод #8838

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    <?php
    // страницы, содержимое которых надо получить
    $urls = array('www.yandex.ru', 'www.google.ru', 'www.mail.ru', 'www.rambler.ru');
     
    $rtasks = array(); // задачи чтения
    $wtasks = array(); // задачи записи
    $results = array(); // результаты
     
    foreach ($urls as $url) {
    	// открываем отдельный сокет
    	$sh = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    	if (!$sh) continue;
     
    	// таймаут для чтения
    	socket_set_option($sh, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 10, "usec" => 0));
    	// таймаут для записи
    	socket_set_option($sh, SOL_SOCKET, SO_SNDTIMEO, array("sec" => 10, "usec" => 0));
    	// задаем неблокирующий режим сокетов
    	socket_set_nonblock($sh);
    	// определяем ip хоста
    	$ip = gethostbyname($url);
    	// соединяемся
    	socket_connect($sh, $ip, 80);
     
    	// добавляем в задачи для записи
    	$wtasks[$url] = $sh;
    }
     
    // продолжаем, пока есть задачи для записи или чтения
    while ($wtasks || $rtasks) {
    	// массив для сокетов с возможностью чтения
    	$rtasks_ = $rtasks;
    	// массив для сокетов с возможностью записи
    	$wtasks_ = $wtasks;
     
    	// ждем результатов из сокетов
    	$n = socket_select($rtasks_, $wtasks_, $e=null, 10);
    	if ($n > 0) {
    		// сокеты, доступные для записи
    		foreach ($wtasks_ as $sh) {
    			// ищем урл страницы по дескриптору сокета в массиве задач записи
    			$url = array_search($sh, $wtasks);
    			// удаляем из задач записи
    			unset($wtasks[$url]);
    			// добавляем в задачи чтения
    			$rtasks[$url] = $sh;
    			// формируем http-заголовки
    			$headers  = "GET / HTTP/1.0\r\n";
    			$headers .= "Host: ".$url."\r\n";
    			$headers .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.6) Gecko/2009011913 MRA 5.3 (build 02557) Firefox/3.0.6\r\n";
    			$headers .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
    			$headers .= "Accept-Language: ru,en-us;q=0.7,en;q=0.3\r\n";
    			$headers .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n";
    			$headers .= "\r\n";
     
    			// записываем в сокет
    			if (socket_write($sh, $headers) === false) fclose($sh);
    		}
     
    		// сокеты, доступные для чтения
    		foreach ($rtasks_ as $sh) {
    			// ищем урл страницы по дескриптору сокета в массиве задач чтения
    			$url = array_search($sh, $rtasks);
    			if (!$url) continue;
    			// считываем результат из сокета
    			$result = '';
    			while ($r = socket_read($sh, 1024)) $result .= $r;
    			// закрываем сокет
    			socket_close($sh);
    			// удаляем из задач чтения
    			unset($rtasks[$url]);
    			// заносим html в массив результатов
    			$results[$url] = $result;
    		}
    	}
    	else {
    		break;
    	}
    }
    ?>

    a_e, 15 Декабря 2011

    Комментарии (3)
  8. Си / Говнокод #8358

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    #define DelayUs(x) \
                        #if x >= 5 \
                            { \
                            delayus_variable=(unsigned char)(x/DelayDivisor); \
                            asm("movlb (_delayus_variable) >> 8"); \
                            WaitFor1Us; } \
                            asm("decfsz (_delayus_variable)&0ffh,f"); \
                            Jumpback \
                        #elif x == 4 \
                            Delay1us; Delay1us; Delay1us; Delay1us \
                        #elif x == 3 \
                            Delay1us; Delay1us; Delay1us \
                        #elif x == 2 \
                            Delay1us; Delay1us \
                        #elif x == 1 \
                            Delay1us \
                        #else \
                        #endif

    Стажер

    alexoy, 30 Октября 2011

    Комментарии (14)
  9. Куча / Говнокод #8131

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    Ученые из исследовательского центра SETI, занимающиеся поиском внеземного разума,
    обнаружили, что к Земле приближаются три гигантских инопланетных корабля.
    По предварительным расчетам, мы встретимся с гуманоидами всего через два месяца. 
    
    Американская пресса уже начала морально готовить землян к вторжению пришельцев.
    Цели будущего визита неизвестны, поэтому в прессе появляются сценарии самых разных
    вариантов событий. Так, британский таблоид The Guardian опубликовал шокирующую
    статью под названием «Пришельцы могут уничтожить человечество».
    
    «При условии взаимной доброжелательности мы можем позаимствовать у гуманоидов
    ценный опыт или передовые технологии, – сообщается в статье. – Если же инопланетяне
    захотят нанести вред всему человечеству: поработить или использовать нас в качестве пищи,
    наслать неизвестные болезни или создать враждебный искусственный разум, то это станет
    началом страшной войны».
    
    Поддерживает страшную версию и популярный международный сетевой проект WikiLeaks,
    публикующий документы, ставшие доступными вследствие утечки информации.
    Сообщается, что вторжение инопланетян-разведчиков на Землю уже началось,
    а прибытие трех огромных кораблей станет началом официального вторжения.
    Боевые космические корабли были зафиксированы навигационной системой, базирующейся на Аляске.
    
    Подробнее: http://news.mail.ru/society/6884149/

    По ссылке заходить не обязательно:

    http://www.gamedev.ru/flame/forum/?id=153081&page=4

    Галактико опасносте!

    RS-232, 09 Октября 2011

    Комментарии (11)
  10. C# / Говнокод #8048

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    double[] КосинусФПриВходе = {1,0.99939,0.997564,0.994521,0.990268,0.9848,0.97814,0.97029,0.961261,0.9510565,0.93969,0.927183,0.913545,0.898794,0.88294,
                                         0.866025,0.848048,0.8290375,0.809016,0.78801,0.76604,0.74314,0.71933,0.69465,0.66913,0.64278,0.61566,0.58778,0.55919,0.5,
                                         0.46947,0.43837,0.40673,0.3746,0.34202,0.309016,0.27563,0.24192,0.20791,0.17364,0.13917,0.104528,0.06975,0.034899,0,-0.03489,
                                         -0.06975,-0.104528,-0.13917,-0.17364,-0.20791,-0.24192,-0.27563,-0.309016,-0.34202,-0.3746,-0.40673,-0.43837,-0.46947,-0.5,
                                         -0.55919,-0.58778,-0.61566,-0.64278,-0.66913,-0.69465,-0.71933,-0.74314,-0.76604,-0.78801,-0.809016,-0.8290375,-0.848048,
                                         -0.866025,-0.88294,-0.898794,-0.913545,-0.927183,-0.93969,-0.9510565,-0.961261,-0.97029,-0.97814,-0.9848,-0.990268,-0.994521,
                                         -0.997564,-0.99939,-1,-0.99939,-0.997564,-0.994521,-0.990268,-0.9848,-0.97814,-0.97029,-0.961261,-0.9510565,-0.93969,-0.927183,
                                         -0.913545,-0.898794,-0.88294,-0.866025,-0.848048,-0.8290375,-0.809016,-0.78801,-0.76604,-0.74314,-0.71933,-0.69465,-0.66913,
                                         -0.64278,-0.61566,-0.58778,-0.55919,-0.5,-0.46947,-0.43837,-0.40673,-0.3746,-0.34202,-0.309016,-0.27563,-0.24192,-0.20791,
                                         -0.17364,-0.13917,-0.104528,-0.06975,-0.034899,0,0.03489,0.06975,0.104528,0.13917,0.17364,0.20791,0.24192,0.27563,0.309016,
                                         0.34202,0.3746,0.40673,0.43837,0.46947,0.5,0.55919,0.58778,0.61566,0.64278,0.66913,0.69465,0.71933,0.74314,0.76604,0.78801,
                                         0.809016,0.8290375,0.848048,0.866025,0.88294,0.898794,0.913545,0.927183,0.93969,0.9510565,0.961261,0.97029,0.97814,0.9848,
                                         0.990268,0.994521,0.997564,0.99939};
      
            private void XbYb()
            {
                double x;
                x = AB * КосФ;
                Xb = (int)x;
                double f=4*Ya*Ya-4*(Xa*Xa+Ya*Ya+Xb*Xb-2*Xa*Xb-AB*AB);
                if (счетчик >= 0 && счетчик <= 89) Yb = (2 * Ya + (int)Math.Sqrt(f)) / 2;
                else Yb = (2 * Ya - (int)Math.Sqrt(f)) / 2;
            }
            
            private void timer1_Tick(object sender, EventArgs e)
            {
                if (счетчик == КосинусФПриВходе.Length) счетчик = 0;
                КосФ=КосинусФПриВходе[счетчик];
                XbYb();
                pictureBox1.Invalidate();
                счетчик++;
            }

    1C головного мозга

    psina-from-ua, 30 Сентября 2011

    Комментарии (22)
  11. Си / Говнокод #7522

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    /* 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.

    raorn, 11 Августа 2011

    Комментарии (44)