From 69e3e06a1ab7c58b16294d0c7451b374e5966e21 Mon Sep 17 00:00:00 2001 From: diego Date: Fri, 1 Oct 2010 18:29:35 +0000 Subject: Move code to avoid forward declarations in top-level .c files git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32421 b3059339-0415-0410-9bf9-f77b7e298cf2 --- subopt-helper.c | 135 +++++++++++++++++++++++++++----------------------------- 1 file changed, 66 insertions(+), 69 deletions(-) (limited to 'subopt-helper.c') diff --git a/subopt-helper.c b/subopt-helper.c index 31cedeef6c..37c634b5ff 100644 --- a/subopt-helper.c +++ b/subopt-helper.c @@ -47,10 +47,72 @@ #define NDEBUG #endif -/* prototypes for argument parsing */ -static char const * parse_int( char const * const str, int * const valp ); -static char const * parse_str( char const * const str, strarg_t * const valp ); -static char const * parse_float( char const * const str, float * const valp ); + +static char const * parse_int( char const * const str, int * const valp ) +{ + char * endp; + + assert( str && "parse_int(): str == NULL" ); + + *valp = (int)strtol( str, &endp, 0 ); + + /* nothing was converted */ + if ( str == endp ) { return NULL; } + + return endp; +} + +static char const * parse_float( char const * const str, float * const valp ) +{ + char * endp; + + assert( str && "parse_float(): str == NULL" ); + + *valp = strtod( str, &endp ); + + /* nothing was converted */ + if ( str == endp ) { return NULL; } + + return endp; +} + +#define QUOTE_CHAR '%' +static char const * parse_str( char const * str, strarg_t * const valp ) +{ + char const * match = strchr( str, ':' ); + + if (str[0] == QUOTE_CHAR) { + int len = 0; + str = &str[1]; + len = (int)strtol(str, (char **)&str, 0); + if (!str || str[0] != QUOTE_CHAR || (len > strlen(str) - 1)) + return NULL; + str = &str[1]; + match = &str[len]; + } + else + if (str[0] == '"') { + str = &str[1]; + match = strchr(str, '"'); + if (!match) + return NULL; + valp->len = match - str; + valp->str = str; + return &match[1]; + } + if ( !match ) + match = &str[strlen(str)]; + + // empty string or too long + if ((match == str) || (match - str > INT_MAX)) + return NULL; + + valp->len = match - str; + valp->str = str; + + return match; +} + /** * \brief Try to parse all options in str and fail if it was not possible. @@ -249,71 +311,6 @@ else if ( substr_len == opt_len+2 ) return 0; } -static char const * parse_int( char const * const str, int * const valp ) -{ - char * endp; - - assert( str && "parse_int(): str == NULL" ); - - *valp = (int)strtol( str, &endp, 0 ); - - /* nothing was converted */ - if ( str == endp ) { return NULL; } - - return endp; -} - -static char const * parse_float( char const * const str, float * const valp ) -{ - char * endp; - - assert( str && "parse_float(): str == NULL" ); - - *valp = strtod( str, &endp ); - - /* nothing was converted */ - if ( str == endp ) { return NULL; } - - return endp; -} - -#define QUOTE_CHAR '%' -static char const * parse_str( char const * str, strarg_t * const valp ) -{ - char const * match = strchr( str, ':' ); - - if (str[0] == QUOTE_CHAR) { - int len = 0; - str = &str[1]; - len = (int)strtol(str, (char **)&str, 0); - if (!str || str[0] != QUOTE_CHAR || (len > strlen(str) - 1)) - return NULL; - str = &str[1]; - match = &str[len]; - } - else - if (str[0] == '"') { - str = &str[1]; - match = strchr(str, '"'); - if (!match) - return NULL; - valp->len = match - str; - valp->str = str; - return &match[1]; - } - if ( !match ) - match = &str[strlen(str)]; - - // empty string or too long - if ((match == str) || (match - str > INT_MAX)) - return NULL; - - valp->len = match - str; - valp->str = str; - - return match; -} - /*** common test functions ***/ -- cgit v1.2.3