NeoMutt  2021-10-29-43-g6b8931
Teaching an old dog new tricks
DOXYGEN
tag.c File Reference

Notmuch tag functions. More...

#include "config.h"
#include <stddef.h>
#include <ctype.h>
#include "mutt/lib.h"
#include "notmuch/tag.h"
+ Include dependency graph for tag.c:

Go to the source code of this file.

Functions

void nm_tag_array_free (struct TagArray *tags)
 Free all memory of a TagArray. More...
 
struct TagArray nm_tag_str_to_tags (const char *tag_str)
 Converts a comma and/or space-delimited string of tags into an array. More...
 

Detailed Description

Notmuch tag functions.

Authors
  • Austin Ray

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Definition in file tag.c.

Function Documentation

◆ nm_tag_array_free()

void nm_tag_array_free ( struct TagArray tags)

Free all memory of a TagArray.

Parameters
tagsTagArray being cleaned up

Definition at line 39 of file tag.c.

40 {
41  ARRAY_FREE(&tags->tags);
42  FREE(&tags->tag_str);
43 }
#define ARRAY_FREE(head)
Release all memory.
Definition: array.h:200
#define FREE(x)
Definition: memory.h:40
char * tag_str
Source string.
Definition: tag.h:37
+ Here is the caller graph for this function:

◆ nm_tag_str_to_tags()

struct TagArray nm_tag_str_to_tags ( const char *  tag_str)

Converts a comma and/or space-delimited string of tags into an array.

Parameters
tag_strString containing a list of tags, comma- and/or space-delimited
Return values
objArray containing tags represented as strings

Definition at line 39 of file tag.c.

51 {
52  char *buf = mutt_str_dup(tag_str);
53 
54  struct TagArray tags = { ARRAY_HEAD_INITIALIZER, buf };
55 
56  char *end = NULL;
57  char *tag = NULL;
58 
59  for (char *p = buf; p && (p[0] != '\0'); p++)
60  {
61  if (!tag && isspace(*p))
62  continue;
63  if (!tag)
64  tag = p; /* begin of the tag */
65  if ((p[0] == ',') || (p[0] == ' '))
66  end = p; /* terminate the tag */
67  else if (p[1] == '\0')
68  end = p + 1; /* end of optstr */
69  if (!tag || !end)
70  continue;
71  if (tag >= end)
72  break;
73  *end = '\0';
74 
75  ARRAY_ADD(&tags.tags, tag);
76 
77  end = NULL;
78  tag = NULL;
79  }
80 
81  return tags;
82 }
#define ARRAY_ADD(head, elem)
Add an element at the end of the array.
Definition: array.h:152
#define ARRAY_HEAD_INITIALIZER
Static initializer for arrays.
Definition: array.h:54
char * mutt_str_dup(const char *str)
Copy a string, safely.
Definition: string.c:181
Array of Notmuch tags.
Definition: tag.h:35
+ Here is the caller graph for this function: