tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: macro directives inside macro arguments undefined
On Feb 24, 2011, at 9:32 14AM, David Laight wrote:
> On Thu, Feb 24, 2011 at 11:31:35AM +0000, Iain Hibbert wrote:
>
> The original code seems to be:
>
>> sprintf(t,
>> #ifdef USE_QUAD_T
>> #ifdef PRId64
>> " Forward: Pkts in %" PRId64 " Bytes in %" PRId64
>> " Pkts out %" PRId64 " Bytes out %" PRId64
>> " Backward: Pkts in %" PRId64 " Bytes in %" PRId64
>> " Pkts out %" PRId64 " Bytes out %" PRId64,
>> #else
>> " Forward: Pkts in %qd Bytes in %qd Pkts out %qd Bytes
>> out %qd Backward: Pkts in %qd Bytes in %qd Pkts out %qd Bytes out %qd",
>> #endif /* PRId64 */
>> #else
>> " Forward: Pkts in %ld Bytes in %ld Pkts out %ld Bytes
>> out %ld Backward: Pkts in %ld Bytes in %ld Pkts out %ld Bytes out %ld",
>> #endif
>> sl->isl_pkts[0], sl->isl_bytes[0],
>> sl->isl_pkts[1], sl->isl_bytes[1],
>> sl->isl_pkts[2], sl->isl_bytes[2],
>> sl->isl_pkts[3], sl->isl_bytes[3]);
>>
>> t += strlen(t);
>
> That is just trully horrid and should be converted to snprintf().
> The chance of the buffer being big enough seesm unlikely to be
> guaranteeable!
>
Why do you say that? We're only dealing with numbers here (rather than %s);
their length is bounded by the machine's word size.
>
--Steve Bellovin, http://www.cs.columbia.edu/~smb
Home |
Main Index |
Thread Index |
Old Index