[PATCH] simplify unhex_and_quote
david at tethera.net
david at tethera.net
Sat Dec 22 18:59:30 PST 2012
From: David Bremner <bremner at unb.ca>
the overgeneral definition of a prefix can be replaced by lower case
alphabetic, and still work fine with current notmuch query syntax.
token_len++ is moved to the end, and we restore the delimiter just so
we can leave the string as as we found it.
---
As always, Jani has a keen eye for muddle. Except he's wrong about
tok_len - prefix_len, and Mark and I are right. Hopefully ;).
Restoring the delimiter at the end might be pointless (since the rest
of the input line is modified), but it is one less surprise for somebody
repurposing the function.
Patches 5 and 6 can be ignored now.
tag-util.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/tag-util.c b/tag-util.c
index b0a846b..ee28512 100644
--- a/tag-util.c
+++ b/tag-util.c
@@ -78,11 +78,13 @@ unhex_and_quote (void *ctx, char *encoded, const char *line_for_error,
size_t prefix_len;
char delim = *(tok + tok_len);
- *(tok + tok_len++) = '\0';
+ *(tok + tok_len) = '\0';
- prefix_len = hex_invariant (tok, tok_len);
+ /* The following matches a superset of prefixes currently
+ * used by notmuch */
+ prefix_len = strspn (tok, "abcdefghijklmnopqrstuvwxyz");
- if ((strcmp (tok, "*") == 0) || prefix_len >= tok_len - 1) {
+ if ((strcmp (tok, "*") == 0) || prefix_len == tok_len) {
/* pass some things through without quoting or decoding.
* Note for '*' this is mandatory.
@@ -98,7 +100,7 @@ unhex_and_quote (void *ctx, char *encoded, const char *line_for_error,
} else {
/* potential prefix: one for ':', then something after */
- if ((tok_len - prefix_len > 2) && *(tok + prefix_len) == ':') {
+ if ((tok_len - prefix_len >= 2) && *(tok + prefix_len) == ':') {
if (! (*query_string = talloc_strndup_append (*query_string,
tok,
prefix_len + 1))) {
@@ -129,6 +131,8 @@ unhex_and_quote (void *ctx, char *encoded, const char *line_for_error,
goto DONE;
}
}
+ /* restore the string and skip delimiter */
+ *(tok + tok_len++) = delim;
}
DONE:
--
1.7.10.4
More information about the notmuch
mailing list