From: Stephan Kulow Date: Fri, 19 Oct 2007 21:01:30 +0000 (+0000) Subject: don't crash too often X-Git-Tag: BASE-SuSE-Code-12_1-Branch~308^2~911 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e8413da01b81f40d873f44571a1697e6e0920cfa;p=thirdparty%2Flibsolv.git don't crash too often --- diff --git a/tools/source_helix.c b/tools/source_helix.c index 51830467..b879c739 100644 --- a/tools/source_helix.c +++ b/tools/source_helix.c @@ -594,6 +594,17 @@ static const char* findKernelFlavor(Parsedata *pd) return 0; } +static int +countDeps( Id *idarray) +{ + Id id; + int count = 0; + + while ((id = *idarray++) != ID_NULL) + count++; + return count; +} + /* * XML callback * @@ -649,7 +660,8 @@ endElement(void *userData, const char *name) Id pid, *pidp; /* this is either a kernel package or a kmp */ - fprintf(stderr, "flavor %s\n", flavor); + int c = countDeps(pd->source->idarraydata + pd->deps[pd->pack].provides); + source_reserve_ids(pd->source, 0, c); for (pidp = pd->source->idarraydata + pd->deps[pd->pack].provides; pidp && (pid = *pidp++) != 0; ) { @@ -666,6 +678,8 @@ endElement(void *userData, const char *name) depname = id2str(pool, pid); } + Id newid = pid; + if (!strncmp(depname, "kernel(", strlen("kernel(")) && !strchr(depname, ':')) { char newdep[100]; @@ -673,52 +687,55 @@ endElement(void *userData, const char *name) strncat(newdep, cflavor, sizeof(newdep)); strncat(newdep, ":", sizeof(newdep)); strncat(newdep, depname + strlen("kernel("), 100); - // fprintf(stderr, "dep %s %s\n", depname, newdep); - Id newid = str2id(pool, newdep, 1); + newid = str2id(pool, newdep, 1); if (prd) newid = rel2id(pool, newid, prd->evr, prd->flags, 1); - npr = source_addid_dep(pd->source, npr, newid, 0); } + + npr = source_addid_dep(pd->source, npr, newid, 0); } pd->deps[pd->pack].provides = npr; +#if 1 npr = 0; - fprintf(stderr, "dd %d\n", pd->deps[pd->pack].requires); - for (pidp = pd->source->idarraydata + pd->deps[pd->pack].requires; pidp && (pid = *pidp++) != 0; ) + if (pd->deps[pd->pack].requires) { - const char *depname = 0; - Reldep *prd = 0; + c = countDeps(pd->source->idarraydata + pd->deps[pd->pack].requires); + source_reserve_ids(pd->source, 0, c); - if (ISRELDEP(pid)) - { - prd = GETRELDEP(pool, pid); - depname = id2str(pool, prd->name); - } - else + for (pidp = pd->source->idarraydata + pd->deps[pd->pack].requires; pidp && (pid = *pidp++) != 0; ) { - depname = id2str(pool, pid); - } - - if (!strncmp(depname, "kernel(", strlen("kernel(")) && !strchr(depname, ':')) - { - char newdep[100]; - strcpy(newdep, "kernel("); - strncat(newdep, cflavor, sizeof(newdep)); - strncat(newdep, ":", sizeof(newdep)); - strncat(newdep, depname + strlen("kernel("), 100); - fprintf(stderr, "dep %s %s\n", depname, newdep); - source_reserve_ids(pd->source, 0, 1); - Id newid = str2id(pool, newdep, 1); - if (prd) - newid = rel2id(pool, newid, prd->evr, prd->flags, 1); + const char *depname = 0; + Reldep *prd = 0; + + if (ISRELDEP(pid)) + { + prd = GETRELDEP(pool, pid); + depname = id2str(pool, prd->name); + } + else + { + depname = id2str(pool, pid); + } + + Id newid = pid; + + if (!strncmp(depname, "kernel(", strlen("kernel(")) && !strchr(depname, ':')) + { + char newdep[100]; + strcpy(newdep, "kernel("); + strncat(newdep, cflavor, sizeof(newdep)); + strncat(newdep, ":", sizeof(newdep)); + strncat(newdep, depname + strlen("kernel("), 100); + newid = str2id(pool, newdep, 1); + if (prd) + newid = rel2id(pool, newid, prd->evr, prd->flags, 1); + } npr = source_addid_dep(pd->source, npr, newid, 0); } - else - { - npr = source_addid_dep(pd->source, npr, pid, 0); - } - pd->deps[pd->pack].requires = npr; } + pd->deps[pd->pack].requires = npr; +#endif free(cflavor); }