Пример #1
0
static void test_filter(void)
{
    Rlist *list = NULL;
    for (int i = 0; i < 10; i++)
    {
        void *item = xmemdup(&i, sizeof(int));
        RlistAppendAlien(&list, item);
    }

    assert_int_equal(10, RlistLen(list));
    int mod_by = 0;
    RlistFilter(&list, is_even, &mod_by, free);
    assert_int_equal(5, RlistLen(list));

    int i = 0;
    for (Rlist *rp = list; rp; rp = rp->next)
    {
        int *k = rp->item;
        assert_int_equal(i, *k);

        free(k);
        rp->item = NULL;

        i += 2;
    }

    RlistDestroy(list);
}
Пример #2
0
static void AugmentMountInfo(Rlist **list, char *host, char *source, char *mounton, char *options)
{
    Mount *entry = xcalloc(1, sizeof(Mount));

    if (host)
    {
        entry->host = xstrdup(host);
    }

    if (source)
    {
        entry->source = xstrdup(source);
    }

    if (mounton)
    {
        entry->mounton = xstrdup(mounton);
    }

    if (options)
    {
        entry->options = xstrdup(options);
    }

    RlistAppendAlien(list, (void *) entry);
}
Пример #3
0
static void PopulateAvailable(const char *arg)
{
    Package *p = DeserializePackage(arg);
    PackagePattern *pattern = MatchSame(p);

    if (FindPackages(AVAILABLE_PACKAGES_FILE_NAME, pattern) != NULL)
    {
        fprintf(stderr, "Skipping already available package %s\n", SerializePackage(p));
        return;
    }

    Rlist *available_packages = ReadPackageEntries(AVAILABLE_PACKAGES_FILE_NAME);

    RlistAppendAlien(&available_packages, p);
    SavePackages(AVAILABLE_PACKAGES_FILE_NAME, available_packages);
}
Пример #4
0
static void test_filter_everything(void)
{
    Rlist *list = NULL;
    for (int i = 1; i < 10; i += 2)
    {
        void *item = xmemdup(&i, sizeof(int));
        RlistAppendAlien(&list, item);
    }

    assert_int_equal(5, RlistLen(list));
    int mod_by = 0;
    RlistFilter(&list, is_even, &mod_by, free);
    assert_int_equal(0, RlistLen(list));

    assert_true(list == NULL);
}
Пример #5
0
static Rlist *FindPackages(const char *database_filename, PackagePattern *pattern)
{
    Rlist *db = ReadPackageEntries(database_filename);
    Rlist *matching = NULL;

    Rlist *rp = NULL;

    for (rp = db; rp != NULL; rp = rp->next)
    {
        Package *package = (Package *) rp->item;

        if (MatchPackage(pattern, package))
        {
            RlistAppendAlien(&matching, package);
        }
    }

    return matching;
}
Пример #6
0
static Rlist *ReadPackageEntries(const char *database_filename)
{
    FILE *packages_file = fopen(database_filename, "r");
    Rlist *packages = NULL;

    if (packages_file != NULL)
    {
        char serialized_package[MAX_PACKAGE_ENTRY_LENGTH];

        while (fscanf(packages_file, "%s\n", serialized_package) != EOF)
        {
            Package *package = DeserializePackage(serialized_package);

            RlistAppendAlien(&packages, package);
        }

        fclose(packages_file);
    }

    return packages;
}
Пример #7
0
static void AddPackage(PackagePattern *pattern)
{
    fprintf(stderr, "Trying to install all packages matching pattern %s\n", SerializePackagePattern(pattern));

    Rlist *matching_available = FindPackages(AVAILABLE_PACKAGES_FILE_NAME, pattern);

    if (matching_available == NULL)
    {
        fprintf(stderr, "Unable to find any package matching %s\n", SerializePackagePattern(pattern));
        exit(1);
    }

    Rlist *rp;

    for (rp = matching_available; rp; rp = rp->next)
    {
        Package *p = (Package *) rp->item;

        PackagePattern *pat = MatchAllVersions((Package *) rp->item);

        if (FindPackages(INSTALLED_PACKAGES_FILE_NAME, pat) != NULL)
        {
            fprintf(stderr, "Package %s is already installed.\n", SerializePackage(p));
            exit(1);
        }
    }

    Rlist *installed_packages = ReadPackageEntries(INSTALLED_PACKAGES_FILE_NAME);

    for (rp = matching_available; rp; rp = rp->next)
    {
        Package *p = (Package *) rp->item;

        RlistAppendAlien(&installed_packages, p);
        fprintf(stderr, "Succesfully installed package %s\n", SerializePackage(p));
    }

    SavePackages(INSTALLED_PACKAGES_FILE_NAME, installed_packages);
    exit(0);
}