Насколько отвратителен данный код?

Здравствуйте. Насколько отвратителен данный код? На работоспособность пока что не проверял, просто хотелось бы узнать Ваше мнение.
bool update_uwsgi_config() {
         const char *source = fmt::format("/tmp/{}.ini", unid).c_str();
         const char *on_restart = "service uwsgi restart";
         const char *dest = "/etc/uwsgi/apps-available/www.ini";
         const char *on_update = fmt::format("lxc file push {} {} {}", source,contname,dest).c_str();
         system(on_update);
         system(on_restart);
         remove(dest);
         return true;
     }
  • Вопрос задан
  • 238 просмотров
Решения вопроса 2
@Mercury13
Программист на «си с крестами» и не только
Главная проблема.
const char *source = fmt::format("/tmp/{}.ini", unid).c_str();

Объект fmt::format сразу же исчезнет, и source будет «висеть».

Придётся писать…
fmt::format fmSource("/tmp/{}.ini", unid);
const char *source = fmSource.c_str();

И так далее.
Ответ написан
xSkyFoXx
@xSkyFoXx
1) Предпочтительнее использовать string из std, в этом случаи вам не надо заниматься явным приведением типов.
2) Если вы используете константы для всего приложения, перенесите их на уровень вашей текущей единицы трансляции. Снабдите коментариями для ясности.
3) fmt::format здесь лишняя зависимость. Вы можете воспользоваться сразу Си-строками, или сформировать строку через конкатинацию.
4) Если вы всегда возвращаете true, тогда зачем вообще что-либо возвращать? void должно быть достаточно хорошо.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
- Не кросплатформерно(хотя вряд ли она тут нужна, если используется lxc)
- если contname или unid принимаются от пользователя, то это серьёзная уязвимость
- зачем лишняя зависимость, если форматирование есть в std::?
- константы лучше выносить в конфиг, удобнее редактировать потом

Да и такое обычно пишут на python/bash, если конечно это не часть проекта, который уже на C++
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы