Esempio n. 1
0
list_t *packages_list_init(void)
{
	list_t *self;

	FILE *dbfile;
	char *line, *name, *version;
	int nread;
	size_t n;

	dbfile = fopen("/var/lib/pkg/db", "r");
	if (!dbfile)
		return NULL;

	self = list_new();
	line = NULL;
	name = NULL;
	version = NULL;
	while ((nread = getline(&line, &n, dbfile)) > 0) {
		*(line + strlen(line) - 1) = 0;
		if (!name)
			name = xstrdup(line);
		else if (!version)
			version = xstrdup(line);
		else if (!strlen(line)) {
			list_append(self, package_new(name, version));
			name = version = NULL;
		}
	}
	free(line);
	fclose(dbfile);
	return self;

}
static void
other_parser_toplevel_start (OtherSAXContext *ctx,
                             const char *name,
                             const char **attrs)
{
    SAXContext *sctx = &ctx->sctx;

    if (!strcmp (name, "package")) {
        g_assert (sctx->current_package == NULL);

        ctx->state = OTHER_PARSER_PACKAGE;

        sctx->current_package = package_new ();
        parse_package (attrs, sctx->current_package);
    }

    else if (sctx->count_fn && !strcmp (name, "otherdata")) {
        int i;
        const char *attr;
        const char *value;

        for (i = 0; attrs && attrs[i]; i++) {
            attr = attrs[i];
            value = attrs[++i];

            if (!strcmp (attr, "packages")) {
                sctx->count_fn (string_to_guint32_with_default (value, 0),
                                sctx->user_data);
                break;
            }
        }
    }
}