1. Си / Говнокод #5069

    +141

    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
    char *nvram_get(int index, char *name)
    {
            /* Initial value should be NULL */
            char *recv = NULL;
    
            //LIBNV_PRINT("--> nvram_get\n");
            nvram_init(index);
    
            recv = nvram_bufget(index, name);
    
            //btw, we don't return NULL anymore!
            if (!recv)
                recv = "";
    
            //Always need close nvram
            nvram_close(index);
    
        return recv;
    }
    
    char *nvram_bufget(int index, char *name)
    {
            int idx;
            /* Initial value should be NULL */
            static char *ret = NULL;
    
            //LIBNV_PRINT("--> nvram_bufget %d\n", index);
            LIBNV_CHECK_INDEX("");
            LIBNV_CHECK_VALID();
            idx = cache_idx(index, name);
    
            if (-1 != idx) {
                    if (fb[index].cache[idx].value) {
                            //duplicate the value in case caller modify it
                            //Tom.Hung 2010-5-7, strdup() will cause memory leakage
                            //but if we return value directly, it will cause many other crash or delete value to nvram error.
                            ret = strdup(fb[index].cache[idx].value);
                            LIBNV_PRINT("bufget %d '%s'->'%s'\n", index, name, ret);
    
                            //btw, we don't return NULL anymore!
                            if (!ret)
                                ret = "";
    
                        return ret;
                    }
            }
    
            //no default value set?
            //btw, we don't return NULL anymore!
            LIBNV_PRINT("bufget %d '%s'->''(empty) Warning!\n", index, name);
            return "";
    }

    Кусочек кода из библиотеки работы с nvram для железок на SoC Ralink. Китайцы плакали, кололись о утечки памяти, но продолжали настойчиво мешать указатели на статические строки с указателями на динамически выделенные в куче...

    Запостил: NiTr0man, 27 Декабря 2010

    Комментарии (49) RSS

    • nvram - к чему такое название?
      Ответить
    • Эээ где! куды? делся говнокод 5060. Оставили хотя бы комментарии.
      Ответить
      • Да блин, утопили какие-то черти, не знающие местные понятия (не топить даже УГ, если интересное обсуждение).
        Ответить
        • Такой полезный холивар «Паскаль vs Си» был и ещё куча обсуждений.
          Страйко, можно поднять говнокод 5060?
          Ответить
        • http://tinyurl.com/GOGLOCACHE-MOTHERFUCKER-USE-IT
          Ответить
          • Да там старая версия - не интересно.
            Ответить
      • Точно! Striker, верните пожалуйста 5060. Там комментарии очень хорошие. Обсуждение не закончили...
        Ответить
        • Ага. Реквестирую раздел "УГ" (или "Слив"), место - куда сливается весь унылый код с говнокода.
          Ответить
          • и слив слива унылого кода говнокода - место, куда...
            Ответить
            • Такой человеческий недуг как "заикание" - это такая "неконтролируемая копипаста"?.. :)
              Ответить
              • нет, просто я заметил в вашей концепции паттерн субканализации из футурамы
                Ответить
      • Ну походу никто уже и не вернет
        Ответить
        • Мы верим в Striker'a. Он не может нас подвести. Он просто ещё не видел. :)

          PS: Не пишите пока в этой теме, а то из Сток'а уйдет пост.
          Ответить
          • вы о чём?
            :-D
            Ответить
          • можно распечатать и приклеить к дисплею, тогда никуда не уйдёт...
            :)
            Ответить
            • CastSpell "Призыв Striker'a".
              Ответить
              • Не хватает маны на "Призыв Striker'a"...
                Ответить
                • Ты знаешь, что он икает каждый раз, когда ты набираешь одну из жирных букв его имени?
                  Ответить
                  • Striker Striker Striker Striker Striker
                    Ответить
                    • mailto:[email protected]
                      Ответить
                    • Дед Мороз Дед Мороз Дед Мороз Дед Мороз Дед Мороз
                      Ответить
                      • на фиг...
                        Снегурочка Снегурочка Снегурочка Снегурочка Снегурочка
                        Ответить
                        • Что хорошего в икающей Снегурочке ?
                          Ответить
                          • Это значит, что она уже пьяна - можно брать...
                            Ответить
                          • Снегурочка Снегурочка не не икает икает,, это это уже уже мы мы подготовились подготовились,, понимаешь понимаешь
                            Ответить
                            • умоляю, расскажите как аватар в профайле влепить. ни черта не понял. создал аккаунт на граватаре - и хуй пойму что дальше :)
                              Ответить
                              • Была у меня аналогичная проблема на другом сайте, аватар могли ставить только посвящённые...

                                В качестве подсказки:
                                1. Граватар привязывает картинки к е-мейлам.
                                2. При регистрации на Говнокоде указывается е-мейл.
                                3. Немного подумаем.
                                4. PROFIT!!!
                                Ответить
    • бугогого!!!!!
      Ответить
    • я уже обмазался говном в предвкушении свежевысранного говнокода!
      Ответить
      • Почитай меня и мы кончим одновременно!
        Ответить

    Добавить комментарий