mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-22 02:48:08 +01:00
25cf5f5dc4
This is now a generic boolean term quoting function. It performs minimal quoting to produce user-friendly queries. This could live in tag-util as well, but it is really nothing specific to tags (although the conventions are specific to Xapian). The API is changed from "caller-allocates" to "readline-like". The scan for max tag length is pushed down into the quoting routine. Furthermore, this now combines the term prefix with the quoted term; arguably this is just as easy to do in the caller, but this will nicely parallel the boolean term parsing function to be introduced shortly. This is an amalgamation of code written by David Bremner and myself.
37 lines
1.2 KiB
C
37 lines
1.2 KiB
C
#ifndef _STRING_UTIL_H
|
|
#define _STRING_UTIL_H
|
|
|
|
#include <string.h>
|
|
|
|
/* like strtok(3), but without state, and doesn't modify s. Return
|
|
* value is indicated by pointer and length, not null terminator.
|
|
*
|
|
* Usage pattern:
|
|
*
|
|
* const char *tok = input;
|
|
* const char *delim = " \t";
|
|
* size_t tok_len = 0;
|
|
*
|
|
* while ((tok = strtok_len (tok + tok_len, delim, &tok_len)) != NULL) {
|
|
* // do stuff with string tok of length tok_len
|
|
* }
|
|
*/
|
|
|
|
char *strtok_len (char *s, const char *delim, size_t *len);
|
|
|
|
/* Construct a boolean term query with the specified prefix (e.g.,
|
|
* "id") and search term, quoting term as necessary. Specifically, if
|
|
* term contains any non-printable ASCII characters, non-ASCII
|
|
* characters, close parenthesis or double quotes, it will be enclosed
|
|
* in double quotes and any internal double quotes will be doubled
|
|
* (e.g. a"b -> "a""b"). The result will be a valid notmuch query and
|
|
* can be parsed by parse_boolean_term.
|
|
*
|
|
* Output is into buf; it may be talloc_realloced.
|
|
* Return: 0 on success, -1 on error. errno will be set to ENOMEM if
|
|
* there is an allocation failure.
|
|
*/
|
|
int make_boolean_term (void *talloc_ctx, const char *prefix, const char *term,
|
|
char **buf, size_t *len);
|
|
|
|
#endif
|