Exemple #1
0
int check_printf_argument(const char *label, const char*& tail, arg_type_e& arg_type)
{
    const char* p = match_plain_chars(label);

    if (!p)	return 0;

    if (*p)
    {
        const char c = *p;
        if (c == '0' || c == '-' || c == '+' || c == ' ' || c == '#' || c == '\'')
        {
            p ++;
            if (*p == 0) goto error_exit;
        }
    }
    else
        goto error_exit;

    p =	match_integer(p);
    if (*p == 0) goto error_exit;

    if (*p == '.')
    {
        p++;
        if (*p == 0) goto error_exit;
        p = match_integer(p);
        if (*p == 0) goto error_exit;
    }

    if (*p == 'l') {
        p++;
        if (*p == 0) goto error_exit;
    }

    if (*p)
    {
        const char s = *p;
        if (s == 'd' || s == 'i' || s == 'd' || s == 'u' || s == 'x' || s == 'X' || s == 'o') {
            tail = p + 1;
            arg_type = argument_int;
            return 1;
        } else if (s == 'f' || s == 'g' || s == 'e' || s == 'E' || s == 'G') {
            tail = p + 1;
            arg_type = argument_double;
            return 1;
        }
    }

error_exit:
    return (-1);
}
Exemple #2
0
static int
next_token (void)
{
  int result;

  lastpos = p;
  switch (*p)
    {
    case '\0':
      result = END;
      break;
      
    case ':':
    case ',': 
    case '-':
    case ';':
      result = *p;
      p++;
      break;

    case 'b':
    case 'B':
      result = match_word ("big_endian", BIG);
      break;

    case 'l':
    case 'L':
      result = match_word ("little_endian", LITTLE);
      break;

    case 'n':
    case 'N':
      result = match_word ("native", NATIVE);
      break;

    case 's':
    case 'S':
      result = match_word ("swap", SWAP);
      break;

    case '1': case '2': case '3': case '4': case '5':
    case '6': case '7': case '8': case '9':
      result = match_integer ();
      break;

    default:
      result = ILLEGAL;
      break;
    }
  return result;
}