1. C++ / Говнокод #4624

    +159

    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
    int makedata(int id,int part,void *d,int datalen,void *buf)
    {
        //packet struct :
        // code = short int, lenght = shotr int, id = int, numofpart = int, data = 1024
    
        int packlen = sizeof(short int)*2 + sizeof(int)*2 + datalen;
        char *tbuf = new char [packlen];
        char* tbufptr = tbuf;
        *((short int *)tbufptr) = data;  //first field
        (short int *)tbufptr++;
        *((short int *)tbufptr) = packlen;  //second field
        (short int *)tbufptr++;
        *((int *)tbufptr) = id;
        (int *)tbufptr++;
        *((int *)tbufptr) = part;
        (int *)tbufptr++;
        *((short int *)tbufptr) = datalen;
        (short int *)tbufptr++;
        memcpy((void*)tbufptr,d,datalen);
    
        buf=tbuf;
        return packlen;
    }
    
    fileinfo* getask(void *b)
    {
        fileinfo *fi = new fileinfo();
        char *bufptr = (char*)b;
        (short int*)bufptr++;
        short int plen = *((short int*)bufptr);
        (short int*)bufptr++;
        fi->numofpart = *((int*)bufptr);
        (int*)bufptr++;
        fi->filelenght = *((int*)bufptr);
        (int*)bufptr++;
        int filelen = plen-(bufptr-(char*)b);
        fi->filename = new char[filelen];
        strncpy(fi->filename,bufptr,filelen);
    
        return fi;
    }

    Вместо того, что бы воспользоваться структурой, забиваем всё ручками.

    Запостил: KoirN, 14 Ноября 2010

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

    • Граммар-наци плачут кровавыми слезами.
      Ответить
    • А может быть чел не знал как выравнивание побайтно сделать ?
      Ответить
    • пиздец
      Ответить
    • Но, простите, работать этот код не может.

      Во-первых, выражения типа `(short int*) bufptr++`, которыми этот код набит под завязку, на самом деле делают совсем не то, чего хотел добиться их аффтар.

      Во-вторых, первая функция динамически выделяет результирующий буфер, но наружу его не возвращает. Точнее аффтар делает попытку возврата буфера через параметр функции, но так как он делать этого совершенно не умеет, получается полная белиберда.

      Другими словами, аффтар не владеет даже основами языков С/С++, почему назвать его художества "кодом" (даже "говнокодом") язык не поворачивается.
      Ответить
      • Резюмируя вышесказанное можно дать следующие рекомендации:
        строчку "03" переписать так:
        //makaka struct :
        Ответить
    • Вообще, структуры по сети передовать не рекомендуют. Там могут программы быть скомпилированными на разные выравнивания.
      Тут нужно задать массив и как индекс использовать enum.
      Ответить

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