1 diff -durN rpm-4.3.orig/build/rpmfc.c rpm-4.3/build/rpmfc.c
2 --- rpm-4.3.orig/build/rpmfc.c 2004-01-04 13:53:29.000000000 +0100
3 +++ rpm-4.3/build/rpmfc.c 2004-01-04 13:54:54.860259000 +0100
5 #define _RPMDS_INTERNAL
13 @@ -1058,6 +1060,97 @@
17 +int rpmfcFindRequiredPackages(rpmfc fc)
26 + unsigned char deptype;
36 + rpmdbMatchIterator it;
39 + ts = rpmtsCreate(); /* XXX ts created in main() should be used */
41 + rpmMessage(RPMMESS_NORMAL, "Searching for required packages....\n");
43 + nddict = argvCount(fc->ddict);
45 + for (i = 0; i < nddict; i++) {
48 + /* Parse out (file#,deptype,N,EVR,Flags) */
49 + ix = strtol(s, &se, 10);
54 + while (*se && *se != ' ')
58 + while (*se && *se != ' ')
61 + Flags = strtol(se, NULL, 16);
63 + if (deptype!='R') continue;
65 + rpmMessage(RPMMESS_DEBUG, "#%i requires: %s,%s,%i\n",ix,N,EVR,Flags);
66 + if (EVR && EVR[0]) {
67 + rpmMessage(RPMMESS_DEBUG, "skipping #%i require\n");
71 + rpmMessage(RPMMESS_DEBUG, "skipping #%i require (is file requirement)\n");
74 + it=rpmtsInitIterator(ts, RPMTAG_PROVIDENAME, N, 0);
76 + rpmMessage(RPMMESS_DEBUG, "%s -> not found\n",N);
79 + rpmMessage(RPMMESS_NORMAL, "Iterator: %p\n",it);
80 + if (rpmdbGetIteratorCount(it)>1) {
81 + rpmMessage(RPMMESS_DEBUG, "%s -> multiple (skipping)\n",N);
82 + rpmdbFreeIterator(it);
85 + hdr=rpmdbNextIterator(it);
87 + r=rpmHeaderGetEntry(hdr,RPMTAG_NAME,NULL,(void **)&hname, NULL);
89 + if (!strcmp(hname,N)) {
90 + rpmMessage(RPMMESS_DEBUG, "%s -> %s (skipping)\n",N,hname);
91 + rpmdbFreeIterator(it);
95 + rpmMessage(RPMMESS_DEBUG, "%s -> %s\n",N,hname);
97 + ds = rpmdsSingle(RPMTAG_REQUIRENAME, hname, "", RPMSENSE_FIND_REQUIRES);
98 + xx = rpmdsMerge(&fc->requires, ds);
101 + rpmdbFreeIterator(it);
104 + ts = rpmtsFree(ts);
108 int rpmfcApply(rpmfc fc)
111 @@ -1086,6 +1179,8 @@
115 + rpmfcFindRequiredPackages(fc);
118 /* Generate per-file indices into package dependencies. */
119 nddict = argvCount(fc->ddict);