diff options
author | diego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2010-10-01 18:29:35 +0000 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2010-11-02 04:18:08 +0200 |
commit | 69e3e06a1ab7c58b16294d0c7451b374e5966e21 (patch) | |
tree | 2505424106c7b90448262cc3bdc3f73b699ccf32 /subopt-helper.c | |
parent | b44a0edd9fd1d88e7d114c3ba1f34662127981ad (diff) | |
download | mpv-69e3e06a1ab7c58b16294d0c7451b374e5966e21.tar.bz2 mpv-69e3e06a1ab7c58b16294d0c7451b374e5966e21.tar.xz |
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
Diffstat (limited to 'subopt-helper.c')
-rw-r--r-- | subopt-helper.c | 135 |
1 files changed, 66 insertions, 69 deletions
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 ***/ |