Mercurial > mplayer.hg
changeset 21504:06fe68e8049a
Simplify NEXT_LINE macro and put most of it in a separate function.
author | reimar |
---|---|
date | Wed, 06 Dec 2006 12:25:52 +0000 |
parents | f9a95c04844a |
children | 47a16f0da01c |
files | stream/freesdp/parser.c |
diffstat | 1 files changed, 16 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/stream/freesdp/parser.c Wed Dec 06 12:23:32 2006 +0000 +++ b/stream/freesdp/parser.c Wed Dec 06 12:25:52 2006 +0000 @@ -36,6 +36,21 @@ #include "parserpriv.h" /** + * \brief find the start of the next line + * \param c pointer to current position in string + * \return pointer to start of next line or NULL if illegal (i.e. + * a '\r' is not followed by a '\n' + */ +static const char *next_line(const char *c) { + c += strcspn(c, "\n\r"); + if (*c == 0) return c; + if (*c == '\r') c++; + if (*c == '\n') + return c + 1; + return NULL; +} + +/** * Moves the <code>c<code> pointer up to the beginning of the next * line. * @@ -43,22 +58,7 @@ * @retval FSDPE_ILLEGAL_CHARACTER, when an illegal '\r' character * (not followed by a '\n') is found, returns */ -#define NEXT_LINE(c) \ -{ \ - while ((*(c) != '\0') && (*(c) != '\r') && (*(c) != '\n')) { \ - (c)++; \ - } \ - if (*(c) == '\n') { \ - (c)++; \ - } else if (*(c) == '\r') { \ - (c)++; \ - if (*(c) == '\n') { \ - (c)++; \ - } else { \ - return FSDPE_ILLEGAL_CHARACTER; \ - } \ - } \ -} +#define NEXT_LINE(c) do { if (!(c = next_line(c))) return FSDPE_ILLEGAL_CHARACTER; } while (0); fsdp_error_t fsdp_parse (const char *text_description, fsdp_description_t * dsc)