Andrei Pelinescu-Onciul wrote:
> On May 22, 2008 at 09:30, Alfred E. Heggestad <[EMAIL PROTECTED]> wrote:
>> Andrei Pelinescu-Onciul wrote:
>>> andrei 2008/05/21 23:31:19 CEST
>>>
>>> SER CVS Repository
>>>
>>> Modified files:
>>> . ut.h
>>> Log:
>>> - added ushort2sbuf() and ushort2str(): they convert an unsigned short
>>> into
>>> its ascii representation (base 10). ushort2str() returns a pointer to a
>>> null
>>> terminated static string, while ushor2sbuf() fills the supplied buffer.
>>>
>> Andrei,
>>
>>
>> the code that was added declares the buffer static (i.e.
>> not on the call stack):
>>
>>
>> static inline char* ushort2str(unsigned short u)
>> {
>> static char buf[USHORT2STR_MAX_LEN];
>> int len;
>>
>> len=ushort2sbuf(u, buf, sizeof(buf)-1);
>> buf[len]=0;
>> return buf;
>> }
>>
>>
>> this means that the function is not re-entrant, and will not
>> work in multi-thread/proc environments..
>
> Yes, it's not thread safe, like most of the other string printing function
> (int2str(), ip_addr2a() a.s.o). All the functions ending in 2a or 2str
> will return a pointer to a static buffer and are not thread safe (but
> ok in multi-process).
> They will also not work if called twice in a row without saving the
> result (e.g. DBG("port1=%s port2=%s\n", ushortstr(1), ushortstr(2))
> will print either "port1=2 port2=2" or "port1=1 port2=1".
> However they are more convenient for use in LOG() or DBG().
>
> If you want thread safe, try the 2sbuf version: len=ushort2sbuf(u, buf,
> buf_len); buf[len]=0 (which will write the result in buf).
>
ok I understand..
I should have thought about the multi-process thing before posting :)
>> I suggest changing "static char buf" to "char buf"..
>
> That won't work (we can't return it).
>
right.
>
> Andrei
_______________________________________________
Serdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/serdev