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

    +147

    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
    90. 90
    91. 91
    92. 92
    {
        //-----------------------------------------
        // Declare and initialize variables
        WSADATA wsaData;
        int iResult = 0;
    
        int iError = 0;
        INT iNuminfo = 0;
    
        int i;
    
        // Allocate a 16K buffer to retrieve all the protocol providers
        DWORD dwBufferLen = 16384;
    
        LPWSAPROTOCOL_INFO lpProtocolInfo = NULL;
    
        // variables needed for converting provider GUID to a string
        int iRet = 0;
        WCHAR GuidString[40] = { 0 };
    
        // Initialize Winsock
        iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
        if (iResult != 0) {
            wprintf(L"WSAStartup failed: %d\n", iResult);
            return 1;
        }
    
        lpProtocolInfo = (LPWSAPROTOCOL_INFO) MALLOC(dwBufferLen);
        if (lpProtocolInfo == NULL) {
            wprintf(L"Memory allocation for providers buffer failed\n");
            WSACleanup();
            return 1;
        }
    
        iNuminfo = WSAEnumProtocols(NULL, lpProtocolInfo, &dwBufferLen);
        if (iNuminfo == SOCKET_ERROR) {
            iError = WSAGetLastError();
            if (iError != WSAENOBUFS) {
                wprintf(L"WSAEnumProtocols failed with error: %d\n", iError);
                if (lpProtocolInfo) {
                    FREE(lpProtocolInfo);
                    lpProtocolInfo = NULL;
                }
                WSACleanup();
                return 1;
            } else {
                wprintf(L"WSAEnumProtocols failed with error: WSAENOBUFS (%d)\n",
                        iError);
                wprintf(L"  Increasing buffer size to %d\n\n", dwBufferLen);
                if (lpProtocolInfo) {
                    FREE(lpProtocolInfo);
                    lpProtocolInfo = NULL;
                }
                lpProtocolInfo = (LPWSAPROTOCOL_INFO) MALLOC(dwBufferLen);
                if (lpProtocolInfo == NULL) {
                    wprintf(L"Memory allocation increase for buffer failed\n");
                    WSACleanup();
                    return 1;
                }
                iNuminfo = WSAEnumProtocols(NULL, lpProtocolInfo, &dwBufferLen);
                if (iNuminfo == SOCKET_ERROR) {
                    iError = WSAGetLastError();
                    wprintf(L"WSAEnumProtocols failed with error: %d\n", iError);
                    if (lpProtocolInfo) {
                        FREE(lpProtocolInfo);
                        lpProtocolInfo = NULL;
                    }
                    WSACleanup();
                    return 1;
                }
    
            }
        }
    
        wprintf(L"WSAEnumProtocols succeeded with protocol count = %d\n\n",
                iNuminfo);
        for (i = 0; i < iNuminfo; i++) {
            wprintf(L"Winsock Catalog Provider Entry #%d\n", i);
    
    --- skipped ---
    
            wprintf(L"\n");
        }
    
        if (lpProtocolInfo) {
            FREE(lpProtocolInfo);
            lpProtocolInfo = NULL;
        }
        WSACleanup();
    
        return 0;
    }

    http://msdn.microsoft.com/en-us/library/ms741574(v=VS.85).aspx

    Я считаю это говнокодом, т.к. автор данного примера страдает сильнейшие паранойей. Всем переменным он присваивает нолики, например перед return строки 87, 52 и т.д. ... Даже iResult, lpProtocolInfo и т.д. в начале...

    Запостил: fddpro, 04 Августа 2011

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

    • У Вас паранойя находить паранойи.
      Ответить
    • простыня? а как насчет кружечки данунахрен?
      Ответить
    • Это не паранойя, это способ быстрее найти возможные косяки с использованием освобождённой памяти.
      Ответить
    • И где паранойя? Присвоить NULL, это избежать проблем с повторной очисткой. Тут дело даже не в примере, а в стиле программирования. Если бы все так программили, жизнь была бы лучше.
      Ответить
      • показать все, что скрытоСтиль заключается в том, чтобы напихать побольше бесполезных опкодов? А потом задаются вопросами почему элементарные вещи тормозят?
        Ответить
        • Экономия на спичках до добра не доводит.
          Ответить
          • Тогда может стоит проверять состояние переменных через каждые две строки? Вить стоит учитывать, что можно воздействовать на процесс из вне, и таким образом повредить память...
            Ответить
    • Похоже, бывший паскалист...
      Ответить
    • А я считаю говнокодером того, кто считает говнокодом safe-coding.
      Ответить
      • Не за чтобы не подумал, что пихание проверок где попало, нынче считается safe-coding....
        Ответить
        • "Величайшей ошибкой было бы думать" (с) В.И.Ленин
          Ответить
    • показать все, что скрытоvanished
      Ответить

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