ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: ngx_snprintf не ставит '\0' в конце строки
  • From: Peter Leonov <gojpeg@xxxxxxxxx>
  • Date: Mon, 18 May 2009 15:29:56 +0400
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:from:to :in-reply-to:content-type:content-transfer-encoding:mime-version :subject:date:references:x-mailer; bh=EpaGsG9JFgyPqSTBUFqZzyXGIzE9qU9HRvCL5fZSpxY=; b=jVUJfQcaAAm35HAx1oDJgK+PJlGr9a20aW7NJCFB8yDAkAWdHyJvukWwOh1K7/6OXv 4a76Y9ZV5CjQZPDMcwt8nQ4MCm4QrjsGy94NRBoYRo2yi/JQWu1nWiQv+2Aooy8EgRz8 rU15PA2Wml7+0sRMdlzdHpQYN+SvoATuGZM7M=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:from:to:in-reply-to:content-type :content-transfer-encoding:mime-version:subject:date:references :x-mailer; b=ZIHgv0jBREQpKVDsEhYPr3h7+9IE4ygDxg3JZb+gE5XTgrWoITZLgmeX+oBCJkkEWI Q6fkQmJxSFmpBf2c+t7vju2ERQoEmroLf6fCttKM988ppo2vO8GR9loOHkNvMS7Lm4+g ibLpnHpufSH9jTs+uOb9si/w1KGt2lj0b7c9s=
  • In-reply-to: <20090517231940.GV27758@xxxxxxxxxx>
  • References: <E74C79AD-7816-48A3-9E50-A76489CB75F1@xxxxxxxxx> <20090517231940.GV27758@xxxxxxxxxx>

Большое спасибо, пойду запишу.

С памятью в энжинксе все вообще шикарно ? это первое, что меня в нем поразило. Теперь, когда вижу в других проектах простой 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


--
С уважением,
Петр Леонов.



 




Copyright © Lexa Software, 1996-2009.