История изменений
Исправление Sorcerer, (текущая версия) :
Есть ещё реализация в nginx: ngx_snprintf(). Она вызывается самим nginx'ом из его обработчиков сигналов. Но, как многое в nginx, эта функция сделана самобытно, так что форматирование отличается от форматирования printf() (а значит, прощайте, предупреждения в compile time), да и насчёт поддержки ширины полей я не уверен.
Также см. apr_snprintf() из Apache Portable Runtime. В документации не сказано, что она реентерабельна, но если заглянуть в код, то там не видно криминала. Правда, формально она небезопасна, т.к. использует как минимум strlen(), но это ж как надо упороться, чтобы реализация strlen() была небезопасной? В любом случае, никто не мешает вам сделать безопасную реализацию небезопасных функций, используемых apr_snprintf().
Исходная версия Sorcerer, :
Есть ещё реализация в nginx: ngx_snprintf(). Она вызывается самим nginx'ом из своих обработчиков сигналов. Но, как многое в nginx, эта функция сделана самобытно, так что форматирование отличается от форматирования printf() (а значит, прощайте, предупреждения в compile time), да и насчёт поддержки ширины полей я не уверен.
Также см. apr_snprintf() из Apache Portable Runtime. В документации не сказано, что она реентерабельна, но если заглянуть в код, то там не видно криминала. Правда, формально она небезопасна, т.к. использует как минимум strlen(), но это ж как надо упороться, чтобы реализация strlen() была небезопасной? В любом случае, никто не мешает вам сделать безопасную реализацию небезопасных функций, используемых apr_snprintf().