Thanks to visit codestin.com
Credit goes to code.neomutt.org

NeoMutt  2025-12-11-189-gceedb6
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
string2.h
Go to the documentation of this file.
1
24
25/* @note This file is called string2.h so that other files can safely
26 * #include <string.h>
27 */
28
29#ifndef MUTT_MUTT_STRING2_H
30#define MUTT_MUTT_STRING2_H
31
32#include <stdbool.h>
33#include <stdio.h>
34#include "array.h"
35#include "memory.h"
36
38ARRAY_HEAD(StringArray, const char *);
39
40void string_array_clear(struct StringArray *arr);
41
42#define STR_COMMAND 8192
43
44#define NONULL(x) ((x) ? (x) : "")
45
46/* Exit values */
47#define S_ERR 127
48#define S_BKG 126
49
50/* this macro must check for (*ch == 0) since isspace(0) has unreliable behavior
51 * on some systems */
52#define SKIPWS(ch) \
53 while (*(ch) && mutt_isspace(*(ch))) \
54 ch++;
55
56#define terminate_string(str, strlen, buflen) \
57 (str)[MIN((strlen), (buflen))] = '\0'
58
59#define terminate_buffer(str, strlen) \
60 terminate_string(str, strlen, sizeof(str) - 1)
61
62void mutt_str_adjust(char **ptr);
63int mutt_str_asprintf(char **strp, const char *fmt, ...)
64 __attribute__((__format__(__printf__, 2, 3)));
65int mutt_str_coll(const char *a, const char *b);
66const char *mutt_str_find_word(const char *src);
67const char *mutt_str_getenv(const char *name);
68void mutt_str_hyphenate(char *buf, size_t buflen, const char *str);
69bool mutt_str_is_ascii(const char *str, size_t len);
70size_t mutt_str_len(const char *a);
71char * mutt_str_lower(char *str);
72size_t mutt_str_lws_len(const char *s, size_t n);
73void mutt_str_remove_trailing_ws(char *s);
74char * mutt_str_replace(char **p, const char *s);
75char * mutt_str_sep(char **stringp, const char *delim);
76char * mutt_str_skip_email_wsp(const char *s);
77char * mutt_str_skip_whitespace(const char *p);
78const char *mutt_str_sysexit(int e);
79char * mutt_str_upper(char *str);
80
81/* case-sensitive flavours */
82int mutt_str_cmp(const char *a, const char *b);
83size_t mutt_str_copy(char *dest, const char *src, size_t dsize);
84char * mutt_str_dup(const char *str);
85bool mutt_str_equal(const char *a, const char *b);
86size_t mutt_str_startswith(const char *str, const char *prefix);
87
88/* case-sensitive, length-bound flavours */
89char * mutt_strn_copy(char *dest, const char *src, size_t len, size_t dsize);
90char * mutt_strn_dup(const char *begin, size_t l);
91bool mutt_strn_equal(const char *a, const char *b, size_t num);
92
93/* case-insensitive flavours */
94int mutt_istr_cmp(const char *a, const char *b);
95bool mutt_istr_equal(const char *a, const char *b);
96const char *mutt_istr_find(const char *haystack, const char *needle);
97int mutt_istr_remall(char *str, const char *target);
98size_t mutt_istr_startswith(const char *str, const char *prefix);
99int mutt_str_inbox_cmp(const char *a, const char *b);
100
101/* case-insensitive, length-bound flavours */
102int mutt_istrn_cmp(const char *a, const char *b, size_t num);
103bool mutt_istrn_equal(const char *a, const char *b, size_t num);
104const char *mutt_istrn_rfind(const char *haystack, size_t haystack_length, const char *needle);
105
111static inline bool mutt_str_is_email_wsp(char c)
112{
113 return (c == ' ') || (c == '\t') || (c == '\r') || (c == '\n');
114}
115
116#endif /* MUTT_MUTT_STRING2_H */
Linear Array data structure.
#define ARRAY_HEAD(name, T)
Define a named struct for arrays of elements of a certain type.
Definition array.h:47
int mutt_str_inbox_cmp(const char *a, const char *b)
Do two folders share the same path and one is an inbox -.
Definition string.c:889
Memory management wrappers.
char * mutt_strn_dup(const char *begin, size_t len)
Duplicate a sub-string.
Definition string.c:384
int mutt_str_cmp(const char *a, const char *b)
Compare two strings, safely.
Definition string.c:403
int mutt_istrn_cmp(const char *a, const char *b, size_t num)
Compare two strings ignoring case (to a maximum), safely.
Definition string.c:443
void mutt_str_remove_trailing_ws(char *s)
Trim trailing whitespace from a string.
Definition string.c:567
bool mutt_istr_equal(const char *a, const char *b)
Compare two strings, ignoring case.
Definition string.c:674
char * mutt_str_dup(const char *str)
Copy a string, safely.
Definition string.c:257
char * mutt_str_upper(char *str)
Convert all characters in the string to uppercase.
Definition string.c:340
char * mutt_str_lower(char *str)
Convert all characters in the string to lowercase.
Definition string.c:317
char * mutt_str_skip_email_wsp(const char *s)
Skip over whitespace as defined by RFC5322.
Definition string.c:610
const char * mutt_istrn_rfind(const char *haystack, size_t haystack_length, const char *needle)
Find last instance of a substring, ignoring case.
Definition string.c:473
size_t mutt_str_lws_len(const char *s, size_t n)
Measure the linear-white-space at the beginning of a string.
Definition string.c:630
bool mutt_str_is_ascii(const char *str, size_t len)
Is a string ASCII (7-bit)?
Definition string.c:685
int mutt_istr_cmp(const char *a, const char *b)
Compare two strings ignoring case, safely.
Definition string.c:416
bool mutt_str_equal(const char *a, const char *b)
Compare two strings.
Definition string.c:662
bool mutt_strn_equal(const char *a, const char *b, size_t num)
Check for equality of two strings (to a maximum), safely.
Definition string.c:429
const char * mutt_str_find_word(const char *src)
Find the end of a word (non-space)
Definition string.c:708
char * mutt_strn_copy(char *dest, const char *src, size_t len, size_t dsize)
Copy a sub-string into a buffer.
Definition string.c:364
int mutt_istr_remall(char *str, const char *target)
Remove all occurrences of substring, ignoring case.
Definition string.c:747
const char * mutt_str_getenv(const char *name)
Get an environment variable.
Definition string.c:728
const char * mutt_istr_find(const char *haystack, const char *needle)
Find first occurrence of string (ignoring case)
Definition string.c:525
size_t mutt_str_startswith(const char *str, const char *prefix)
Check whether a string starts with a prefix.
Definition string.c:234
void mutt_str_hyphenate(char *buf, size_t buflen, const char *str)
Hyphenate a snake-case string.
Definition string.c:851
char * mutt_str_skip_whitespace(const char *p)
Find the first non-whitespace character in a string.
Definition string.c:553
size_t mutt_str_len(const char *a)
Calculate the length of a string, safely.
Definition string.c:500
size_t mutt_str_copy(char *dest, const char *src, size_t dsize)
Copy a string into a buffer (guaranteeing NUL-termination)
Definition string.c:583
size_t mutt_istr_startswith(const char *str, const char *prefix)
Check whether a string starts with a prefix, ignoring case.
Definition string.c:246
bool mutt_istrn_equal(const char *a, const char *b, size_t num)
Check for equality of two strings ignoring case (to a maximum), safely.
Definition string.c:457
const char * mutt_str_sysexit(int err_num)
Return a string matching an error code.
Definition string.c:173
char * mutt_str_replace(char **p, const char *s)
Replace one string with another.
Definition string.c:284
int mutt_str_coll(const char *a, const char *b)
Collate two strings (compare using locale), safely.
Definition string.c:513
char * mutt_str_sep(char **stringp, const char *delim)
Find first occurrence of any of delim characters in *stringp.
Definition string.c:190
int mutt_str_asprintf(char **strp, const char *fmt,...) __attribute__((__format__(__printf__
void mutt_str_adjust(char **ptr)
Shrink-to-fit a string.
Definition string.c:303
void string_array_clear(struct StringArray *arr)
Free all memory of a StringArray.
Definition string.c:933
static bool mutt_str_is_email_wsp(char c)
Is this a whitespace character (for an email header)
Definition string2.h:111