[FFmpeg-devel] [PATCH] lavu: add av_bprintf and related.
Stefano Sabatini
stefasab at gmail.com
Sun Mar 11 23:17:40 CET 2012
On date Sunday 2012-03-11 17:20:38 +0100, Nicolas George encoded:
>
> Signed-off-by: Nicolas George <nicolas.george at normalesup.org>
> ---
> doc/APIchanges | 3 +
> libavutil/Makefile | 6 +-
> libavutil/avutil.h | 2 +-
> libavutil/bprint.c | 198 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> libavutil/bprint.h | 132 ++++++++++++++++++++++++++++++++++
> 5 files changed, 338 insertions(+), 3 deletions(-)
> create mode 100644 libavutil/bprint.c
> create mode 100644 libavutil/bprint.h
[...]
> +void av_bprintf(AVBPrint *buf, const char *fmt, ...)
> +{
> + unsigned room;
> + char *dst;
> + va_list vl;
> + int add;
nit+++: maybe len_add to stress the fact that it represents a length
> +
> + while (1) {
> + room = av_bprint_room(buf);
> + dst = room ? buf->str + buf->len : NULL;
> + va_start(vl, fmt);
> + add = vsnprintf(dst, room, fmt, vl);
> + va_end(vl);
> + if (add <= 0)
> + return;
> + if (add < room)
> + break;
> + if (av_bprint_grow(buf, 0))
> + break;
> + }
> + /* arbitrary margin to avoid small overflows */
> + add = FFMIN(add, UINT_MAX - 5 - buf->len);
I'm not sure I understand the need for this check.
room provides the available size left in the buffer, since the max
size is UINT_MAX then we're sure that:
len+room <= UINT_MAX
and so since add+1 <= room then:
len+add+1 <= UINT_MAX.
So len+add can't be greater than UINT_MAX-1. What's the gain if you
restrict the maximum recorded len to UINT_MAX - 5? Especially
considering that the real len will be len+add.
> + buf->len += add;
> +}
> +
> +void av_bprint_chars(AVBPrint *buf, char c, unsigned n)
> +{
> + unsigned room, real_n;
> +
> + while (1) {
> + room = av_bprint_room(buf);
> + if (n < room)
> + break;
> + if (av_bprint_grow(buf, 0))
> + break;
> + }
> + if (room) {
> + real_n = FFMIN(n, room - 1);
> + memset(buf->str + buf->len, c, real_n);
> + buf->str[buf->len + real_n] = 0;
> + }
> + buf->len += FFMIN(n, UINT_MAX - 5 - buf->len);
ditto
[...]
Looks fine otherwise.
--
FFmpeg = Faithful & Fundamental Mournful Peaceful Ecletic Guru
More information about the ffmpeg-devel
mailing list