Exemple #1
0
IAnjutaDebuggerWatch*
gdb_watch_parse (const GDBMIValue *mi_results)
{
	IAnjutaDebuggerWatch *watch;
	const GDBMIValue *value = NULL;
	
	if (mi_results) value = gdbmi_value_hash_lookup (mi_results, "value");
	if ((mi_results == NULL) || (value == NULL))
	{
		watch = g_new0 (IAnjutaDebuggerWatch, 1);
		watch->value = "?";
	}
	else
	{
		gchar *pos;
		gchar *full_output;
		
		/* Concat the answers of gdb */
		full_output = (char *)gdbmi_value_literal_get (value);
		
		pos = full_output;
		
		watch = g_new0 (IAnjutaDebuggerWatch, 1);
		
		parse_parent (watch, &pos);
	}

	return watch;
}
int main(int argc, char *argv[])
{
	struct nl_cache *link_cache;
	int dev = 0;

	params.dp_fd = stdout;
	sock = nlt_alloc_socket();
	nlt_connect(sock, NETLINK_ROUTE);
	link_cache = nlt_alloc_link_cache(sock);
	cls = nlt_alloc_cls();

	for (;;) {
		int c, optidx = 0;
		enum {
			ARG_PROTO = 257,
			ARG_PRIO = 258,
			ARG_ID,
		};
		static struct option long_opts[] = {
			{ "format", 1, 0, 'f' },
			{ "help", 0, 0, 'h' },
			{ "version", 0, 0, 'v' },
			{ "dev", 1, 0, 'd' },
			{ "parent", 1, 0, 'p' },
			{ "proto", 1, 0, ARG_PROTO },
			{ "prio", 1, 0, ARG_PRIO },
			{ "id", 1, 0, ARG_ID },
			{ 0, 0, 0, 0 }
		};
	
		c = getopt_long(argc, argv, "+f:qhva:d:", long_opts, &optidx);
		if (c == -1)
			break;

		switch (c) {
		case '?': exit(NLE_INVAL);
		case 'f': params.dp_type = nlt_parse_dumptype(optarg); break;
		case 'h': print_usage(); break;
		case 'v': nlt_print_version(); break;
		case 'd': dev = 1; parse_dev(cls, link_cache, optarg); break;
		case 'p': parse_parent(cls, optarg); break;
		case ARG_PRIO: parse_prio(cls, optarg); break;
		case ARG_ID: parse_handle(cls, optarg); break;
		case ARG_PROTO: parse_proto(cls, optarg); break;
		}
 	}

	if (!dev)
		nl_cache_foreach(link_cache, print_cls, NULL);
	else
		print_cls(NULL, NULL);

	return 0;
}
int main(int argc, char *argv[])
{
	struct nl_sock *sock;
	struct rtnl_cls *cls;
	struct nl_cache *link_cache;
	struct rtnl_cls_ops *ops;
	struct cls_module *mod;
	struct nl_dump_params dp = {
		.dp_type = NL_DUMP_DETAILS,
		.dp_fd = stdout,
	};
	char *kind;
	int err, nlflags = NLM_F_CREATE;
 
	sock = nlt_alloc_socket();
	nlt_connect(sock, NETLINK_ROUTE);
	link_cache = nlt_alloc_link_cache(sock);
	cls = nlt_alloc_cls();

	for (;;) {
		int c, optidx = 0;
		enum {
			ARG_PROTO = 257,
			ARG_PRIO = 258,
			ARG_ID,
		};
		static struct option long_opts[] = {
			{ "quiet", 0, 0, 'q' },
			{ "help", 0, 0, 'h' },
			{ "version", 0, 0, 'v' },
			{ "dev", 1, 0, 'd' },
			{ "parent", 1, 0, 'p' },
			{ "proto", 1, 0, ARG_PROTO },
			{ "prio", 1, 0, ARG_PRIO },
			{ "id", 1, 0, ARG_ID },
			{ 0, 0, 0, 0 }
		};
	
		c = getopt_long(argc, argv, "+qhva:d:", long_opts, &optidx);
		if (c == -1)
			break;

		switch (c) {
		case '?': exit(NLE_INVAL);
		case 'q': quiet = 1; break;
		case 'h': print_usage(); break;
		case 'v': nlt_print_version(); break;
		case 'd': parse_dev(cls, link_cache, optarg); break;
		case 'p': parse_parent(cls, optarg); break;
		case ARG_PRIO: parse_prio(cls, optarg); break;
		case ARG_ID: parse_handle(cls, optarg); break;
		case ARG_PROTO: parse_proto(cls, optarg); break;
		}
 	}

	if (optind >= argc) {
		print_usage();
		fatal(EINVAL, "Missing classifier type");
	}

	kind = argv[optind++];
	if ((err = rtnl_cls_set_kind(cls, kind)) < 0)
		fatal(ENOENT, "Unknown classifier type \"%s\".", kind);
	
	ops = rtnl_cls_get_ops(cls);
	if (!(mod = lookup_cls_mod(ops)))
		fatal(ENOTSUP, "Classifier type \"%s\" not supported.", kind);

	mod->parse_argv(cls, argc, argv);

	printf("Adding ");
	nl_object_dump(OBJ_CAST(cls), &dp);

	if ((err = rtnl_cls_add(sock, cls, nlflags)) < 0)
		fatal(err, "Unable to add classifier: %s", nl_geterror(err));

	if (!quiet) {
		printf("Added ");
		nl_object_dump(OBJ_CAST(cls), &dp);
 	}

	return 0;
}
Exemple #4
0
static void
parse_parent (IAnjutaDebuggerWatch* parent, gchar **buf)
{
	IAnjutaDebuggerDataType type;
	IAnjutaDebuggerWatch* child;
	guint idx;
	gchar *pos;
	guint i;

	if (*buf == NULL)
		return;

	type = get_type (buf);
	if (type == IANJUTA_DEBUGGER_NAME_TYPE)
	{
		parent->name = get_name (buf);
		type = get_type (buf);
	}
	
	parent->type = type;
		
	switch (parent->type)
	{
    case IANJUTA_DEBUGGER_ROOT_TYPE:
    case IANJUTA_DEBUGGER_UNKNOWN_TYPE:
    case IANJUTA_DEBUGGER_NAME_TYPE:
		break;
    case IANJUTA_DEBUGGER_POINTER_TYPE:
    case IANJUTA_DEBUGGER_VALUE_TYPE:
    case IANJUTA_DEBUGGER_REFERENCE_TYPE:
		parent->value = get_value (buf);
	    break;
    case IANJUTA_DEBUGGER_ARRAY_TYPE:
	    child = NULL;
	    idx = 0;

	    while (**buf)
		{
			*buf = skip_next_token (*buf);
			
			if (**buf == '\0')
				return;
			if (**buf == '}')
			{
				*buf = *buf + 1;
				return;
			}

			if (child == NULL)
			{
				parent->children = g_new0 (IAnjutaDebuggerWatch, 1);
				child = parent->children;
			}
			else
			{
				child->sibling = g_new0 (IAnjutaDebuggerWatch, 1);
				child = child->sibling;
			}
			child->index = idx;
			parse_parent (child, buf);
		
			if (child->value)
			{	
				pos = strstr (child->value, " <repeats");
				if (pos)
				{
					if ((i = atoi (pos + 10)))
						idx += (i - 1);
				}
			}
			idx++;
		}
			
	   break;
    case IANJUTA_DEBUGGER_STRUCT_TYPE:
	    child = NULL;

	    while (**buf)
		{
			*buf = skip_next_token (*buf);
			
			if (**buf == '\0')
				return;
			if (**buf == '}')
			{
				*buf = *buf + 1;
				return;
			}

			if (child == NULL)
			{
				parent->children = g_new0 (IAnjutaDebuggerWatch, 1);
				child = parent->children;
			}
			else
			{
				child->sibling = g_new0 (IAnjutaDebuggerWatch, 1);
				child = child->sibling;
			}
			
			parse_parent (child, buf);
		}
		return;
	}
	
}