mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 09:24:54 +01:00
Utility function to seek in MIME trees in depth-first order.
This function matches how we number parts for the --part argument to show. It will allow us to jump directly to the desired part, rather than traversing the entire tree and carefully tracking whether or not we're "in the zone".
This commit is contained in:
parent
bb189220a3
commit
5d1ac7d1d3
2 changed files with 32 additions and 0 deletions
27
mime-node.c
27
mime-node.c
|
@ -236,3 +236,30 @@ mime_node_child (const mime_node_t *parent, int child)
|
|||
}
|
||||
return _mime_node_create (parent, sub);
|
||||
}
|
||||
|
||||
static mime_node_t *
|
||||
_mime_node_seek_dfs_walk (mime_node_t *node, int *n)
|
||||
{
|
||||
mime_node_t *ret = NULL;
|
||||
int i;
|
||||
|
||||
if (*n == 0)
|
||||
return node;
|
||||
|
||||
*n -= 1;
|
||||
for (i = 0; i < node->nchildren && !ret; i++) {
|
||||
mime_node_t *child = mime_node_child (node, i);
|
||||
ret = _mime_node_seek_dfs_walk (child, n);
|
||||
if (!ret)
|
||||
talloc_free (child);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
mime_node_t *
|
||||
mime_node_seek_dfs (mime_node_t *node, int n)
|
||||
{
|
||||
if (n < 0)
|
||||
return NULL;
|
||||
return _mime_node_seek_dfs_walk (node, &n);
|
||||
}
|
||||
|
|
|
@ -324,5 +324,10 @@ mime_node_open (const void *ctx, notmuch_message_t *message,
|
|||
mime_node_t *
|
||||
mime_node_child (const mime_node_t *parent, int child);
|
||||
|
||||
/* Return the nth child of node in a depth-first traversal. If n is
|
||||
* 0, returns node itself. Returns NULL if there is no such part. */
|
||||
mime_node_t *
|
||||
mime_node_seek_dfs (mime_node_t *node, int n);
|
||||
|
||||
#include "command-line-arguments.h"
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue