version 1.1, 2012/02/21 22:30:18
|
version 1.1.1.1, 2012/10/09 09:06:54
|
Line 3
|
Line 3
|
Routines for manipulating parse trees... */ |
Routines for manipulating parse trees... */ |
|
|
/* |
/* |
* Copyright (c) 2011 by Internet Systems Consortium, Inc. ("ISC") | * Copyright (c) 2011-2012 by Internet Systems Consortium, Inc. ("ISC") |
* Copyright (c) 2004-2007,2009 by Internet Systems Consortium, Inc. ("ISC") |
* Copyright (c) 2004-2007,2009 by Internet Systems Consortium, Inc. ("ISC") |
* Copyright (c) 1995-2003 by Internet Software Consortium |
* Copyright (c) 1995-2003 by Internet Software Consortium |
* |
* |
Line 2379 int evaluate_numeric_expression (result, packet, lease
|
Line 2379 int evaluate_numeric_expression (result, packet, lease
|
struct binding *binding; |
struct binding *binding; |
struct binding_value *bv; |
struct binding_value *bv; |
unsigned long ileft, iright; |
unsigned long ileft, iright; |
|
int rc = 0; |
|
|
switch (expr -> op) { |
switch (expr -> op) { |
case expr_check: |
case expr_check: |
Line 2446 int evaluate_numeric_expression (result, packet, lease
|
Line 2447 int evaluate_numeric_expression (result, packet, lease
|
status = (evaluate_data_expression |
status = (evaluate_data_expression |
(&data, packet, lease, client_state, in_options, |
(&data, packet, lease, client_state, in_options, |
cfg_options, scope, expr -> data.extract_int, MDL)); |
cfg_options, scope, expr -> data.extract_int, MDL)); |
if (status && data.len >= 2) | if (status && data.len >= 2) { |
*result = getUShort (data.data); |
*result = getUShort (data.data); |
|
rc = 1; |
|
} |
#if defined (DEBUG_EXPRESSIONS) |
#if defined (DEBUG_EXPRESSIONS) |
log_debug ("num: extract_int16 (%s) = %ld", | if (rc == 1) { |
((status && data.len >= 2) ? | log_debug ("num: extract_int16 (%s) = %ld", |
print_hex_1 (data.len, data.data, 60) : "NULL"), | print_hex_1(data.len, data.data, 60) |
*result); | *result); |
| } else { |
| log_debug ("num: extract_int16 (NULL) = NULL"); |
| } |
#endif |
#endif |
if (status) data_string_forget (&data, MDL); |
if (status) data_string_forget (&data, MDL); |
return (status && data.len >= 2); | return (rc); |
|
|
case expr_extract_int32: |
case expr_extract_int32: |
memset (&data, 0, sizeof data); |
memset (&data, 0, sizeof data); |
status = (evaluate_data_expression |
status = (evaluate_data_expression |
(&data, packet, lease, client_state, in_options, |
(&data, packet, lease, client_state, in_options, |
cfg_options, scope, expr -> data.extract_int, MDL)); |
cfg_options, scope, expr -> data.extract_int, MDL)); |
if (status && data.len >= 4) | if (status && data.len >= 4) { |
*result = getULong (data.data); |
*result = getULong (data.data); |
|
rc = 1; |
|
} |
#if defined (DEBUG_EXPRESSIONS) |
#if defined (DEBUG_EXPRESSIONS) |
log_debug ("num: extract_int32 (%s) = %ld", | if (rc == 1) { |
((status && data.len >= 4) ? | log_debug ("num: extract_int32 (%s) = %ld", |
print_hex_1 (data.len, data.data, 60) : "NULL"), | print_hex_1 (data.len, data.data, 60), |
*result); | *result); |
| } else { |
| log_debug ("num: extract_int32 (NULL) = NULL"); |
| } |
#endif |
#endif |
if (status) data_string_forget (&data, MDL); |
if (status) data_string_forget (&data, MDL); |
return (status && data.len >= 4); | return (rc); |
|
|
case expr_const_int: |
case expr_const_int: |
*result = expr -> data.const_int; |
*result = expr -> data.const_int; |