* Originally in ru.fidonet.today
* Crossposted in ru.ftn.develop
Hello, Stas!
Tuesday April 01 2025 12:20, from Stas Mishchenkov -> Nil A:
P.S. Кто-нибудь хоть попробовал переставить дату на 2038 год,
чтобы проверить совместимость с 32-битным time_t?
И что я должен увидеть? Кривой @msgid в мессаге?
ет. Проблему в дате. Она перевернётся на 1901 год на некоторых
базах и редакторах.
В ДЖАМе date created - unsigned long. у, да. 32 бита и всё.
Если следовать JAM spec, и использовать беззнаковое число, то проблема откладывается до 7го февраля 2106 года. Дожить сложно до этой даты, так что пофиг.
Проблема в том, что использовать time_t как uint32_t - это не стандартно, и всякие LIBC функции mtime, localtime, ctime, т.д. работают как со знаковым числом.
Очень старый софт, который собран с time_t 32bit скорее всего накосячит. Если современная сборка, то uint32_t надо кастить до современного time_t, т.е. int64_t, и тогда localtime и ctime будут работать корректно.
Squish использует DOS формат даты (когда секунды только чётные могут быть), и там дата заканчивается в 2107 году. Ура, ДОС живее всех живых!
Msg и .pkt формат основан на 20-байтной строке, типа "01 Jan 86 02:34:56", и если оно уже работает в 2000ом году, то и дальше будет работать.
Как обошли проблему y2k тогда? апример, код в хаске, от текущей даты плюс/минус окно в 50 лет.
/* Use sliding window technique to interprete the year number */
while(yy <= tim->tm_year - 50)
{
yy += 100;
}
while(yy > tim->tm_year + 50)
{
yy -= 100;
}
Binkp протокол ещё гляну. Тут всё хорошо - date_time format is described in [RFC822].
Я так понимаю, будет очередной костыль - if $date < '1984' или что-то
в этом духе, который потом опять сломается и будет заменён на другой
такой же.
Ох уж эти ваши костыли. Изобретут новый клудж ;-)
Best Regards, Nil
--- GoldED+/LNX 1.1.5-b20240306
* Origin: ChatGPT can make mistakes. Check important info. (2:5015/46)