static int reportsolutioncb(Solver *solv, void *cbdata) { struct reportsolutiondata *sd = cbdata; char *res; sd->count++; res = testcase_solverresult(solv, TESTCASE_RESULT_TRANSACTION); if (*res) { char prefix[64]; char *p2, *p = res; sprintf(prefix, "callback%d:", sd->count); while ((p2 = strchr(p, '\n')) != 0) { char c = p2[1]; p2[1] = 0; sd->result = solv_dupappend(sd->result, prefix, p); p2[1] = c; p = p2 + 1; } } solv_free(res); return 0; }
static void XMLCALL endElement(void *userData, const char *name) { struct parsedata *pd = userData; Pool *pool = pd->pool; Solvable *s = pd->solvable; Id id; #if 0 fprintf(stderr, "end: [%d]%s\n", pd->state, name); #endif if (pd->depth != pd->statedepth) { pd->depth--; #if 0 fprintf(stderr, "back from unknown %d %d %d\n", pd->state, pd->depth, pd->statedepth); #endif return; } pd->depth--; pd->statedepth--; switch (pd->state) { case STATE_APPLICATION: if (!s->arch) s->arch = ARCH_NOARCH; if (!s->evr) s->evr = ID_EMPTY; if (s->name && s->arch != ARCH_SRC && s->arch != ARCH_NOSRC) s->provides = repo_addid_dep(pd->repo, s->provides, pool_rel2id(pd->pool, s->name, s->evr, REL_EQ, 1), 0); pd->solvable = 0; break; case STATE_ID: if (pd->lcontent > 8 && !strcmp(".desktop", pd->content + pd->lcontent - 8)) pd->content[pd->lcontent - 8] = 0; id = pool_str2id(pd->pool, pool_tmpjoin(pool, "appdata(", pd->content, ")"), 1); s->requires = repo_addid_dep(pd->repo, s->requires, id, 0); id = pool_str2id(pd->pool, pool_tmpjoin(pool, "application-appdata(", pd->content, ")"), 1); s->provides = repo_addid_dep(pd->repo, s->provides, id, 0); break; case STATE_NAME: s->name = pool_str2id(pd->pool, pool_tmpjoin(pool, "application:", pd->content, 0), 1); break; case STATE_LICENCE: repodata_add_poolstr_array(pd->data, pd->handle, SOLVABLE_LICENSE, pd->content); break; case STATE_SUMMARY: repodata_set_str(pd->data, pd->handle, SOLVABLE_SUMMARY, pd->content); break; case STATE_URL: repodata_set_str(pd->data, pd->handle, SOLVABLE_URL, pd->content); break; case STATE_GROUP: repodata_add_poolstr_array(pd->data, pd->handle, SOLVABLE_GROUP, pd->content); break; case STATE_DESCRIPTION: if (pd->description) { /* strip trailing newlines */ int l = strlen(pd->description); while (l && pd->description[l - 1] == '\n') pd->description[--l] = 0; repodata_set_str(pd->data, pd->handle, SOLVABLE_DESCRIPTION, pd->description); } break; case STATE_P: wsstrip(pd); pd->description = solv_dupappend(pd->description, pd->content, "\n\n"); break; case STATE_UL_LI: wsstrip(pd); indent(pd, 4); pd->content[2] = '-'; pd->description = solv_dupappend(pd->description, pd->content, "\n"); break; case STATE_OL_LI: wsstrip(pd); indent(pd, 4); if (++pd->licnt >= 10) pd->content[0] = '0' + (pd->licnt / 10) % 10; pd->content[1] = '0' + pd->licnt % 10; pd->content[2] = '.'; pd->description = solv_dupappend(pd->description, pd->content, "\n"); break; case STATE_UL: case STATE_OL: pd->description = solv_dupappend(pd->description, "\n", 0); break; default: break; } pd->state = pd->sbtab[pd->state]; pd->docontent = 0; #if 0 fprintf(stderr, "end: [%s] -> %d\n", name, pd->state); #endif }