Browse Source

Optimize vlc_memstream_puts() with constant string

If the string given to vlc_memstream_puts() is constant, or at least
its length is constant, use vlc_memstream_write() instead and let GCC
compute the length at build-time.
pull/55/head
Rémi Denis-Courmont 10 years ago
parent
commit
0579e0223a
  1. 11
      include/vlc_memstream.h
  2. 4
      src/text/memstream.c

11
include/vlc_memstream.h

@ -62,4 +62,15 @@ VLC_API
int vlc_memstream_printf(struct vlc_memstream *s, const char *fmt,
...) VLC_FORMAT(2,3);
# ifdef __GNUC__
static inline int vlc_memstream_puts_len(struct vlc_memstream *ms,
const char *str, size_t len)
{
return (vlc_memstream_write(ms, str, len) == len) ? (int)len : EOF;
}
# define vlc_memstream_puts(ms,s) \
(__builtin_constant_p(__builtin_strlen(s)) ? \
vlc_memstream_puts_len(ms,s,__builtin_strlen(s)) : \
vlc_memstream_puts(ms,s))
# endif
#endif /* VLC_MEMSTREAM_H */

4
src/text/memstream.c

@ -82,7 +82,7 @@ int vlc_memstream_putc(struct vlc_memstream *ms, int c)
return fputc(c, ms->stream);
}
int vlc_memstream_puts(struct vlc_memstream *ms, const char *str)
int (vlc_memstream_puts)(struct vlc_memstream *ms, const char *str)
{
if (unlikely(ms->stream == NULL))
return EOF;
@ -145,7 +145,7 @@ int vlc_memstream_putc(struct vlc_memstream *ms, int c)
return (vlc_memstream_write(ms, &(unsigned char){ c }, 1u) == 1) ? c : EOF;
}
int vlc_memstream_puts(struct vlc_memstream *ms, const char *str)
int (vlc_memstream_puts)(struct vlc_memstream *ms, const char *str)
{
size_t len = strlen(str);
return (vlc_memstream_write(ms, str, len) == len) ? 0 : EOF;

Loading…
Cancel
Save