]> git.ipfire.org Git - thirdparty/dhcp.git/commitdiff
Support encode-int() expression.
authorTed Lemon <source@isc.org>
Thu, 27 May 1999 14:15:09 +0000 (14:15 +0000)
committerTed Lemon <source@isc.org>
Thu, 27 May 1999 14:15:09 +0000 (14:15 +0000)
common/parse.c

index 5951cca403e456ea5763e6c0b575161f75ad81a6..c00381427d1c6c744c07797474ceb28155b38f08 100644 (file)
@@ -22,7 +22,7 @@
 
 #ifndef lint
 static char copyright[] =
-"$Id: parse.c,v 1.23 1999/05/07 17:38:42 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium.  All rights reserved.\n";
+"$Id: parse.c,v 1.24 1999/05/27 14:15:09 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium.  All rights reserved.\n";
 #endif /* not lint */
 
 #include "dhcpd.h"
@@ -1797,6 +1797,72 @@ int parse_non_binary (expr, cfile, lose, context)
                }
                break;
        
+             case ENCODE_INT:
+               token = next_token (&val, cfile);       
+               token = next_token (&val, cfile);
+               if (token != LPAREN) {
+                       parse_warn ("left parenthesis expected.");
+                       *lose = 1;
+                       return 0;
+               }
+
+               if (!expression_allocate (expr,
+                                         "parse_expression: ENCODE_INT"))
+                       log_fatal ("can't allocate expression");
+
+               if (!parse_numeric_expression (&(*expr) -> data.encode_int,
+                                              cfile, lose)) {
+                       parse_warn ("expecting numeric expression.");
+                       skip_to_semi (cfile);
+                       *lose = 1;
+                       expression_dereference
+                               (expr, "parse_expression: ENCODE_INT");
+                       return 0;
+               }
+
+               token = next_token (&val, cfile);
+               if (token != COMMA) {
+                       parse_warn ("comma expected.");
+                       *lose = 1;
+                       return 0;
+               }
+
+               token = next_token (&val, cfile);
+               if (token != NUMBER) {
+                       parse_warn ("number expected.");
+                       *lose = 1;
+                       return 0;
+               }
+               switch (atoi (val)) {
+                     case 8:
+                       (*expr) -> op = expr_encode_int8;
+                       break;
+
+                     case 16:
+                       (*expr) -> op = expr_encode_int16;
+                       break;
+
+                     case 32:
+                       (*expr) -> op = expr_encode_int32;
+                       break;
+
+                     default:
+                       parse_warn ("unsupported integer size %d", atoi (val));
+                       *lose = 1;
+                       skip_to_semi (cfile);
+                       expression_dereference
+                               (expr, "parse_expression: ENCODE_INT");
+                       return 0;
+               }
+
+               token = next_token (&val, cfile);
+               if (token != RPAREN) {
+                       parse_warn ("right parenthesis expected.");
+                       *lose = 1;
+                       return 0;
+               }
+               break;
+       
              case NUMBER:
                /* If we're in a numeric context, this should just be a
                   number, by itself. */