X-Git-Url: https://git.wh0rd.org/?p=patches.git;a=blobdiff_plain;f=qdepends.patch;fp=qdepends.patch;h=eeb0c689a7984d8694548ced8a2b8ebf0893d3b3;hp=0000000000000000000000000000000000000000;hb=b53d1f41b32c8078c755a63c7bf0d2852263ee99;hpb=6d7b707a99652eefa9b245d8f1e0053f3583c79c diff --git a/qdepends.patch b/qdepends.patch new file mode 100644 index 0000000..eeb0c68 --- /dev/null +++ b/qdepends.patch @@ -0,0 +1,86 @@ +Index: qdepends.c +=================================================================== +RCS file: /var/cvsroot/gentoo-projects/portage-utils/qdepends.c,v +retrieving revision 1.38 +diff -u -p -r1.38 qdepends.c +--- qdepends.c 5 Jun 2006 11:43:30 -0000 1.38 ++++ qdepends.c 9 Oct 2006 21:14:34 -0000 +@@ -336,6 +336,12 @@ char *dep_flatten_tree(dep_node *root) + static char flat[8192]; + size_t pos = 0; + _dep_flatten_tree(root, flat, &pos); ++ if (pos == 0) { ++ /* all the nodes were squashed ... for example: ++ * USE=-selinux RDEPEND="selinux? ( sys-libs/libselinux )" ++ */ ++ return NULL; ++ } + flat[pos-1] = '\0'; + return flat; + } +@@ -383,6 +389,7 @@ int qdepends_main_vdb(const char *depend + if (i == argc) + continue; + ++ IF_DEBUG(warn("matched %s/%s", dentry->d_name, de->d_name)); + snprintf(buf, sizeof(buf), "%s%s/%s/%s/%s", portroot, portvdb, + dentry->d_name, de->d_name, depend_file); + +@@ -396,6 +403,7 @@ int qdepends_main_vdb(const char *depend + continue; + } + ++ IF_DEBUG(warn("growing tree...")); + dep_tree = dep_grow_tree(depend); + if (dep_tree == NULL) continue; + IF_DEBUG(puts(depend)); +@@ -431,7 +439,8 @@ int qdepends_main_vdb(const char *depend + } + + /*dep_dump_tree(dep_tree);*/ +- printf("%s\n", dep_flatten_tree(dep_tree)); ++ ptr = dep_flatten_tree(dep_tree); ++ printf("%s\n", (ptr == NULL ? "" : ptr)); + + dep_burn_tree(dep_tree); + } +@@ -470,16 +479,20 @@ int qdepends_vdb_deep(const char *depend + if (*de->d_name == '.') + continue; + ++ IF_DEBUG(warn("matched %s/%s", dentry->d_name, de->d_name)); + snprintf(buf, sizeof(buf), "%s%s/%s/%s/%s", portroot, portvdb, + dentry->d_name, de->d_name, depend_file); ++ + if (!eat_file(buf, depend, sizeof(depend))) { + warn("i'm such a fatty, could not eat_file(%s)", buf); + continue; + } +- IF_DEBUG(puts(depend)); + ++ IF_DEBUG(warn("growing tree...")); + dep_tree = dep_grow_tree(depend); + if (dep_tree == NULL) continue; ++ IF_DEBUG(puts(depend)); ++ IF_DEBUG(dep_dump_tree(dep_tree)); + + snprintf(buf, sizeof(buf), "%s%s/%s/%s/USE", portroot, portvdb, + dentry->d_name, de->d_name); +@@ -497,7 +510,7 @@ int qdepends_vdb_deep(const char *depend + dep_prune_use(dep_tree, use); + + ptr = dep_flatten_tree(dep_tree); +- if (rematch(query, ptr, REG_EXTENDED) == 0) { ++ if (ptr && rematch(query, ptr, REG_EXTENDED) == 0) { + if (qdep_name_only) { + depend_atom *atom = NULL; + snprintf(buf, sizeof(buf), "%s/%s", dentry->d_name, de->d_name); +@@ -509,7 +522,7 @@ int qdepends_vdb_deep(const char *depend + printf("%s%s/%s%s%s%c", BOLD, dentry->d_name, BLUE, de->d_name, NORM, verbose ? ':' : '\n'); + } + if (verbose) +- printf(" %s\n", dep_flatten_tree(dep_tree)); ++ printf(" %s\n", ptr); + } + dep_burn_tree(dep_tree); + }