Няшная / Говнокод #3287 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
int param_check(char *func, ...) {
  int fail;
  va_list al;

  if (!func) {
    return(1);
  }
  
  va_start(al, func);
  fail=0;
  if (!strcmp(func, "vnetGenerateDHCP") || !strcmp(func, "vnetKickDHCP")) {
    vnetConfig *a = va_arg(al, vnetConfig *);
    if (!a) {
      fail=1;
    }
  } else if (!strcmp(func, "vnetAddPublicIP") || !strcmp(func, "vnetAddDev")) {
    vnetConfig *a = va_arg(al, vnetConfig *);
    char *b = va_arg(al, char *);
    if (!a || !b) {
      fail=1;
    }
  } else if (!strcmp(func, "vnetAddHost")) {
    vnetConfig *a = va_arg(al, vnetConfig *);
    char *b = va_arg(al, char *);
    char *c = va_arg(al, char *);
    int d = va_arg(al, int);
    if (!a || !b || (d < 0) || (d > NUMBER_OF_VLANS-1)) {
      fail=1;
    }
  } else if (!strcmp(func, "vnetGetNextHost")) {
    vnetConfig *a = va_arg(al, vnetConfig *);
    char *b = va_arg(al, char *);
    char *c = va_arg(al, char *);
    int d = va_arg(al, int);
    if (!a || !b || !c || d < 0 || d > NUMBER_OF_VLANS-1) {
      fail=1;
    }
  } else if (!strcmp(func, "vnetDelHost") || !strcmp(func, "vnetEnableHost") || !strcmp(func, "vnetDisableHost")) {
    vnetConfig *a = va_arg(al, vnetConfig *);
    char *b = va_arg(al, char *);
    char *c = va_arg(al, char *);
    int d = va_arg(al, int);
    if (!a || (!b && !c) || d < 0 || d > NUMBER_OF_VLANS-1) {
      fail=1;
    }
  } else if (!strcmp(func, "vnetDeleteChain") || !strcmp(func, "vnetCreateChain")) { 
    vnetConfig *a = va_arg(al, vnetConfig *);
    char *b = va_arg(al, char *);
    char *c = va_arg(al, char *);
    if (!a || !b || !c) {
      fail=1;
    }
  } else if (!strcmp(func, "vnetTableRule")) {
    vnetConfig *a = va_arg(al, vnetConfig *);
    char *b = va_arg(al, char *);
    char *c = va_arg(al, char *);
    char *d = va_arg(al, char *);
    char *e = va_arg(al, char *);
    char *f = va_arg(al, char *);
    char *g = va_arg(al, char *);
    if (!a || !b || !c || !d || (!e && !f && !g)) {
      fail=1;
    }
  } else if (!strcmp(func, "vnetSetVlan")) {
    vnetConfig *a = va_arg(al, vnetConfig *);
    int b = va_arg(al, int);
    char *c = va_arg(al, char *);
    char *d = va_arg(al, char *);
    if (!a || b < 0 || b >= NUMBER_OF_VLANS || !c || !d) {
      fail=1;
    }
  } else if (!strcmp(func, "vnetDelVlan")) {
    vnetConfig *a = va_arg(al, vnetConfig *);
    int b = va_arg(al, int);
    if (!a || b < 0 || b >= NUMBER_OF_VLANS) {
      fail=1;
    }
  } else if (!strcmp(func, "vnetInit")) {
    vnetConfig *a = va_arg(al, vnetConfig *);
    char *b = va_arg(al, char *);
    char *c = va_arg(al, char *);
    char *d = va_arg(al, char *);
    int e = va_arg(al, int);
    if (!a || !b || !c || d<0) {
      fail=1;
    }
  }

  va_end(al);

  if (fail) {
    logprintfl (EUCAERROR, "INTERNAL ERROR: incorrect input parameters to function %s\n", func);
    return(1);
  }
  return(0);
}

Запостил: raorn raorn, (Updated )

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

  • В одну функцию запихнули много. 😀
    А вообще "..."(элипсис) всегда говнокод.
    Ответить
    • >(элипсис) всегда говнокод.
      в большинстве случаев так и есть
      я б не стал доверять прогеру, который не знает точное количество аргументов его собственной функции
      Ответить
        • эти функции багоопасные, но раз уж их за столько лет вылизали, то в посте специально есть оговорка 'в большинстве случаев'
          Ответить
          • Всё равно, если послать туда не верное кол-во аргументов - прога портит стэк с андифенед бехейвор.
            Ответить
            • Как раз для таких пейсателей придумали протекторы стека. Даже если захочешь - не сломаешь. Разве что аргументы будут неверно интерпретированы.
              Ответить
              • >протекторы стека
                Не более чем костыли, и то невсегда помогают.
                Ответить
                • Ну уж увольте. Раз человек сел писать на Си (язык среднего уровня, его не зря кроссплатформенным ассемблером называют), то ему стоит быть благодарным хотя бы за такой костыль. Си вообще не изобилирует всякими вкусностями, в нем другие идеи реализовывались.
                  Ответить
                  • Мы не должны быть благодарны, за то что нам дают есть какашку.
                    Ответить
                    • можете работать в макдональдсе, там вроде как еда...
                      давайте не будем сравнивать языки программирования с едой, так как они все таки больше похожи на религию...
                      Ответить
                      • >так как они все таки больше похожи на религию...

                        упоминание всяких религий - лишь оправдание
                        невозможности выбрать.
                        язык это инструмент.
                        казалось бы инструмент устарел - выброси нах|й и без сожаления, но нет, лучше будем ныть и тянуть тонны легаси
                        Ответить
                        • ну да... считаю что лисп уже должен был давно отправиться на свалку истории... но нет, всеравно найдутся те кто с некрофильской радостью будут кричать о том что он божественнен...
                          Ответить
                        • согласен... С давно устарел... в 99% случаев он абсолютно безболезненно заменяется на С++...
                          Ответить
                          • ...и теряем в производительности, неужели фап на байты и микросекунды отменили?
                            Ответить
                            • в большинстве случаев С++ может вырулить за счет грамотного инлайна, ссылку на сортировку в С и С++ я уже кидал...
                              Ответить
                            • фапают на биты, только такие долбоёбы, как ты. Меньше играй в бейсбол, а больше в гольф
                              Ответить
      • То есть printf для Вас не кошерно? Её ведь тоже кто-то писал. (Только давайте не будем разводить здесь очередной срач С vs all)
        Ответить
        • Вам в помощь потоки - абсолютно безопасно.
          И вообще printf и sprintf - это любят всякие кулхацкеры, для обнаружения эксплоитов.
          Отличная дыра в жопебезопасности.
          Ответить
          • Ты что! Они же на каждый бит дрочат, какие там потоки.
            Ответить
            • Я про потоки ввода-вывода. cin, cout. В Cи их к сожалению нет. Это да... Они обречены говнякать...
              Ответить
              • IO-потоки и дают лишную нагрузку из-за ОО-говна, кастов и прочей хунты
                Ответить
      • Э, я знаю точное количество аргументов моей функции — n! («!» здесь не факториал).
        Хотя... иногда мне кажется, что их m.

        PS. С максимой про троеточие не согласен. Если-таки их действительно разное число бывает, скажем, в одном вызове установить несколько разношерстных параметров объекта. Логика внутри похожая по большей части, что же, делать несколько функций, выносить одинаковую логику в какую-то подфункцию (писать на нее документацию, модульное тестирование и кучу всякой фигни)? Усложнение на пустом месте, я щитаю.
        Ответить
              • Массив подразумевает однотипные данные. Кортеж - не обязательно. Можно передавать void* в качестве данных, но это те же не типобезопасные операции.
                Ответить
                • >Можно передавать void* в качестве данных, но это те же не типобезопасные операции.
                  А где головка? Сделай, что-бы это было типобезопасно. Напиши правильные макросы и функции, проверяющие типы долным образом.

                  В конце концов, если язык не подходит для решения данной задачи, то смени на более подходящий. Какие проблемы? Или других языков не знаешь, code monkey?
                  Ответить
                  • Type Inference на Си-макросах этож атас. Хотя был тут любитель ООП в Си. Смена языка иногда нежелательна, а вот перепроектировать стоило бы.
                    Ответить
                      • >Vala
                        >И со всеми современными возможностями ФЯП.

                        Далеко не со всеми. Vala - детская игрушка. Там где Си - осознанный выбор, действительно считают каждый байт.
                        Ответить
                    • >Type Inference на Си-макросах этож атас.
                      Элипсис - вот это атас, так что ненадо.
                      Ответить
                  • Готов выслушать предложения о реализации типобезопасного кортежа на Си. Насколько это будет геморройно или вообще возможно.
                    На тему смены языка можно говорить, когда проект создается с нуля. Если надо доводить до ума уже существующий - приходится ограничиваться исходным языком.
                    Ответить
                    • Тебе тут никто ничем не обязан. Еще раз спрашиваю: голову использовать будем или признаешься, что ты code monkey?
                      Ответить
                      • Ну, если никто ничем не обязан, то нечего и спрашивать. Советую разобраться сначала в логике своих мыслей. А пока можешь ещё раз сказать свою "волшебную" фразу, если больше в мозгах ничего нет.
                        Ответить
                        • Чувак. Это твоё признание. Не нужно его минусовать. Я лишь повторил это вслух.
                          Эта фича тебе нужна в твоём проекте. А ты сам отказался это реализовывать, тк ты обязьяна.
                          Тебе никто не обязан здесь ничего делать, а то я напишу, а ты получишь баблосы.
                          Лучше ты сиди и мучайся и ешь свой элипсисный кактус. Вылавливай трудновыловимые ошибки по всему проекту.
                          Ответить
                          • Чувак, ты попутал. Это не мой проект, не моя фича и не мне с ней мучаться. Хватит тут срать уже. Если есть что сказать помимо обезьянничества - говори. Нет - лучше жевать молча. А то ты и так своей фразой уже признал, что в мозгах твоих ничего дельного нет.
                            Ответить
                          • > ешь свой элипсисный кактус

                            Элипсисный — это какой?
                            Ответить
            • Не на браинфаке же программируешь. Умей пользоваться тем, что есть.
              Ответить
  • не говно.

    больше похоже на тестовую функцию. нечто типа программного ассерт() для вызовов, которые например приходят по сети.
    Ответить
  • Элипсис - я не знаю какой уёбок мог добавить в язык такое говно. Наверное какой-то там труп страуса зомби? Неопределённое поведение проги на пустом месте, хотя компилится.
    Ответить
    • Да-да. Говно на пустом месте это такой паттерн для С++ников.
      Ответить
      • Говно на пустом месте - есть такой паттерн. Всегда им пользуюсь, тк я программист С++.
        Ответить
  • Резюме, примите меня на работу:
    Я программист С++.
    Я люблю есть кактус.
    ОЛОЛО.
    Ответить
  • Я программист С++.
    Я умею есть кактус.
    А вам слабо?
    ОЛОЛО
    Ответить
  • Элипсис - неопределённое поведение компилирующейся проги, в случае ошибки. Нафих такой антипаттерн.
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8