mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-10 23:07:05 +00:00
add support for PARSE_DOUBLE, and remove identifiers for
types not supported (INT16 and UINT16) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@93925 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -289,15 +289,18 @@ enum ast_parse_flags {
|
|||||||
/* numeric types, with optional default value and bound checks.
|
/* numeric types, with optional default value and bound checks.
|
||||||
* Additional arguments are passed by value.
|
* Additional arguments are passed by value.
|
||||||
*/
|
*/
|
||||||
PARSE_INT16 = 0x0001,
|
PARSE_INT32 = 0x0001,
|
||||||
PARSE_INT32 = 0x0002,
|
PARSE_UINT32 = 0x0002,
|
||||||
PARSE_UINT16 = 0x0003,
|
PARSE_DOUBLE = 0x0003,
|
||||||
PARSE_UINT32 = 0x0004,
|
#if 0 /* not supported yet */
|
||||||
|
PARSE_INT16 = 0x0004,
|
||||||
|
PARSE_UINT16 = 0x0005,
|
||||||
|
#endif
|
||||||
/* Returns a struct sockaddr_in, with optional default value
|
/* Returns a struct sockaddr_in, with optional default value
|
||||||
* (passed by reference) and port handling (accept, ignore,
|
* (passed by reference) and port handling (accept, ignore,
|
||||||
* require, forbid). The format is 'host.name[:port]'
|
* require, forbid). The format is 'host.name[:port]'
|
||||||
*/
|
*/
|
||||||
PARSE_INADDR = 0x0005,
|
PARSE_INADDR = 0x000f,
|
||||||
|
|
||||||
/* Other data types can be added as needed */
|
/* Other data types can be added as needed */
|
||||||
|
|
||||||
|
@@ -35,6 +35,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#include <math.h> /* HUGE_VAL */
|
||||||
|
|
||||||
#define AST_INCLUDE_GLOB 1
|
#define AST_INCLUDE_GLOB 1
|
||||||
|
|
||||||
#ifdef AST_INCLUDE_GLOB
|
#ifdef AST_INCLUDE_GLOB
|
||||||
@@ -2149,6 +2151,32 @@ int ast_parse_arg(const char *arg, enum ast_parse_flags flags,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case PARSE_DOUBLE:
|
||||||
|
{
|
||||||
|
double *result = p_result;
|
||||||
|
double x, def = result ? *result : 0,
|
||||||
|
low = -HUGE_VAL, high = HUGE_VAL;
|
||||||
|
|
||||||
|
/* optional argument: first default value, then range */
|
||||||
|
if (flags & PARSE_DEFAULT)
|
||||||
|
def = va_arg(ap, double);
|
||||||
|
if (flags & (PARSE_IN_RANGE|PARSE_OUT_RANGE)) {
|
||||||
|
/* range requested, update bounds */
|
||||||
|
low = va_arg(ap, double);
|
||||||
|
high = va_arg(ap, double);
|
||||||
|
}
|
||||||
|
x = strtod(arg, NULL);
|
||||||
|
error = (x < low) || (x > high);
|
||||||
|
if (flags & PARSE_OUT_RANGE)
|
||||||
|
error = !error;
|
||||||
|
if (result)
|
||||||
|
*result = error ? def : x;
|
||||||
|
ast_debug(3,
|
||||||
|
"extract double from [%s] in [%f, %f] gives [%f](%d)\n",
|
||||||
|
arg, low, high,
|
||||||
|
result ? *result : x, error);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case PARSE_INADDR:
|
case PARSE_INADDR:
|
||||||
{
|
{
|
||||||
char *port, *buf;
|
char *port, *buf;
|
||||||
|
Reference in New Issue
Block a user