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

    +139

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    FILE *ConfigFile = NULL;
    char *workdir = NULL;
    workdir=getenv("APP_WORKDIR");
    if ((NULL!=workdir) && (NULL != (ConfigFile = fopen(strcat(workdir,"appname/config.xml"), "r"))))
    {
       fclose(ConfigFile);
       workdir[strlen(workdir)-10] = '\0';
       setenv("APP_RESOURCE_DIR", workdir , 1);
    }

    вот так нужно указывать крутой библиотеке, любимому и незаменимому детищу нашего R&D, читать файл из другой директории.

    и вот такое было закопипащено в 4 приложений....

    Запостил: Dummy00001, 19 Ноября 2010

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

    • Суровая плотность кода, особенно в 4 строке.
      Показательно, что в проверке на NULL константа стоит вначале, видимо автор частенько попадал на присваивание внутри if.
      Ответить
    • прикольно наверное передавать параметры внутри одного приложения из модуля в модуль через переменные окружения. А что поделаешь? Глобальные переменные ведь шарить между модулями нельзя))))
      Ответить
      • >А что поделаешь?
        Файлы, пайпы, общая память ...
        Ответить
        • шаред мемори -- не круто. надо хэндл передавать или указатель как-то.
          файлы -- круто (если конечно они не мемори мапед)
          пайпы -- это которые в win32?

          зы: это сарказм, если что
          Ответить
          • а в каком месте сарказм ?
            кстати, shared memory по имени открывается
            http://www.opengroup.org/onlinepubs/007908799/xsh/shm_open.html
            пайп
            http://www.opengroup.org/onlinepubs/7990989775/xsh/pipe.html
            Ответить
      • > А что поделаешь?

        А как насчет просто инстанциировать объект и передать конструктору параметры??

        Не смотря на С++ терминологию, применимо и к чистому С.
        Ответить
        • да ну шучу же я!!
          понятно, что кашерно делать так:
          foo_set_age(pUser, 15);
          foo_do_all(pUser);
          Ответить
      • Что-то про одно приложение не сразу обратил внимание :)
        Ответить
    • мало тут юниксоидов.

      то что они setenv() делают (== не умеют интерфейсы делать т.к. дебильно все синглтонами обвешано) это полбеды.

      никто еще не заметил что данная конструкция еще и окружение (или по крайней мере одну другую переменную) убивает тем strcat(), т.к. getenv() возвращает указатель на строку из внутренней структуры окружения.
      Ответить
      • А ничего, что мы, юниксоиды, работаем?
        А потом приходим домой, вознамереваясь в очередной раз зарезать правду-матку, заклеймить и выжечь глаголом (или на худой конец деепричастием)... Так, мысль потерял. Короче, а тут уже все рассказано:)
        Ответить
        • да ладно. я тожно наговнопостил. собирался про тот strcat() еще коментарий добавить, но ... забыл и наговнопостил.

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

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