Интересно, как это называется?

Смотрю тут один опенсорсный проектик на гитхабе и понимаю, что в Cisco работают такие же индусы, как и везде (хотя нет, кое-где за такое могут и уебать):

https://github.com/cisco/ns3-802.11ax-simulator/blob/master/ns-3.26/src/wifi/model/rrm-wifi-manager.cc

Совершенно шикарны строки со 149 по 155, да и все их многочисленные копипасты. Поневоле задумываешься, как же в принципе может более-менее стабильно работать современный софт и тем более железо, разработанное “клоунами под руководством мартышек”.

PS Посмотрел профили указанных в заголовке индусов на линкедине. Сильно опечалился.

21 комментарий

  1. Дмитрий пишет:

    А можно подробнее для не сильно опытных? Струтурка там 15 КБ, на стеке не выделишь. Заменить выделение и очистку макросом? Или плохо гонять malloc в каждой функции? В теории можно выделить раз и переиспользовать, но только если функции точно не будут друг друга вызывать.

    • > 15 КБ, на стеке не выделишь.

      И чо? 15 кБ на стеке нормально себя чувствуют (если мы не скатываемся в рекурсивные вызовы, что в данном случае не нужно).

      (вопрос о том, нужны ли вообще структуры по 15к, пока опустим)

      Гонять malloc вообще плохо – вон там чуть ниже ребята где-то free забыли.

    • kettle пишет:

      Писал, писал и все пропало…

      malloc можент вернуть 0 и не проверив это memset обнулит память с нулевого адреса с непредсказуемыми глюками или вылетом сразу, но даже если первый мемсет очистит буфер, что на стеке, что на куче, то следующий с message->data гарантированно пропишет все с нулевого адреса.

      • > обнулит память с нулевого адреса с непредсказуемыми глюками или вылетом сразу

        Второе. Ну если мы о нормальных системах, а не о микроконтроллерах без MMU.

        • kettle пишет:

          Схренали?
          Кто запрещает отобразить соответствующие адреса пространства процесса на реальную память?

          • Что Linux, что Windows специально не отображают никуда нулевые адреса.

            • kettle пишет:

              А шо, Cisco IOS базируется на Linux или Windows?

              • Вообще-то это код не под IOS, а под сетевой симулятор NS-3 – обычную линуксовую программу (хотя какое отношение он может иметь к IOS – это отдельный вопрос).

                • kettle пишет:

                  memset(mcsInfoResp,0×00,sizeof(TlvBuffer));

                  memset(mcsInfoResp->data,0×00,BUFFER_DATA_MAX_SIZE);

                  Эта связка в принципе не может работать.
                  Либо там фуфло, либо его никто никогда не тестировал, либо с нулевой страницей все нормально.

  2. Михаил пишет:

    Знаю я тут одного из Unwired Device. Нещадного гнобителя программистов.
    Вот тут можно посмотреть качество кода от этой конторки
    https://github.com/unwireddevices/lora-mqtt/blob/master/mqtt.c

    Строки 499, 500, 502 память выделяется, освобождается в строках 526-528. До кода освобождения памяти есть return.
    Про длину функций, форматирование кода вцелом я вообще молчу. Как говорится советскую школу хер пропьешь.

    • “такие же индусы, как и везде”

    • А вообще, посмотрел там blame – обычное дело, год назад написано malloc и free, вставляем новый код, про free благополучно забыто. Книжка “почему си гавно”, глава первая. Если это все, что удалось найти и предъявить – то вполне себе нормальный код.

      • Михаил пишет:

        C не говно, а инструмент, позволяющий сделать то что ты хочешь, как ты хочешь и когда ты хочешь. А не как во всяких Java, когда объект создается не там, где написано new, а когда захочет Java-машина.

        По поводу говнокода от UD, я особо проблем и не искал, так прошелся по malloc/free. Просто ты любишь цитировать товарища Артамонова, вот пожалуйта код от его конторы.
        Помню делал когда-то контроллер для SMD-печки с его прошивкой. Тот код не отключал нагреватель после окончания программы, хорошо что вовремя заметил.
        Там аффтар забыл одну функцию дописать.