#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern int pkg_match(const char *, const char *);
extern void *xrealloc(void *, size_t);
extern void *xmalloc(size_t);
int
main(int argc, char *argv[])
{
FILE *dfd, *pfd;
char *dep, *pkg;
char **deps, **pkgs;
int d, p;
size_t dlen, dsize, plen, psize;
dsize = psize = 32768;
if (argc != 3) {
fprintf(stderr, "usage: test-pkgmatch <pkgdeps.txt> <pkgnames.txt>");
exit(1);
}
dfd = fopen(argv[1], "r");
pfd = fopen(argv[2], "r");
if (dfd == NULL || pfd == NULL)
exit(1);
d = 0;
deps = xmalloc(dsize * sizeof(char *));
while ((dep = fgetln(dfd, &dlen)) != NULL) {
if (dep[dlen - 1] == '\n')
dep[dlen - 1] = '\0';
deps[d++] = strdup(dep);
if (d == dsize) {
dsize *= 2;
deps = xrealloc(deps, dsize * sizeof(char *));
}
}
deps[d] = NULL;
p = 0;
pkgs = xmalloc(psize * sizeof(char *));
while ((pkg = fgetln(pfd, &plen)) != NULL) {
if (pkg[plen - 1] == '\n')
pkg[plen - 1] = '\0';
pkgs[p++] = strdup(pkg);
if (p == psize) {
psize *= 2;
pkgs = xrealloc(pkgs, psize * sizeof(char *));
}
}
pkgs[p] = NULL;
fclose(dfd);
fclose(pfd);
d = 0;
while (deps[d] != NULL) {
p = 0;
while (pkgs[p] != NULL) {
if (pkg_match(deps[d], pkgs[p])) {
printf("%s %s\n", deps[d], pkgs[p]);
}
p++;
}
d++;
}
}