1. Список говнокодов пользователя myaut

    Всего: 17

  2. C++ / Говнокод #12376

    +19

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    template<typename T>
    static json_string _itoa(T val) json_nothrow {  
            /*...*/
            long value = (long)val;
        
            /*...*/
    }

    Продолжаю бороться с поддержкой 64-битных чисел в libjson :/

    myaut, 30 Декабря 2012

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

    +132

    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
    Было:
    
    typedef struct {
        int range;      /*enabled flag*/
    
        union {
            struct {
                unsigned str_length;
            };
            struct {
                long i_min;
                long i_max;
            };
            struct {
                double d_min;
                double d_max;
            };
            /* ... */
        };
    } wlp_range_t;
    
    #define WLP_NO_RANGE()              { .range = FALSE }
    #define WLP_STRING_LENGTH(length)   { .range = TRUE, .str_length = length}
    #define WLP_INT_RANGE(min, max)     { .range = TRUE, .i_min = min, .i_max = max }
    #define WLP_FLOAT_RANGE(min, max)   { .range = TRUE, .d_min = min, .d_max = max }
    
    Стало:
    
    typedef struct {
        int range;      /*enabled flag*/
    
        struct {
            struct {
                unsigned str_length;
            };
            struct {
                long i_min;
                long i_max;
            };
            struct {
                double d_min;
                double d_max;
            };
            /* ... */
    
        };
    } wlp_range_t;
    
    #define WLP_NO_RANGE()              { B_FALSE, { {0} } }
    #define WLP_STRING_LENGTH(length)   { B_TRUE, { {length} } }
    #define WLP_INT_RANGE(min, max)     { B_TRUE, { {0}, {min, max} } }
    #define WLP_FLOAT_RANGE(min, max)   { B_TRUE, { {0}, {0, 0}, {min, max} } }
    #define WLP_SIZE_RANGE(min, max)    { B_TRUE, { {0}, {0, 0}, {0.0, 0.0}, {min, max} } }
    
    /* ... */

    Такая вот бяка получилась при портировании проекта с GCC на Visual C. А все потому, что:
    1. ISO C++03 8.5.1[dcl.init.aggr]/15:
    | When a union is initialized with a brace-enclosed initializer,
    | the braces shall only contain an initializer for the first member of the union.
    2. Visual C не поддерживает designated initializers

    myaut, 24 Декабря 2012

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

    +18

    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
    /*
     *      The use of singletons for globals makes globals not
     *      actually be initialized until it is first needed, this
     *      makes the library faster to load, and have a smaller
     *      memory footprint
     */
    
    #define json_global_decl(TYPE, NAME, VALUE)                              \
    class jsonSingleton ## NAME {                                            \
    public:                                                                  \
            inline static TYPE & getValue() json_nothrow {                   \
                    static jsonSingleton ## NAME single;                     \
                    return single.val;                                       \
            }                                                                \
    protected:                                                               \
            inline jsonSingleton ## NAME() json_nothrow : val(VALUE) {}      \
            TYPE val;                                                        \
    }
    
    #define json_global(NAME) jsonSingleton ## NAME::getValue()              \
    
    json_global_decl(json_string, CONST_TRUE, JSON_TEXT("true"));
    json_global_decl(json_string, CONST_FALSE, JSON_TEXT("false"));
    json_global_decl(json_string, CONST_NULL, JSON_TEXT("null"));
    
    /* Использование */
    json_global(ERROR_NULL_IN_CHILDREN)

    Наткнулся на утечку памяти, отловленную Valgrind'ом
    А внутри вот это. И главное, совершенно непонятно, зачем воротить эту свистопляску, если линкеры умеют распознавать "true" по всюду (читаем про ROMability тут: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1396.pdf )
    http://stackoverflow.com/questions/690176/c-c-optimization-of-pointers-to-string-constants

    Сам код отсюда: http://code.google.com/p/wot-replay-parser/source/browse/libjson/Source/JSONGlobals.h

    myaut, 10 Декабря 2012

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

    +123

    1. 1
    val ret = method.invoke(this, args:_*)

    Превращаем Array[Any] в жабовый Object[] в Scala.

    myaut, 23 Ноября 2012

    Комментарии (1)
  6. C++ / Говнокод #11886

    +33

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    class Chatter : public QListBoxItem {
        [...]
        private:
            static ChatterRef *chatters[MAX_NUM_CHATTERS];
            [...]
            friend int main(int, char *argv[]);	// to destroy chatters[]
    };

    Сам проект: http://www.qtchat.org/qtchat/
    Пример дается в этой книге: http://books.google.ru/books?id=8lYbNfsAVT4C&dq=qtchat&source=g bs_navlinks_s как пример friend-функций

    myaut, 07 Октября 2012

    Комментарии (2)
  7. Си / Говнокод #9953

    +128

    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
    #ifndef __KERNEL__
    /* Multicast groups - backwards compatiblility for userspace */
    #define SELNL_GRP_NONE		0x00000000
    #define SELNL_GRP_AVC		0x00000001	/* AVC notifications */
    #define SELNL_GRP_ALL		0xffffffff
    #endif
    
    enum selinux_nlgroups {
    	SELNLGRP_NONE,
    #define SELNLGRP_NONE	SELNLGRP_NONE
    	SELNLGRP_AVC,
    #define SELNLGRP_AVC	SELNLGRP_AVC
    	__SELNLGRP_MAX
    };
    #define SELNLGRP_MAX	(__SELNLGRP_MAX - 1)

    Linux 3.3.0
    include/linux/selinux_netlink.h

    myaut, 15 Апреля 2012

    Комментарии (2)
  8. C++ / Говнокод #9842

    +161

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    void convert_bglfile(std::string infile, std::string source_charset, std::string target_charset)
    {
        std::string outfile;
        const char *p = infile.c_str();
        const char *p1 = strrchr(p, '.');
        if (p1) {
            outfile.assign(p, p1-p);
        } else {
            outfile = infile;
        }
    ...

    Из опенсорсного словаря StarDict. Товарисч на форуме написал, что не комилируется - не иклюдился cstring. А там такое :o

    myaut, 03 Апреля 2012

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