LINUX.ORG.RU

Как вы бы поступили?

 , , ,


0

1

Ну вот сколхозили вы себе свой конфигурационный формат. Допустим у вас в конфиге

var = 100500

И в программе

//возврат значения конкретной размерности, без вариантов!
//Никаких big num только нативные типы платформы! 

uint64_t var = config_get_u64(cfg,"var");

Всё ок, но как вы бы обработали вот такое?

var = 10000000000000000000500000000000000000000
  • 1: Выплюнули ошибку и убили программу
  • 2: Обрезали бы число до максимального хранимого типа и вернули 18446744073709551616
  • 3: Дали бы по шапке тому кто такие значения космичесикие вписывает
  • invalid value: 0x"6’33>42
  • 5:Иное

Микро опрос -

Нужны ли «неограниченные» числа в конфигах?

  • да
  • нет
★★★★★

Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от hippi90

Расстояние до соседней галактики в нанометрах.

До соседних галактик порядка 10^31 нанометров, если я не ошибаюсь. В 128 бит влезет.

anonymous
()

Ну вот сколхозили вы себе свой конфигурационный формат

А зачем, чтобы задваться такими вопросами? Пусть ими задаются разработчики библиотеки-парсера!

annulen ★★★★★
()

Игнорировать строку, либо обрезать. В зависимости от того, насколько это embedded. Я бы для любого embedded обрезал при проверке сэкономив пару байт кода и время на написание (но только в случе когда это не приводит к крашу, переполнение обычно относительно безопасно).

mittorn ★★★★★
()

Если пишу либу или более-менее средний слой, то делегировал бы решать это вызывающему, по типу

int get_u64(cfg, name, u64 *v, char **err);
if (get_u64(cfg, "a", &v1, &err) ||
    get_str(cfg, "b", &v2, &err) ||
    ...)
{
    printf("%s\n", err); // 'value out of range for key "a" in ./conf/cfg.config'
    free(err);
    if (hatmode) givebyhat(getuid());
    // v1 не менялся
}

А если для себя, чисто прога без апи, то exit() по месту ошибки с похожим сообщением. Клампить значения это моветон, т.к. мало ли чего юзер там накопипастил случайно.

Кстати чего мне не во всех тредах писать можно теперь, запретили что-ли опять?

anonymous
()

Иное: проверял бы читаемое значение в соответствии с его смыслом, и если выходит за рамки — выводил бы осмысленное сообщение об ошибке. Понятно, что если это номер порта — диапазон один, если число молекул в океане — другой.

Нужно ли при этом ещё и прерывать работу программы — зависит от программы, автор поставил тег embedded, я не знаю, как в embedded в этом случае принято…

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.