Source-Changes-D archive

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

Re: CVS commit: src/sys/dev/pci



   Date: Wed, 26 Oct 2016 06:10:39 +0800 (PHT)
   From: Paul Goyette <paul%whooppee.com@localhost>

   There's only 9 snprintf() calls.  I could simply provide a macro:

   #define ADD_TEXT(dest, end, format, ...)			\
           {							\
                   int len, max = (end) - (dest);			\

                   len = snprintf((dest), max, (format), __VA_ARGS__); \
                   if (len > max)					\
                           return;					\
                   (dest) += len;					\
           }


   Then all of the snprintf() calls become simply

           ADD_TEXT(cp, ep, <format>, ...);

   (Of course, after last use I'd add a #undef ADD_TEXT to clean up...)

Maybe we should have a standard function to do this:

	if ((error = snprintf_inplace(&p, &n, fmt, x, y, z)) != 0)
		goto out;

would be equivalent to

	nfmt = snprintf(p, n, fmt, x, y, z);
	if (nfmt > n) {
		n = nfmt;
		error = ETRUNC;
		goto out;
	}
	p += nfmt;
	n -= nfmt;

or something like that, with the appropriate choice of update so that
it is easy either to report an error or to realloc a buffer and retry.
(Of course, then we need to decide whether p is const-qualified or
not, signed or unsigned or unqualified char, &c.  Bleh.)


Home | Main Index | Thread Index | Old Index