+
+ /*
+ * Here is where we check to see if the user has set certain
+ * expectations (e.g. 32 bit integer). If so, we do type checking
+ * and possible additional scanning (e.g. for range).
+ */
+ switch (expect) {
+ case T_PINT32:
+ lf->pint32_val = scan_pint(lf, lf->str);
+ lf->pint32_val2 = lf->pint32_val;
+ token = T_PINT32;
+ break;
+
+ case T_PINT32_RANGE:
+ if (token == T_NUMBER) {
+ lf->pint32_val = scan_pint(lf, lf->str);
+ lf->pint32_val2 = lf->pint32_val;
+ token = T_PINT32;
+ } else {
+ char *p = strchr(lf->str, '-');
+ if (!p) {
+ scan_err2(lf, "expected an integer or a range, got %s: %s",
+ lex_tok_to_str(token), lf->str);
+ token = T_ERROR;
+ break;
+ }
+ *p++ = 0; /* terminate first half of range */
+ lf->pint32_val = scan_pint(lf, lf->str);
+ lf->pint32_val2 = scan_pint(lf, p);
+ token = T_PINT32_RANGE;
+ }
+ break;
+
+ case T_INT32:
+ if (token != T_NUMBER || !is_a_number(lf->str)) {
+ scan_err2(lf, "expected an integer number, got %s: %s",
+ lex_tok_to_str(token), lf->str);
+ token = T_ERROR;
+ break;
+ }
+ errno = 0;
+ lf->int32_val = (int32_t)strtod(lf->str, NULL);
+ if (errno != 0) {
+ scan_err2(lf, "expected an integer number, got %s: %s",
+ lex_tok_to_str(token), lf->str);
+ token = T_ERROR;
+ } else {
+ token = T_INT32;
+ }
+ break;
+
+ case T_INT64:
+ Dmsg2(400, "int64=:%s: %f\n", lf->str, strtod(lf->str, NULL));
+ if (token != T_NUMBER || !is_a_number(lf->str)) {
+ scan_err2(lf, "expected an integer number, got %s: %s",
+ lex_tok_to_str(token), lf->str);
+ token = T_ERROR;
+ break;
+ }
+ errno = 0;
+ lf->int64_val = (int64_t)strtod(lf->str, NULL);
+ if (errno != 0) {
+ scan_err2(lf, "expected an integer number, got %s: %s",
+ lex_tok_to_str(token), lf->str);
+ token = T_ERROR;
+ } else {
+ token = T_INT64;
+ }
+ break;
+
+ case T_NAME:
+ if (token != T_IDENTIFIER && token != T_UNQUOTED_STRING && token != T_QUOTED_STRING) {
+ scan_err2(lf, "expected a name, got %s: %s",
+ lex_tok_to_str(token), lf->str);
+ token = T_ERROR;
+ } else if (lf->str_len > MAX_RES_NAME_LENGTH) {
+ scan_err3(lf, "name %s length %d too long, max is %d\n", lf->str,
+ lf->str_len, MAX_RES_NAME_LENGTH);
+ token = T_ERROR;
+ } else {
+ token = T_NAME;
+ }
+ break;
+
+ case T_STRING:
+ if (token != T_IDENTIFIER && token != T_UNQUOTED_STRING && token != T_QUOTED_STRING) {
+ scan_err2(lf, "expected a name, got %s: %s",
+ lex_tok_to_str(token), lf->str);
+ token = T_ERROR;
+ } else {
+ token = T_STRING;
+ }
+ break;
+
+
+ default:
+ break; /* no expectation given */
+ }
+ lf->token = token; /* set possible new token */