static int parse_in_direction(cargo_t ctx, void *user, const char *optname,
                                 	int argc, char **argv)
{
	direction_t *in_dir = (direction_t *)user;
	char *d = NULL;

	if (argc < 1)
	{
		cargo_set_error(ctx, 0,
			"%s requires 1 argument", optname);
		return -1;
	}

	d = argv[0];

	if (!strcasecmp(d, "left"))
	{
		*in_dir = DIR_LEFT;
	}
	else if (!strcasecmp(d, "right"))
	{
		*in_dir = DIR_RIGHT;
	}
	else
	{
		cargo_set_error(ctx, 0,
			"Invalid direction \"%s\", must be \"left\" or \"right\" "
			"for option %s.", d, optname);
		return -1;
	}

	return 1;
}
static int parse_prey_method(cargo_t ctx, void *user, const char *optname,
                             int argc, char **argv)
{
	catcierge_haar_prey_method_t *pm = (catcierge_haar_prey_method_t *)user;
	char *d = NULL;

	if (argc < 1)
	{
		cargo_set_error(ctx, 0,
			"Missing either \"adaptive\" or \"normal\" for %s", optname);
		return -1;
	}

	d = argv[0];

	if (!strcasecmp(d, "adaptive"))
	{
		*pm = PREY_METHOD_ADAPTIVE;
	}
	else if (!strcasecmp(d, "normal"))
	{
		*pm = PREY_METHOD_NORMAL;
	}
	else
	{
		cargo_set_error(ctx, 0,
			"Invalid prey method \"%s\", must be \"adaptive\" "
			"or \"normal\".", d);
		return -1;
	}

	return 1;
}
Пример #3
0
int even_validation_validate_cb(cargo_t ctx,
                      cargo_validation_flags_t flags,
                      const char *opt, cargo_validation_t *vd,
                      void *value)
{
    even_validation_t *ev = NULL;
    int v = *((int *)value);

    // Retrieve our context struct.
    ev = (even_validation_t *)cargo_validator_get_context(vd);

    if (v > ev->max)
    {
        cargo_set_error(ctx, 0, "Value %d of %s cannot be above %d",
                        v,opt, ev->max);
        return -1;
    }

    if ((v % 2) != 0)
    {
        cargo_set_error(ctx, 0, "Value %d of %s must be even", v,
         opt);
        return -1;
    }

    return 0; // Success!
}
Пример #4
0
static int parse_rect_list_cb(cargo_t ctx, void *user,
                                     const char *optname,
                                     int argc, char **argv)
{
    int i;
    assert(ctx);
    assert(user);
    rect_t **u = (rect_t **)user;
    rect_t *rect;

    if (!(*u = calloc(argc, sizeof(rect_t))))
    {
        return -1;
    }

    rect = *u;

    for (i = 0; i < argc; i++)
    {
        if (sscanf(argv[i], "%dx%d", &rect[i].width, &rect[i].height) != 2)
        {
            cargo_set_error(ctx, 0, "Error, expected format 2x2 for %s\n", optname);
            return -1;
        }
    }

    return i; // How many arguments we ate.
}
Пример #5
0
static int parse_command_cb(cargo_t ctx, void *user, char *optname, int argc, char **argv)
{
    cmd_t *cmd = (cmd_t *)user;
    assert(cmd);

    *cmd = (cmd_t)str_to_cmd(argv[0]);

    if (*cmd == INVALID_COMMAND)
    {
        cargo_set_error(ctx, 0, "Invalid command \"%s\"\n", argv[0]);
        return -1;
    }
    return 1;
}
static int parse_width_height(cargo_t ctx, void *user, const char *optname,
                              int argc, char **argv)
{
	catcierge_haar_matcher_args_t *args = (catcierge_haar_matcher_args_t *)user;
	int sret = 0;

	if (argc < 1)
	{
		cargo_set_error(ctx, 0,
			"%s requires 1 argument", optname);
		return -1;
	}

	sret = sscanf(argv[0], "%dx%d", &args->min_width, &args->min_height);

	if ((sret == EOF) || (sret != 2))
	{
		cargo_set_error(ctx, 0,
			"Cannot parse %s value \"%s\" expected format: WxH\n", optname, argv[0]);
		return -1;
	}

	return 1;
}
Пример #7
0
static int parse_rect_cb(cargo_t ctx, void *user, const char *optname,
                         int argc, char **argv)
{
    assert(ctx);
    assert(user);

    // We expect a rect_t structure to be passed to us.
    rect_t *u = (rect_t *)user;
    memset(u, 0, sizeof(rect_t));

    if (argc > 0)
    {
        if (sscanf(argv[0], "%dx%d", &u->width, &u->height) != 2)
        {
            cargo_set_error(ctx, 0, "Error, expected format 2x2 for %s\n", optname);
            return -1;
        }

        return 1; // We ate 1 argument.
    }

    return -1; // Error.
}