ngx_snprintf не ставит '\0' в конце строки

Igor Sysoev is at rambler-co.ru
Wed May 20 16:41:14 MSD 2009


On Mon, May 18, 2009 at 03:29:56PM +0400, Peter Leonov wrote:

> Большое спасибо, пойду запишу.
> 
> С памятью в энжинксе все вообще шикарно ? это первое, что меня в нем  
> поразило.
> Теперь, когда вижу в других проектах простой malloc, трясет всего  
> насквозь :)

Идея пулов, на самом деле, была взята из Апача и немного модифицирована.
А потом я обнаружил, что Постгрес тоже использует пулы. То есть, идея
не уникальна :)

> On 18.05.2009, at 3:19, Maxim Dounin wrote:
> 
> >Hello!
> >
> >On Mon, May 18, 2009 at 02:33:59AM +0400, Peter Leonov wrote:
> >
> >>Здравствуйте.
> >>
> >>Понимаю так, что вызывающая ngx_snprintf() строна сама должна
> >>позаботиться о терминаторе в случае, когда он нужен. Верно понимаю?
> >
> >Нет.  Если нужен '\0' - надо в явном виде его попросить.  Это
> >делается через %Z.
> >
> >>А в общем, функции ngx_*printf() были созданы для того, чтобы было  
> >>легко
> >>печатать встроенные в энжи типы данных? Или они служат достижению  
> >>других
> >>целей?
> >
> >Да.  Плюс они не занимаются печатью '\0' там где это не надо, и не
> >делают abort() при нехватке памяти (точнее - вообще не пытаются
> >выделять память).
> >
> >Maxim Dounin
> >
> 
> On 18.05.2009, at 10:05, Igor Sysoev wrote:
> 
> >On Mon, May 18, 2009 at 02:33:59AM +0400, Peter Leonov wrote:
> >
> >>Здравствуйте.
> >>
> >>Понимаю так, что вызывающая ngx_snprintf()
> >>строна сама должна позаботиться о
> >>терминаторе в случае, когда он нужен.
> >>Верно понимаю?
> >
> >%Z
> >
> >>А в общем, функции ngx_*printf() были созданы
> >>для того, чтобы было легко печатать
> >>встроенные в энжи типы данных? Или они
> >>служат достижению других целей?
> >
> >На самом деле, он был создан, чтобы печать ставшие стандартными типы  
> >C:
> >off_t, time_t, size_t, pid_t, etc. Когда-то configure подбирала для  
> >них %lld
> >и прочая. Потом я плюнул и сделал ngx_snprintf(), заодно добавив туда
> >nginx'овских типов. Минус ровно один - при использовании родного  
> >sprintf()
> >icc (не знаю, как другие сейчас) умеет предупреждать о  
> >несоответствии типа
> >параметру.
> >
> >
> >-- 
> >Игорь Сысоев
> >http://sysoev.ru
> >
> 
> --
> С уважением,
> Петр Леонов.
> 

-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list