Ejemplo n.º 1
0
static gchar *
xmms_magic_match (xmms_magic_checker_t *c, const gchar *uri)
{
	const GList *l;
	gchar *u, *dump;
	int i;

	g_return_val_if_fail (c, NULL);

	/* only one of the contained sets has to match */
	for (l = magic_list; l; l = g_list_next (l)) {
		GNode *tree = l->data;

		if (tree_match (c, tree)) {
			gpointer *data = tree->data;
			XMMS_DBG ("magic plugin detected '%s' (%s)",
			          (char *)data[1], (char *)data[0]);
			return (char *) (data[1]);
		}
	}

	if (!uri)
		return NULL;

	u = g_ascii_strdown (uri, -1);
	for (l = ext_list; l; l = g_list_next (l)) {
		xmms_magic_ext_data_t *e = l->data;
		if (g_pattern_match_simple (e->pattern, u)) {
			XMMS_DBG ("magic plugin detected '%s' (by extension '%s')", e->type, e->pattern);
			g_free (u);
			return e->type;
		}
	}
	g_free (u);

	if (c->dumpcount > 0) {
		dump = g_malloc ((MIN (c->read, c->dumpcount) * 3) + 1);
		u = dump;

		XMMS_DBG ("Magic didn't match anything...");
		for (i = 0; i < c->dumpcount && i < c->read; i++) {
			g_sprintf (u, "%02X ", (unsigned char)c->buf[i]);
			u += 3;
		}
		XMMS_DBG ("%s", dump);

		g_free (dump);
	}

	return NULL;
}
Ejemplo n.º 2
0
static gboolean
tree_match (xmms_magic_checker_t *c, GNode *tree)
{
	GNode *n;

	/* empty subtrees match anything */
	if (!tree->children) {
		return TRUE;
	}

	for (n = tree->children; n; n = n->next) {
		if (node_match (c, n) && tree_match (c, n)) {
			return TRUE;
		}
	}

	return FALSE;
}
Ejemplo n.º 3
0
static gchar *
xmms_magic_match (xmms_magic_checker_t *c, const gchar *uri)
{
    const GList *l;
    gchar *u;

    g_return_val_if_fail (c, NULL);

    /* only one of the contained sets has to match */
    for (l = magic_list; l; l = g_list_next (l)) {
        GNode *tree = l->data;

        if (tree_match (c, tree)) {
            gpointer *data = tree->data;
            XMMS_DBG ("magic plugin detected '%s' (%s)",
                      (char *)data[1], (char *)data[0]);
            return (char *) (data[1]);
        }
    }

    if (!uri)
        return NULL;

    u = g_ascii_strdown (uri, -1);
    for (l = ext_list; l; l = g_list_next (l)) {
        xmms_magic_ext_data_t *e = l->data;
        if (g_pattern_match_simple (e->pattern, u)) {
            XMMS_DBG ("magic plugin detected '%s' (by extension '%s')", e->type, e->pattern);
            g_free (u);
            return e->type;
        }
    }
    g_free (u);

    return NULL;
}