Example #1
0
void fix_mixer_dependencies(unsigned mixer_count)
{
    unsigned dependencies[NUM_SOURCES];
    unsigned placed[NUM_SOURCES];
    unsigned pos = 0;
    unsigned last_count = 0;
    unsigned i;
    struct Mixer mixers[NUM_MIXERS];
    memset(mixers, 0, sizeof(mixers));
    for (i = 0; i < NUM_MIXERS; i++) {
        mixers[i].src = 0;
    }
    memset(placed, 0, sizeof(placed));
    while(mixer_count || last_count != mixer_count) {
        last_count = mixer_count;
        for (i = 0; i < NUM_SOURCES; i++) {
            if (placed[i])
                continue;
            if (! find_dependencies(i, dependencies)) {
                placed[i] = 1;
                continue;
            }
            unsigned ok = 1;
            unsigned j;
            // determine if all dependencies have been placed
            for (j = 0; j < NUM_SOURCES; j++) {
                if (dependencies[i] && ! placed[i]) {
                    ok = 0;
                    break;
                }
            }
            if (ok) {
                unsigned num = MIXER_GetMixers(i, &mixers[pos], NUM_MIXERS);
                pos += num;
                mixer_count -= num;
                placed[i] = 1;
            }
        }
    }
    //mixer_count s gauranteed to be 0 when we get here
    //if (mixer_count) {
    //    printf("Could not place all mixers!\n");
    //    return;
    //}
    for (i = 0; i < NUM_MIXERS; i++)
        Model.mixers[i] = mixers[i];
}
struct pkglist *get_dependencies(char *name)
{
	struct pkglist *p = NULL;
	char *repo, *version;
	int i = -10;

	if (pkglist_exists(name, ilenia_ports) == 0) {
		repo = pkglist_get_newer_favorite(name, REGULAR);
		version = pkglist_get_from_repo(name, repo, ilenia_ports);
		p = pkglist_add_reversed(name, version, repo, NULL, p);
		while (i != pkglist_len(p)) {
			i = pkglist_len(p);
			p = find_dependencies(p);
		}
	} else {
		p = pkglist_add(name, "", "not found", NULL, p);
	}
	return (p);
}