Skip to contentSkip to conversation

env: fix env var autocompletion

U-Boot New Kim Phillips 4 participants 6 messages Apr 5, 2011 – Apr 27, 2011 Library code

lore
Share & tools
lore
#0 lore raw

commit 560d424b6d7cd4205b062ad95f1b104bd4f8bcc3 "env: re-add support for auto-completion" fell short of its description - the 'used' logic in hmatch_r was reversed - 'used' is 0 if the hash table entry is not used, or -1 if deleted. This patch makes hmatch_r actually match on valid ('used') entries, instead of skipping them and failing to match anything.

typing 'printenv tft' and hitting 'tab' now displays valid choices for variable names.

Cc Mike Frysinger <[email protected]>
---
 lib/hashtable.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
lib/hashtable.c +1 -1
index fcdb53c..92eaa38 100644
@@ -209,7 +209,7 @@ int hmatch_r(const char *match, int last_idx, ENTRY ** retval,
 	size_t key_len = strlen(match);
 
 	for (idx = last_idx + 1; idx < htab->size; ++idx) {
-		if (htab->table[idx].used > 0)
+		if (htab->table[idx].used <= 0)
 			continue;
 		if (!strncmp(match, htab->table[idx].entry.key, key_len)) {
 			*retval = &htab->table[idx].entry;
Signature · 1 line
1.7.4.2.dirty
#1 lore raw
Quoted 6 lines · On Monday, April 04, 2011 21:17:45 Kim Phillips wrote:

commit 560d424b6d7cd4205b062ad95f1b104bd4f8bcc3 "env: re-add support for auto-completion" fell short of its description - the 'used' logic in hmatch_r was reversed - 'used' is 0 if the hash table entry is not used, or -1 if deleted. This patch makes hmatch_r actually match on valid ('used') entries, instead of skipping them and failing to match anything.

i dont think my commit is wrong. i think the bug you describe was actually added in c81c1222427f268d29ba999c82e2477c428e7bab.
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20110404/ba3e4062/attachment.pgp

#2 lore raw
Quoted 9 lines · On Monday, April 04, 2011 21:17:45 Kim Phillips wrote:
Quoted 6 lines

commit 560d424b6d7cd4205b062ad95f1b104bd4f8bcc3 "env: re-add support for auto-completion" fell short of its description - the 'used' logic in hmatch_r was reversed - 'used' is 0 if the hash table entry is not used, or -1 if deleted. This patch makes hmatch_r actually match on valid ('used') entries, instead of skipping them and failing to match anything.

i dont think my commit is wrong. i think the bug you describe was actually added in c81c1222427f268d29ba999c82e2477c428e7bab.

You're right; I accidentally inverted the condition in my patch; it orignally was:

    if (!htab->table[idx].used)
        continue;

Since a deleted entry is now -1 (and an unused entry is zero), the condition should have been:

    if (htab->table[idx].used <= 0)
        continue;

not:

    if (htab->table[idx].used > 0)
        continue;
Quoted 1 line

-mike

Signature · 2 lines
Peter Barada
peter.barada at logicpd.com
#3 lore raw

PATCH v2 1/1 lib/hashtable: fix env var autocompletion

commit c81c1222427f268d29ba999c82e2477c428e7bab "Fix hash table deletion to prevent lost entries" broke environment variable autocompletion by accidentally inverting the condition for 'used' in hmatch_r().

'used' is 0 if the hash table entry is not used, or -1 if deleted. This patch makes hmatch_r actually match on valid ('used') entries, instead of skipping them and failing to match anything.

---
v2: fix commit message to point to correct source of failure

 lib/hashtable.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
lib/hashtable.c +1 -1
index 2788a65..19d5b15 100644
@@ -232,7 +232,7 @@ int hmatch_r(const char *match, int last_idx, ENTRY ** retval,
 	size_t key_len = strlen(match);
 
 	for (idx = last_idx + 1; idx < htab->size; ++idx) {
-		if (htab->table[idx].used > 0)
+		if (htab->table[idx].used <= 0)
 			continue;
 		if (!strncmp(match, htab->table[idx].entry.key, key_len)) {
 			*retval = &htab->table[idx].entry;
Signature · 1 line
1.7.4.2.dirty
#4 lore raw

PATCH v2 1/1 lib/hashtable: fix env var autocompletion

Quoted 8 lines · On Tuesday, April 05, 2011 13:14:50 Kim Phillips wrote:

commit c81c1222427f268d29ba999c82e2477c428e7bab "Fix hash table deletion to prevent lost entries" broke environment variable autocompletion by accidentally inverting the condition for 'used' in hmatch_r().

'used' is 0 if the hash table entry is not used, or -1 if deleted. This patch makes hmatch_r actually match on valid ('used') entries, instead of skipping them and failing to match anything.

blah, this started to annoy me quite a bit. and your patch wfm.

-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20110415/67e4ec72/attachment.pgp

#5 lore raw

PATCH v2 1/1 lib/hashtable: fix env var autocompletion

In reply to Kim Phillips

Dear Kim Phillips,

Quoted 5 lines · In message <[email protected]> you wrote:

commit c81c1222427f268d29ba999c82e2477c428e7bab "Fix hash table deletion to prevent lost entries" broke environment variable autocompletion by accidentally inverting the condition for 'used' in hmatch_r().

Quoted 7 lines

'used' is 0 if the hash table entry is not used, or -1 if deleted. This patch makes hmatch_r actually match on valid ('used') entries, instead of skipping them and failing to match anything.

---
v2: fix commit message to point to correct source of failure

Applied, thanks.

Best regards,

Wolfgang Denk

Signature · 5 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Beware of the Turing Tar-pit in  which  everything  is  possible  but
nothing of interest is easy.