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

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
/*
    * Now do an in-place copy.
    * Map (R) to (r) and (TM) to (tm).
    * The era of teletypes is long gone, and there's
    * -really- no need to shout.
    */
while (*src != '\0') {
    if (src[0] == '(') {
        if (strncmp(src + 1, "R)", 2) == 0) {
            (void) strncpy(dst, "(r)", 3);
            src += 3;
            dst += 3;
            continue;
        }
        if (strncmp(src + 1, "TM)", 3) == 0) {
            (void) strncpy(dst, "(tm)", 4);
            src += 4;
            dst += 4;
            continue;
        }
    }
    *dst++ = *src++;
}
*dst = '\0';

Не говнокод, но забавно.
Инициализация процессоров (и сбор cpuid) в Solaris
http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/i86pc/os/cpuid.c#2488

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

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

  • Не оптимально в данном случае использовать
    strncmp. Я б записал это по другому.
    [code=C]
    while (*src != '\0')
    {
    if (*src == '(')
    {
    if (*(src + 1)=='R')&&(*(src + 2)==')'))
    {
    *(src + 1)+=32;
    src += 3;
    dst += 3;
    }
    else
    {
    if (*(src + 1)=='T')&&(*(src + 2)=='M')&&(*(src + 3)==')')
    {
    *(src + 1)+=32;
    *(src + 2)+=32;
    src += 4;
    dst += 4;
    }
    }
    }
    *dst++ = *src++;
    }
    [\code]
    Ответить
    • strncmp в Solaris вполне себе может для n <= 4 раскрываться в банальное сравнение двух 32-битных чисел, так что не факт, что ваш способ оптимальнее.

      Зато он точно говнокодистей 😉
      Ответить

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

Помни, guest, за тобой могут следить!

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


    8