summaryrefslogtreecommitdiff
path: root/package/busybox/busybox-1.10.1-completion.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/busybox/busybox-1.10.1-completion.patch')
-rw-r--r--package/busybox/busybox-1.10.1-completion.patch57
1 files changed, 57 insertions, 0 deletions
diff --git a/package/busybox/busybox-1.10.1-completion.patch b/package/busybox/busybox-1.10.1-completion.patch
new file mode 100644
index 000000000..8557f59a0
--- /dev/null
+++ b/package/busybox/busybox-1.10.1-completion.patch
@@ -0,0 +1,57 @@
+--- busybox-1.10.1/libbb/lineedit.c Sat Apr 19 05:50:33 2008
++++ busybox-1.10.1-completion/libbb/lineedit.c Thu Apr 24 06:45:39 2008
+@@ -518,8 +518,8 @@
+
+ for (i = 0; i < npaths; i++) {
+ dir = opendir(paths[i]);
+- if (!dir) /* Don't print an error */
+- continue;
++ if (!dir)
++ continue; /* don't print an error */
+
+ while ((next = readdir(dir)) != NULL) {
+ int len1;
+@@ -529,18 +529,21 @@
+ if (strncmp(str_found, pfind, strlen(pfind)))
+ continue;
+ /* not see .name without .match */
+- if (*str_found == '.' && *pfind == 0) {
++ if (*str_found == '.' && *pfind == '\0') {
+ if (NOT_LONE_CHAR(paths[i], '/') || str_found[1])
+ continue;
+ str_found = ""; /* only "/" */
+ }
+ found = concat_path_file(paths[i], str_found);
+- /* hmm, remover in progress? */
+- if (lstat(found, &st) < 0)
++ /* hmm, remove in progress? */
++ /* NB: stat() first so that we see is it a directory;
++ * but if that fails, use lstat() so that
++ * we still match dangling links */
++ if (stat(found, &st) && lstat(found, &st))
+ goto cont;
+ /* find with dirs? */
+ if (paths[i] != dirbuf)
+- strcpy(found, next->d_name); /* only name */
++ strcpy(found, next->d_name); /* only name */
+
+ len1 = strlen(found);
+ found = xrealloc(found, len1 + 2);
+@@ -548,7 +551,7 @@
+ found[len1+1] = '\0';
+
+ if (S_ISDIR(st.st_mode)) {
+- /* name is directory */
++ /* name is a directory */
+ if (found[len1-1] != '/') {
+ found[len1] = '/';
+ }
+@@ -566,7 +569,7 @@
+ closedir(dir);
+ }
+ if (paths != path1) {
+- free(paths[0]); /* allocated memory only in first member */
++ free(paths[0]); /* allocated memory is only in first member */
+ free(paths);
+ }
+ #undef dirbuf