Кресты / Говнокод #3801 Ссылка на оригинал

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
long GetMicroseconds();

CTvoid cLog::GetTime (char * acLocal, time_t tTime)
{
  struct tm   ltLocalTime;
  struct tm * ptLocalTime;

  tTime       = time (NULL);
  ptLocalTime = localtime_r (&tTime, &ltLocalTime);

  sprintf(acLocal,"%04d%02d%02d %02d%02d%02d-%06ld",
                   ptLocalTime->tm_year+1900,
                   ptLocalTime->tm_mon+1,
                   ptLocalTime->tm_mday,
                   ptLocalTime->tm_hour,
                   ptLocalTime->tm_min,
                   ptLocalTime->tm_sec,
                   GetMicroseconds());

}

long GetMicroseconds()
{
    struct timeval timeVal;

    if (0 == gettimeofday( &timeVal, NULL ))
        return timeVal.tv_usec;

    return -1;
}

cLog::__Write(...)
{
    /* ... */
    tTime          = time(NULL);
    GetTime (acDataTime, tTime);
    /* ... */
}

R&D дали задание добавить микросекунды ко всем таймстемпам в логах.
сказано - сделано.
ну ведь никто не говорил что таймстемпы должны быть еще и консистентными.

ЗЫ ну и time() надо вызвать раза два-три - для надёжности.

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

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

    • > Что за тип "CTvoid" ?

      ... хм. это хорошая идея для еще одного говнокода. там какие-то чудаки все тандартные типы пере-typedef-или. типа "typedef int CTint;" и т.д. и т.п. для, цитирую, портабельности.

      > clock_gettime() нету ?

      блин, если бы у нас тут кто маны читать умел.
      и если бы доблесное IT еще apropos и $MANPATH постоянно не гробило на серваках постоянно.
      Ответить
      • > ... хм. это хорошая идея для еще одного говнокода. там какие-то чудаки все тандартные типы пере-typedef-или. типа "typedef int CTint;" и т.д. и т.п. для, цитирую, портабельности.

        Такое много где делают, напр. в gtk (gchar, gint, gshort, glong, gfloat, gdouble и т. п.)

        Вы в курсе, что int не гарантируется быть 32-битным? Так что про портабельность тут вполне резонно. Сделано на всякий пожарный.

        Или может быть такой случай, что 32-битных полатформ int должен быть 32-битным, а для 64-битных 0- 64-битный. int везде одинаковый, long под юниксами 64 бита, а под виндовс - 32 бита, зато 64 бита является long long и т.д. Как тут не затайпдефить.

        Так что тайпдефанье тут имеет смысл. Может быть сейчас оно сделано так: "typedef int CTint". Но когда что-то поменяется, не нужно будет везде выискивать и вставлять другой тип. Достаточно просто передефайнить CTint - и всё.

        Другой разговор что зачастую такие студенчкеские поделки никому не нужны и запускаются с одной системы...
        Ответить
        • > Вы в курсе, что int не гарантируется быть 32-битным? Так что про портабельность тут вполне резонно. Сделано на всякий пожарный.

          Мля. Детский сад. Не тормози. Именно с такой логикой народ и пишет такое говно.

          stdint.h & inttypes.h существует уже ХЕЗ как давно. во первых.

          во вторых. C библиотека (и даже POSIX) определена используя стандартные С типы. это и есть то как задается портабельность. если функции нужен параметром int, значит нужен int, long - значит long. а не какое-то самопальное говно. вне зависимости от платформы.
          Ответить
            • Да!
              Я вчера опять с аиксом воевал. Ставишь _POSIX_SOURCE, в одном месте ругается. Ставишь _ALL_SOURCE, в другом... Так и не заломал:(
              Может, зашлю на говнокод даже. fcntl.h без _POSIX_SOURCE не компилируется. Если не предусмотрено его использование без этого дефайна, так бы и сказали в самом начале. Чего-то я в этой жизни не понимаю, видать.
              Ответить
              • какой AIX? у меня с ним никаких проблем (кроме как дежурных проблем с линкером vs. говнокод) еще не было.
                Ответить
                • 6.1, gcc 4.0.0

                  $ gcc -D_ALL_SOURCE aaa.c
                  In file included from /usr/include/fcntl.h:188,
                  from aaa.c:1:
                  /usr/include/unistd.h:924: error: parse error before '[' token
                  /usr/include/unistd.h:925: error: parse error before 'rid_t'
                  $ more aaa.c
                  $ cat aaa.c
                  #include <fcntl.h>
                  $

                  Потому что этот rid_t только под _POSIX_SOURCE.
                  Какого хрена оно не подразумевается ALL_SOURCE-ом, не знаю.

                  А потом вообще начинается ахтунг:
                  $ gcc -D_ALL_SOURCE -D_POSIX_SOURCE aaa.c
                  In file included from /usr/include/fcntl.h:188,
                  from aaa.c:1:
                  /usr/include/unistd.h:924: error: parse error before '[' token
                  /usr/include/unistd.h:925: error: parse error before 'rid_t'
                  $ gcc aaa.c
                  In file included from /usr/include/fcntl.h:188,
                  from aaa.c:1:
                  /usr/include/unistd.h:924: error: parse error before '[' token
                  /usr/include/unistd.h:925: error: parse error before 'rid_t'
                  $ gcc -D_POSIX_SOURCE aaa.c
                  <тут он скомпилялся>
                  $
                  Ответить
                  • IIRC это проблема с GCC (или AIX - в зависимости от точки зрения) потому что он из неправильного каталога неправильных хидер берет. глянь в вывод "gcc -E". видел что народ у нас это правил, но сейчас уже на найду где/как. попробуй штатный сс/xlС.

                    протестировать сам сейчас не могу бо IT месяц назад сняло с сети наш единственный AIX 6.1 сервак (отдали другому отделу бо мы официально в данный момент времени на Соларис/Линукс пересаживаемся).
                    Ответить
                    • Штатного не установлено было там (на площадке). Дома-то мы штатным компилируемся и более-менее (за исключением того, что я выкладывал недавно).

                      Разобраться можно, но лень. Проще оказалось сделать оттуда дырку домой и собрать тут.

                      Ну и правильно, что пересаживаетесь. Эти проприетарные динозавры свое отжили.
                      Ответить
                      • вот на могиле HP-UX я бы с радостью потанцевал. (если подтвердятся слухи что HP начинает x64/SLES платформу продавать не только на блейдах, то может не долго ждать осталось)

                        но эти проприетарные системы как были так и останутся сидеть в разных нишах. нормальной поддержки (скажем 10-летний контракт) на дешевые гетерогенные платформы никто не дает. и именно такие контракты и держат на плаву всех этих динозавров.
                        Ответить
            • за много лет работы, я обнаружил что основная причина появления говноплатформ и говнокомпиляторов это говноразработчики.

              были конечно пара клинических случаев (типа С++ компилятор (с) ~1995 плюс доморощеная встраиваемая платформа) но это все мелочи по сравнению с ордами кривых непортабельных извращений народ якобы специально делает для портабельности.
              Ответить
              • Поизучайте на досуге qglobal.h, там много интересных комментов по поводу говноплатформ 🙂
                Ответить
  • опять эта гребаная венгерская нотация, найти бы автора поубивал бы
    Ответить

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

Переведи на "PHP", guest!

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


    8