Asterisk - The Open Source Telephony Project  GIT-master-a24979a
Data Structures | Macros | Enumerations | Functions
strings.h File Reference

String manipulation functions. More...

#include <ctype.h>
#include <limits.h>
#include "asterisk/utils.h"
#include "asterisk/threadstorage.h"
#include "asterisk/astobj2.h"
Include dependency graph for strings.h:

Go to the source code of this file.

Data Structures

struct  ast_str
 Support for dynamic strings. More...
 

Macros

#define __AST_STR_LEN   len
 
#define __AST_STR_STR   str
 
#define __AST_STR_TS   ts
 
#define __AST_STR_USED   used
 
#define _ast_str_helper(buf, max_len, append, fmt, ap)    __ast_str_helper(buf, max_len, append, fmt, ap, __FILE__, __LINE__, __PRETTY_FUNCTION__)
 
#define _DB1(x)
 
#define AS_OR(a, b)   (a && ast_str_strlen(a)) ? ast_str_buffer(a) : (b)
 
#define ast_join(s, len, w)   ast_join_delim(s, len, w, -1, ' ')
 Join an array of strings into a single string. More...
 
#define ast_str_alloca(init_len)
 
#define ast_str_container_alloc(buckets)   ast_str_container_alloc_options(AO2_ALLOC_OPT_LOCK_MUTEX, buckets)
 Allocates a hash container for bare strings. More...
 
#define ast_str_create(init_len)    _ast_str_create(init_len, __FILE__, __LINE__, __PRETTY_FUNCTION__)
 Create a malloc'ed dynamic length string. More...
 
#define ast_str_make_space(buf, new_len)    _ast_str_make_space(buf, new_len, __FILE__, __LINE__, __PRETTY_FUNCTION__)
 
#define ast_str_tmp(init_len, __expr)
 Provides a temporary ast_str and returns a copy of its buffer. More...
 
#define ast_to_camel_case(s)   ast_to_camel_case_delim(s, "_")
 Attempts to convert the given string to camel case using an underscore as the specified delimiter. More...
 
#define AST_YESNO(x)   ((x) ? "Yes" : "No")
 return Yes or No depending on the argument. More...
 
#define DS_ALLOCA   ((struct ast_threadstorage *)2)
 
#define DS_MALLOC   ((struct ast_threadstorage *)1)
 
#define DS_STATIC   ((struct ast_threadstorage *)3) /* not supported yet */
 
#define S_COR(a, b, c)   ({typeof(&((b)[0])) __x = (b); (a) && !ast_strlen_zero(__x) ? (__x) : (c);})
 returns the equivalent of logic or for strings, with an additional boolean check: second one if not empty and first one is true, otherwise third one. example: S_COR(usewidget, widget, "<no widget>") More...
 
#define S_OR(a, b)   ({typeof(&((a)[0])) __x = (a); ast_strlen_zero(__x) ? (b) : __x;})
 returns the equivalent of logic or for strings: first one if not empty, otherwise second one. More...
 

Enumerations

enum  { AST_DYNSTR_BUILD_FAILED = -1 , AST_DYNSTR_BUILD_RETRY = -2 }
 Error codes from __ast_str_helper() The underlying processing to manipulate dynamic string is done by __ast_str_helper(), which can return a success or a permanent failure (e.g. no memory). More...
 
enum  ast_strsep_flags { AST_STRSEP_STRIP = 0x01 , AST_STRSEP_TRIM = 0x02 , AST_STRSEP_UNESCAPE = 0x04 , AST_STRSEP_ALL = 0x07 }
 Flags for ast_strsep. More...
 

Functions

int __ast_str_helper (struct ast_str **buf, ssize_t max_len, int append, const char *fmt, va_list ap, const char *file, int lineno, const char *func)
 Core functionality of ast_str_(set|append)_va. More...
 
char * __ast_str_helper2 (struct ast_str **buf, ssize_t max_len, const char *src, size_t maxsrc, int append, int escapecommas)
 
struct ast_str_ast_str_create (size_t init_len, const char *file, int lineno, const char *func)
 
int _ast_str_make_space (struct ast_str **buf, size_t new_len, const char *file, int lineno, const char *function)
 
static int force_inline attribute_pure ast_begins_with (const char *str, const char *prefix)
 Checks whether a string begins with another. More...
 
int ast_build_string (char **buffer, size_t *space, const char *fmt,...)
 Build a string in a buffer, designed to be called repeatedly. More...
 
int ast_build_string_va (char **buffer, size_t *space, const char *fmt, va_list ap)
 Build a string in a buffer, designed to be called repeatedly. More...
 
int ast_check_digits (const char *arg)
 Check if a string is only digits. More...
 
void ast_copy_string (char *dst, const char *src, size_t size)
 Size-limited null-terminating string copy. More...
 
static int force_inline attribute_pure ast_ends_with (const char *str, const char *suffix)
 Checks whether a string ends with another. More...
 
char * ast_escape (char *dest, const char *s, size_t size, const char *to_escape)
 Escape the 'to_escape' characters in the given string. More...
 
char * ast_escape_alloc (const char *s, const char *to_escape)
 Escape the 'to_escape' characters in the given string. More...
 
char * ast_escape_c (char *dest, const char *s, size_t size)
 Escape standard 'C' sequences in the given string. More...
 
char * ast_escape_c_alloc (const char *s)
 Escape standard 'C' sequences in the given string. More...
 
int attribute_pure ast_false (const char *val)
 Make sure something is false. Determine if a string containing a boolean value is "false". This function checks to see whether a string passed to it is an indication of an "false" value. It checks to see if the string is "no", "false", "n", "f", "off" or "0". More...
 
char * ast_generate_random_string (char *buf, size_t size)
 Create a pseudo-random string of a fixed length. More...
 
int ast_get_time_t (const char *src, time_t *dst, time_t _default, int *consumed)
 Parse a time (integer) string. More...
 
int ast_get_timeval (const char *src, struct timeval *tv, struct timeval _default, int *consumed)
 Parse a time (float) string. More...
 
int ast_in_delimited_string (const char *needle, const char *haystack, char delim)
 Check if there is an exact match for 'needle' between delimiters in 'haystack'. More...
 
void ast_join_delim (char *s, size_t len, const char *const w[], unsigned int size, char delim)
 Join an array of strings into a single string. More...
 
char * ast_read_line_from_buffer (char **buffer)
 Read lines from a string buffer. More...
 
int ast_regex_string_to_regex_pattern (const char *regex_string, struct ast_str **regex_pattern)
 Given a string regex_string in the form of "/regex/", convert it into the form of "regex". More...
 
char * ast_skip_blanks (const char *str)
 Gets a pointer to the first non-whitespace character in a string. More...
 
char * ast_skip_nonblanks (const char *str)
 Gets a pointer to first whitespace character in a string. More...
 
int ast_str_append (struct ast_str **buf, ssize_t max_len, const char *fmt,...)
 Append to a thread local dynamic string. More...
 
char * ast_str_append_escapecommas (struct ast_str **buf, ssize_t maxlen, const char *src, size_t maxsrc)
 Append a non-NULL terminated substring to the end of a dynamic string, with escaping of commas. More...
 
char * ast_str_append_substr (struct ast_str **buf, ssize_t maxlen, const char *src, size_t maxsrc)
 Append a non-NULL terminated substring to the end of a dynamic string. More...
 
int ast_str_append_va (struct ast_str **buf, ssize_t max_len, const char *fmt, va_list ap)
 Append to a dynamic string using a va_list. More...
 
char * ast_str_buffer (const struct ast_str *buf)
 Returns the string buffer within the ast_str buf. More...
 
static force_inline int attribute_pure ast_str_case_hash (const char *str)
 Compute a hash value on a case-insensitive string. More...
 
int ast_str_container_add (struct ao2_container *str_container, const char *add)
 Adds a string to a string container allocated by ast_str_container_alloc. More...
 
struct ao2_containerast_str_container_alloc_options (enum ao2_alloc_opts opts, int buckets)
 Allocates a hash container for bare strings. More...
 
void ast_str_container_remove (struct ao2_container *str_container, const char *remove)
 Removes a string from a string container allocated by ast_str_container_alloc. More...
 
int ast_str_copy_string (struct ast_str **dst, struct ast_str *src)
 
static force_inline int attribute_pure ast_str_hash (const char *str)
 Compute a hash value on a string. More...
 
static force_inline int ast_str_hash_add (const char *str, int seed)
 Compute a hash value on a string. More...
 
static force_inline int attribute_pure ast_str_hash_restrict (unsigned int hash)
 Restrict hash value range. More...
 
void ast_str_reset (struct ast_str *buf)
 Reset the content of a dynamic string. Useful before a series of ast_str_append. More...
 
int ast_str_set (struct ast_str **buf, ssize_t max_len, const char *fmt,...)
 Set a dynamic string using variable arguments. More...
 
char * ast_str_set_escapecommas (struct ast_str **buf, ssize_t maxlen, const char *src, size_t maxsrc)
 Set a dynamic string to a non-NULL terminated substring, with escaping of commas. More...
 
char * ast_str_set_substr (struct ast_str **buf, ssize_t maxlen, const char *src, size_t maxsrc)
 Set a dynamic string to a non-NULL terminated substring. More...
 
int ast_str_set_va (struct ast_str **buf, ssize_t max_len, const char *fmt, va_list ap)
 Set a dynamic string from a va_list. More...
 
size_t ast_str_size (const struct ast_str *buf)
 Returns the current maximum length (without reallocation) of the current buffer. More...
 
size_t ast_str_strlen (const struct ast_str *buf)
 Returns the current length of the string stored within buf. More...
 
struct ast_strast_str_thread_get (struct ast_threadstorage *ts, size_t init_len)
 Retrieve a thread locally stored dynamic string. More...
 
static force_inline char * ast_str_to_lower (char *str)
 Convert a string to all lower-case. More...
 
static force_inline char * ast_str_to_upper (char *str)
 Convert a string to all upper-case. More...
 
void ast_str_trim_blanks (struct ast_str *buf)
 Trims trailing whitespace characters from an ast_str string. More...
 
char * ast_str_truncate (struct ast_str *buf, ssize_t len)
 Truncates the enclosed string to the given length. More...
 
void ast_str_update (struct ast_str *buf)
 Update the length of the buffer, after using ast_str merely as a buffer. More...
 
int ast_strings_equal (const char *str1, const char *str2)
 Compare strings for equality checking for NULL. More...
 
int ast_strings_match (const char *left, const char *op, const char *right)
 Compares 2 strings using realtime-style operators. More...
 
char * ast_strip (char *s)
 Strip leading/trailing whitespace from a string. More...
 
char * ast_strip_quoted (char *s, const char *beg_quotes, const char *end_quotes)
 Strip leading/trailing whitespace and quotes from a string. More...
 
static force_inline int attribute_pure ast_strlen_zero (const char *s)
 
char * ast_strsep (char **s, const char sep, uint32_t flags)
 Act like strsep but ignore separators inside quotes. More...
 
char * ast_tech_to_upper (char *dev_str)
 Convert the tech portion of a device string to upper case. More...
 
char * ast_to_camel_case_delim (const char *s, const char *delim)
 Attempts to convert the given string to camel case using the specified delimiter. More...
 
char * ast_trim_blanks (char *str)
 Trims trailing whitespace characters from a string. More...
 
int attribute_pure ast_true (const char *val)
 Make sure something is true. Determine if a string containing a boolean value is "true". This function checks to see whether a string passed to it is an indication of an "true" value. It checks to see if the string is "yes", "true", "y", "t", "on" or "1". More...
 
char * ast_unescape_c (char *s)
 Convert some C escape sequences. More...
 
char * ast_unescape_semicolon (char *s)
 Strip backslash for "escaped" semicolons, the string to be stripped (will be modified). More...
 

Detailed Description

String manipulation functions.

Definition in file strings.h.

Macro Definition Documentation

◆ __AST_STR_LEN

#define __AST_STR_LEN   len

Definition at line 42 of file strings.h.

◆ __AST_STR_STR

#define __AST_STR_STR   str

Definition at line 43 of file strings.h.

◆ __AST_STR_TS

#define __AST_STR_TS   ts

Definition at line 44 of file strings.h.

◆ __AST_STR_USED

#define __AST_STR_USED   used

Definition at line 41 of file strings.h.

◆ _ast_str_helper

#define _ast_str_helper (   buf,
  max_len,
  append,
  fmt,
  ap 
)     __ast_str_helper(buf, max_len, append, fmt, ap, __FILE__, __LINE__, __PRETTY_FUNCTION__)

Definition at line 954 of file strings.h.

◆ _DB1

#define _DB1 (   x)

Definition at line 777 of file strings.h.

◆ AS_OR

#define AS_OR (   a,
  b 
)    (a && ast_str_strlen(a)) ? ast_str_buffer(a) : (b)

Definition at line 49 of file strings.h.

◆ ast_join

#define ast_join (   s,
  len,
 
)    ast_join_delim(s, len, w, -1, ' ')

Join an array of strings into a single string.

Parameters
sthe resulting string buffer
lenthe length of the result buffer, s
wan array of strings to join.

This function will join all of the strings in the array 'w' into a single string. It will also place a space in the result buffer in between each string from 'w'.

Definition at line 501 of file strings.h.

◆ ast_str_alloca

#define ast_str_alloca (   init_len)

Definition at line 826 of file strings.h.

◆ ast_str_container_alloc

#define ast_str_container_alloc (   buckets)    ast_str_container_alloc_options(AO2_ALLOC_OPT_LOCK_MUTEX, buckets)

Allocates a hash container for bare strings.

Since
12
Parameters
bucketsThe number of buckets to use for the hash container
Returns
AO2 container for strings
Return values
NULLif allocation failed

Definition at line 1343 of file strings.h.

◆ ast_str_create

#define ast_str_create (   init_len)     _ast_str_create(init_len, __FILE__, __LINE__, __PRETTY_FUNCTION__)

Create a malloc'ed dynamic length string.

Parameters
init_lenThis is the initial length of the string buffer
Returns
This function returns a pointer to the dynamic string length. The result will be NULL in the case of a memory allocation error.
Note
The result of this function is dynamically allocated memory, and must be free()'d after it is no longer needed.

Definition at line 640 of file strings.h.

◆ ast_str_make_space

#define ast_str_make_space (   buf,
  new_len 
)     _ast_str_make_space(buf, new_len, __FILE__, __LINE__, __PRETTY_FUNCTION__)

Definition at line 806 of file strings.h.

◆ ast_str_tmp

#define ast_str_tmp (   init_len,
  __expr 
)

Provides a temporary ast_str and returns a copy of its buffer.

Since
16.12
17.6
18.0
Parameters
init_lenThe initial length of the temporary ast_str needed.
__exprAn expression that needs the temporary ast_str and returns a char *.
Returns
A copy of __expr's return buffer allocated on the stack.

There are a few query functions scattered around that need an ast_str in which to assemble the results but it's not always convenient to create an ast_str and ensure it's freed just to print a log message. For example:

struct ast_str *temp = ast_str_create(128);
ast_log(LOG_INFO, "Format caps: %s\n", ast_format_cap_get_names(caps, &temp));
ast_free(temp);
#define ast_free(a)
Definition: astmm.h:180
#define ast_log
Definition: astobj2.c:42
const char * ast_format_cap_get_names(const struct ast_format_cap *cap, struct ast_str **buf)
Get the names of codecs of a set of formats.
Definition: format_cap.c:734
#define ast_str_create(init_len)
Create a malloc'ed dynamic length string.
Definition: strings.h:640
Support for dynamic strings.
Definition: strings.h:604

That's not bad if you only have to do it once but some of our code that deals with streams and codecs is pretty complex and good instrumentation is essential. The aim of this function is to make that easier.

With this macro, the above code can be simplified:

ast_log(LOG_INFO, "Format caps: %s\n",
ast_str_tmp(128, ast_format_cap_get_names(caps, &STR_TMP));
#define ast_str_tmp(init_len, __expr)
Provides a temporary ast_str and returns a copy of its buffer.
Definition: strings.h:1167

STR_TMP will always be a reference to the temporary ast_str created by the macro. Its scope is limited by the macro so you can use it multiple times without conflict:

ast_log(LOG_INFO, "Format caps in: %s Format caps out: %s\n",
ast_str_tmp(128, ast_format_cap_get_names(caps_in, &STR_TMP),
ast_str_tmp(128, ast_format_cap_get_names(caps_out, &STR_TMP)
);
Warning
The returned string is stack allocated so don't go overboard.

Definition at line 1167 of file strings.h.

◆ ast_to_camel_case

#define ast_to_camel_case (   s)    ast_to_camel_case_delim(s, "_")

Attempts to convert the given string to camel case using an underscore as the specified delimiter.

note - returned string needs to be freed

Parameters
sthe string to convert
Returns
The string converted to "CamelCase"

Definition at line 527 of file strings.h.

◆ AST_YESNO

#define AST_YESNO (   x)    ((x) ? "Yes" : "No")

return Yes or No depending on the argument.

Note that this macro is used my AMI, where a literal "Yes" and "No" are expected, and translations would cause problems.

Parameters
xBoolean value
Return values
Yesif x is true (non-zero)
Noif x is false (zero)

Definition at line 143 of file strings.h.

◆ DS_ALLOCA

#define DS_ALLOCA   ((struct ast_threadstorage *)2)

Definition at line 609 of file strings.h.

◆ DS_MALLOC

#define DS_MALLOC   ((struct ast_threadstorage *)1)

Definition at line 608 of file strings.h.

◆ DS_STATIC

#define DS_STATIC   ((struct ast_threadstorage *)3) /* not supported yet */

Definition at line 610 of file strings.h.

◆ S_COR

#define S_COR (   a,
  b,
  c 
)    ({typeof(&((b)[0])) __x = (b); (a) && !ast_strlen_zero(__x) ? (__x) : (c);})

returns the equivalent of logic or for strings, with an additional boolean check: second one if not empty and first one is true, otherwise third one. example: S_COR(usewidget, widget, "<no widget>")

Definition at line 87 of file strings.h.

◆ S_OR

#define S_OR (   a,
  b 
)    ({typeof(&((a)[0])) __x = (a); ast_strlen_zero(__x) ? (b) : __x;})

returns the equivalent of logic or for strings: first one if not empty, otherwise second one.

Definition at line 80 of file strings.h.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Error codes from __ast_str_helper() The underlying processing to manipulate dynamic string is done by __ast_str_helper(), which can return a success or a permanent failure (e.g. no memory).

Enumerator
AST_DYNSTR_BUILD_FAILED 

An error has occurred and the contents of the dynamic string are undefined

AST_DYNSTR_BUILD_RETRY 

The buffer size for the dynamic string had to be increased, and __ast_str_helper() needs to be called again after a va_end() and va_start(). This return value is legacy and will no longer be used.

Definition at line 918 of file strings.h.

918  {
919  /*! An error has occurred and the contents of the dynamic string
920  * are undefined */
922  /*! The buffer size for the dynamic string had to be increased, and
923  * __ast_str_helper() needs to be called again after
924  * a va_end() and va_start(). This return value is legacy and will
925  * no longer be used.
926  */
928 };
@ AST_DYNSTR_BUILD_FAILED
Definition: strings.h:921
@ AST_DYNSTR_BUILD_RETRY
Definition: strings.h:927

◆ ast_strsep_flags

Flags for ast_strsep.

Enumerator
AST_STRSEP_STRIP 

Trim, then strip quotes. You may want to trim again

AST_STRSEP_TRIM 

Trim leading and trailing whitespace

AST_STRSEP_UNESCAPE 

Unescape '\'

AST_STRSEP_ALL 

Trim, strip, unescape

Definition at line 254 of file strings.h.

254  {
255  AST_STRSEP_STRIP = 0x01, /*!< Trim, then strip quotes. You may want to trim again */
256  AST_STRSEP_TRIM = 0x02, /*!< Trim leading and trailing whitespace */
257  AST_STRSEP_UNESCAPE = 0x04, /*!< Unescape '\' */
258  AST_STRSEP_ALL = 0x07, /*!< Trim, strip, unescape */
259 };
@ AST_STRSEP_ALL
Definition: strings.h:258
@ AST_STRSEP_TRIM
Definition: strings.h:256
@ AST_STRSEP_UNESCAPE
Definition: strings.h:257
@ AST_STRSEP_STRIP
Definition: strings.h:255

Function Documentation

◆ __ast_str_helper()

int __ast_str_helper ( struct ast_str **  buf,
ssize_t  max_len,
int  append,
const char *  fmt,
va_list  ap,
const char *  file,
int  lineno,
const char *  function 
)

Core functionality of ast_str_(set|append)_va.

The arguments to this function are the same as those described for ast_str_set_va except for an addition argument, append. If append is non-zero, this will append to the current string instead of writing over it.

AST_DYNSTR_BUILD_RETRY is a legacy define. It should probably never again be used.

A return of AST_DYNSTR_BUILD_FAILED indicates a memory allocation error.

A return value greater than or equal to zero indicates the number of characters that have been written, not including the terminating '\0'. In the append case, this only includes the number of characters appended.

Note
This function should never need to be called directly. It should through calling one of the other functions or macros defined in this file.

core handler for dynamic strings. This is not meant to be called directly, but rather through the various wrapper macros ast_str_set(...) ast_str_append(...) ast_str_set_va(...) ast_str_append_va(...)

Definition at line 55 of file strings.c.

58 {
59  int res;
60  int added;
61  int need;
62  int offset = (append && (*buf)->__AST_STR_LEN) ? (*buf)->__AST_STR_USED : 0;
63  va_list aq;
64 
65  if (max_len < 0) {
66  max_len = (*buf)->__AST_STR_LEN; /* don't exceed the allocated space */
67  }
68 
69  do {
70  va_copy(aq, ap);
71  res = vsnprintf((*buf)->__AST_STR_STR + offset, (*buf)->__AST_STR_LEN - offset, fmt, aq);
72  va_end(aq);
73 
74  if (res < 0) {
75  /*
76  * vsnprintf write to string failed.
77  * I don't think this is possible with a memory buffer.
78  */
80  added = 0;
81  break;
82  }
83 
84  /*
85  * vsnprintf returns how much space we used or would need.
86  * Remember that vsnprintf does not count the nil terminator
87  * so we must add 1.
88  */
89  added = res;
90  need = offset + added + 1;
91  if (need <= (*buf)->__AST_STR_LEN
92  || (max_len && max_len <= (*buf)->__AST_STR_LEN)) {
93  /*
94  * There was enough room for the string or we are not
95  * allowed to try growing the string buffer.
96  */
97  break;
98  }
99 
100  /* Reallocate the buffer and try again. */
101  if (max_len == 0) {
102  /* unbounded, give more room for next time */
103  need += 16 + need / 4;
104  } else if (max_len < need) {
105  /* truncate as needed */
106  need = max_len;
107  }
108 
109  if (_ast_str_make_space(buf, need, file, lineno, function)) {
110  ast_log_safe(LOG_VERBOSE, "failed to extend from %d to %d\n",
111  (int) (*buf)->__AST_STR_LEN, need);
112 
114  break;
115  }
116  } while (1);
117 
118  /* Update space used, keep in mind truncation may be necessary. */
119  (*buf)->__AST_STR_USED = ((*buf)->__AST_STR_LEN <= offset + added)
120  ? (*buf)->__AST_STR_LEN - 1
121  : offset + added;
122 
123  /* Ensure that the string is terminated. */
124  (*buf)->__AST_STR_STR[(*buf)->__AST_STR_USED] = '\0';
125 
126  return res;
127 }
if(!yyg->yy_init)
Definition: ast_expr2f.c:868
char buf[BUFSIZE]
Definition: eagi_proxy.c:66
void ast_log_safe(int level, const char *file, int line, const char *function, const char *fmt,...)
Used for sending a log message with protection against recursion.
Definition: logger.c:2209
#define LOG_VERBOSE
int _ast_str_make_space(struct ast_str **buf, size_t new_len, const char *file, int lineno, const char *function)
Definition: strings.h:805

References _ast_str_make_space(), AST_DYNSTR_BUILD_FAILED, ast_log_safe(), buf, make_ari_stubs::file, if(), and LOG_VERBOSE.

◆ __ast_str_helper2()

char* __ast_str_helper2 ( struct ast_str **  buf,
ssize_t  max_len,
const char *  src,
size_t  maxsrc,
int  append,
int  escapecommas 
)

Definition at line 129 of file strings.c.

130 {
131  int dynamic = 0;
132  char *ptr = append ? &((*buf)->__AST_STR_STR[(*buf)->__AST_STR_USED]) : (*buf)->__AST_STR_STR;
133 
134  if (maxlen < 1) {
135  if (maxlen == 0) {
136  dynamic = 1;
137  }
138  maxlen = (*buf)->__AST_STR_LEN;
139  }
140 
141  while (*src && maxsrc && maxlen && (!escapecommas || (maxlen - 1))) {
142  if (escapecommas && (*src == '\\' || *src == ',')) {
143  *ptr++ = '\\';
144  maxlen--;
145  (*buf)->__AST_STR_USED++;
146  }
147  *ptr++ = *src++;
148  maxsrc--;
149  maxlen--;
150  (*buf)->__AST_STR_USED++;
151 
152  if ((ptr >= (*buf)->__AST_STR_STR + (*buf)->__AST_STR_LEN - 3) ||
153  (dynamic && (!maxlen || (escapecommas && !(maxlen - 1))))) {
154  char *oldbase = (*buf)->__AST_STR_STR;
155  size_t old = (*buf)->__AST_STR_LEN;
156  if (ast_str_make_space(buf, (*buf)->__AST_STR_LEN * 2)) {
157  /* If the buffer can't be extended, end it. */
158  break;
159  }
160  /* What we extended the buffer by */
161  maxlen = old;
162 
163  ptr += (*buf)->__AST_STR_STR - oldbase;
164  }
165  }
166  if (__builtin_expect(!maxlen, 0)) {
167  ptr--;
168  }
169  *ptr = '\0';
170  return (*buf)->__AST_STR_STR;
171 }
#define ast_str_make_space(buf, new_len)
Definition: strings.h:806

References ast_str_make_space, buf, and if().

Referenced by ast_str_append_substr(), ast_str_append_va(), ast_str_set_escapecommas(), and ast_str_set_substr().

◆ _ast_str_create()

struct ast_str * _ast_str_create ( size_t  init_len,
const char *  file,
int  lineno,
const char *  func 
)
inline

Definition at line 658 of file strings.h.

666 {

References buf.

◆ _ast_str_make_space()

int _ast_str_make_space ( struct ast_str **  buf,
size_t  new_len,
const char *  file,
int  lineno,
const char *  function 
)
inline

Make space in a new string (e.g. to read in data from a file)

Definition at line 805 of file strings.h.

811 {

Referenced by __ast_str_helper().

◆ ast_begins_with()

static int force_inline attribute_pure ast_begins_with ( const char *  str,
const char *  prefix 
)
static

Checks whether a string begins with another.

Since
12.0.0
Parameters
strString to check.
prefixPrefix to look for.
Return values
1if str begins with prefix
0otherwise.

Definition at line 97 of file strings.h.

98 {
99  ast_assert(str != NULL);
100  ast_assert(prefix != NULL);
101  while (*str == *prefix && *prefix != '\0') {
102  ++str;
103  ++prefix;
104  }
105  return *prefix == '\0';
106 }
const char * str
Definition: app_jack.c:147
static char prefix[MAX_PREFIX]
Definition: http.c:144
#define NULL
Definition: resample.c:96
#define ast_assert(a)
Definition: utils.h:734

References ast_assert, NULL, prefix, and str.

Referenced by aeap_create(), app_event_source_find(), assign_uuid(), ast_ari_callback(), ast_ari_get_docs(), ast_crypt(), ast_http_get_auth(), ast_sendtext_data(), AST_TEST_DEFINE(), cache_simple(), client_config_apply(), curl_public_key(), explicit_publish_cb(), extract_transferrer_headers(), func_headers_read2(), get_object_variables(), handle_slash(), handle_validate(), implicit_publish_cb(), moh_parse_options(), msg_send(), on_load_public_cert_url(), on_rx_process_symmetric_transport(), play_on_channel(), safe_mkdir(), sendtext_exec(), stasis_app_stored_recording_find_by_name(), state_id_by_topic(), and stir_shaken_incoming_request().

◆ ast_build_string()

int ast_build_string ( char **  buffer,
size_t *  space,
const char *  fmt,
  ... 
)

Build a string in a buffer, designed to be called repeatedly.

Note
This method is not recommended. New code should use ast_str_*() instead.

This is a wrapper for snprintf, that properly handles the buffer pointer and buffer space available.

Parameters
buffercurrent position in buffer to place string into (will be updated on return)
spaceremaining space in buffer (will be updated on return)
fmtprintf-style format string
Return values
0on success
non-zeroon failure.

Definition at line 2065 of file main/utils.c.

2066 {
2067  va_list ap;
2068  int result;
2069 
2070  va_start(ap, fmt);
2071  result = ast_build_string_va(buffer, space, fmt, ap);
2072  va_end(ap);
2073 
2074  return result;
2075 }
static PGresult * result
Definition: cel_pgsql.c:84
int ast_build_string_va(char **buffer, size_t *space, const char *fmt, va_list ap)
Build a string in a buffer, designed to be called repeatedly.
Definition: main/utils.c:2046

References ast_build_string_va(), and result.

Referenced by ast_fax_caps_to_str(), generate_filenames_string(), pp_each_extension_helper(), and pp_each_user_helper().

◆ ast_build_string_va()

int ast_build_string_va ( char **  buffer,
size_t *  space,
const char *  fmt,
va_list  ap 
)

Build a string in a buffer, designed to be called repeatedly.

This is a wrapper for snprintf, that properly handles the buffer pointer and buffer space available.

Return values
zeroon success.
non-zeroon failure.
Parameters
buffercurrent position in buffer to place string into (will be updated on return)
spaceremaining space in buffer (will be updated on return)
fmtprintf-style format string
apvarargs list of arguments for format

Definition at line 2046 of file main/utils.c.

2047 {
2048  int result;
2049 
2050  if (!buffer || !*buffer || !space || !*space)
2051  return -1;
2052 
2053  result = vsnprintf(*buffer, *space, fmt, ap);
2054 
2055  if (result < 0)
2056  return -1;
2057  else if (result > *space)
2058  result = *space;
2059 
2060  *buffer += result;
2061  *space -= result;
2062  return 0;
2063 }

References result.

Referenced by ast_build_string().

◆ ast_check_digits()

int ast_check_digits ( const char *  arg)
inline

Check if a string is only digits.

Return values
1The string contains only digits
0The string contains non-digit characters

Definition at line 1194 of file strings.h.

1203 {

Referenced by create_addr().

◆ ast_copy_string()

void ast_copy_string ( char *  dst,
const char *  src,
size_t  size 
)
inline

Size-limited null-terminating string copy.

Parameters
dstThe destination buffer.
srcThe source string
sizeThe size of the destination buffer

This is similar to strncpy, with two important differences:

  • the destination buffer will always be null-terminated
  • the destination buffer is not filled with zeros past the copied string length These differences make it slightly more efficient, and safer to use since it will not leave the destination buffer unterminated. There is no need to pass an artificially reduced buffer size to this function (unlike strncpy), and the buffer does not need to be initialized to zeroes prior to calling this function.

Definition at line 406 of file strings.h.

604 {

Referenced by __allocate_taskprocessor(), __analog_handle_event(), __analog_ss_thread(), __ast_channel_internal_alloc(), __ast_http_load(), __ast_http_post_load(), __ast_play_and_record(), __ast_sorcery_object_field_register(), __init_manager(), __schedule_action(), __set_address_from_contact(), __sip_alloc(), _ast_var_assign(), _get_mohbyname(), _iax2_show_peers_one(), _macro_exec(), _sip_show_peers_one(), _skinny_message_set(), _transmit_displayprinotify(), _transmit_displayprinotifyvar(), acf_channel_read(), acf_curlopt_helper(), acf_cut_exec(), acf_exception_read(), acf_faxopt_read(), acf_fetch(), acf_iaxvar_read(), acf_if(), acf_jabberreceive_read(), acf_odbc_read(), acf_sprintf(), acf_transaction_read(), acf_vm_info(), acl_new(), action_confbridgestartrecord(), action_originate(), action_playback_and_continue(), actual_load_config(), add_action_to_menu_entry(), add_cc_call_info_to_response(), add_diversion(), add_email_attachment(), add_exten_to_pattern_tree(), add_line(), add_menu_entry(), add_msid_to_stream(), add_realm_authentication(), add_redirect(), add_sdp(), add_sip_domain(), add_to_queue(), add_vm_recipients_from_string(), adsi_load(), adsi_message(), adsi_process(), alarmreceiver_exec(), alias_mailbox_mapping_create(), alloc_profile(), analog_call(), analog_hangup(), analog_ss_thread(), announce_request(), announce_thread(), answer_exec_enable(), aoc_create_ie_data(), aoc_create_ie_data_charging_rate(), aoc_parse_ie_charging_rate(), app_exec(), append_mailbox(), applicationmap_item_alloc(), apply_general_options(), apply_option(), apply_options_full(), ari_channels_handle_originate_with_id(), ast_aoc_s_add_rate_duration(), ast_aoc_s_add_rate_flat(), ast_aoc_s_add_rate_volume(), ast_aoc_set_association_number(), ast_aoc_set_currency_info(), ast_app_group_split_group(), ast_attended_transfer_message_add_app(), ast_attended_transfer_message_add_merge(), ast_blind_transfer_message_create(), ast_bridge_dtmf_hook(), ast_bridge_features_register(), ast_bucket_alloc(), ast_bucket_file_alloc(), ast_call_forward(), ast_callerid_merge(), ast_callerid_parse(), ast_callerid_split(), ast_category_rename(), ast_cc_extension_monitor_add_dialstring(), ast_cc_get_param(), ast_cdr_format_var(), ast_cdr_setuserfield(), ast_channel_context_set(), ast_channel_destructor(), ast_channel_exten_set(), ast_channel_get_cc_agent_type(), ast_channel_get_device_name(), ast_channel_internal_set_fake_ids(), ast_channel_macrocontext_set(), ast_channel_macroexten_set(), ast_context_find(), ast_devstate_prov_add(), ast_eivr_getvariable(), ast_escape(), ast_expr(), ast_frame_subclass2str(), ast_frame_type2str(), ast_func_read(), ast_get_enum(), ast_get_feature(), ast_get_hint(), ast_get_indication_zone(), ast_get_srv(), ast_get_txt(), ast_http_prefix(), ast_init_logger_for_socket_console(), ast_jb_conf_default(), ast_linear_stream(), ast_makesocket(), ast_media_cache_retrieve(), ast_media_cache_retrieve_metadata(), ast_moh_files_next(), ast_monitor_change_fname(), ast_monitor_start(), ast_msg_data_alloc(), ast_multi_channel_blob_add_channel(), ast_presence_state_prov_add(), ast_privacy_check(), ast_privacy_set(), ast_read_image(), ast_remove_hint(), ast_rtp_instance_set_channel_id(), ast_say_date_th(), ast_say_date_with_format_da(), ast_say_date_with_format_de(), ast_say_date_with_format_en(), ast_say_date_with_format_es(), ast_say_date_with_format_fr(), ast_say_date_with_format_gr(), ast_say_date_with_format_is(), ast_say_date_with_format_it(), ast_say_date_with_format_nl(), ast_say_date_with_format_pl(), ast_say_date_with_format_th(), ast_say_date_with_format_vi(), ast_say_date_with_format_zh(), ast_say_datetime_from_now_pt(), ast_say_datetime_th(), ast_say_enumeration_full_da(), ast_say_enumeration_full_de(), ast_say_enumeration_full_en(), ast_say_enumeration_full_is(), ast_say_enumeration_full_vi(), ast_say_number_full_cs(), ast_say_number_full_da(), ast_say_number_full_de(), ast_say_number_full_en_GB(), ast_say_number_full_es(), ast_say_number_full_fr(), ast_say_number_full_gr(), ast_say_number_full_hu(), ast_say_number_full_is(), ast_say_number_full_it(), ast_say_number_full_ja(), ast_say_number_full_nl(), ast_say_number_full_no(), ast_say_number_full_pt(), ast_say_number_full_ru(), ast_say_number_full_se(), ast_say_number_full_th(), ast_say_number_full_vi(), ast_say_number_full_zh(), ast_set_cc_agent_dialstring(), ast_set_cc_callback_macro(), ast_set_cc_callback_sub(), ast_setstate(), ast_sip_cli_traverse_objects(), ast_sip_create_rdata_with_contact(), ast_sip_dtmf_to_str(), ast_sip_get_default_from_user(), ast_sip_get_default_realm(), ast_sip_get_transport_name(), ast_sip_publish_client_get_user_from_uri(), ast_sip_publish_client_get_user_to_uri(), ast_sip_sched_task_get_name(), ast_sorcery_alloc(), ast_sorcery_object_fields_register(), AST_TEST_DEFINE(), ast_to_camel_case_delim(), ast_tryconnect(), ast_tzset(), ast_unregister_indication_country(), ast_var_channels_table(), ast_var_indications(), ast_var_indications_table(), ast_xmldoc_printable(), asterisk_daemon(), audiosocket_request(), auth_http_callback(), authenticate(), authenticate_verify(), begin_dial_channel(), blr_ebl(), bridge_agent_hold_push(), bridge_channel_internal_queue_attended_transfer(), bridge_channel_internal_queue_blind_transfer(), bridge_parking_push(), bridge_profile_alloc(), bucket_file_update_path(), bucket_file_wizard_retrieve(), bucket_wizard_retrieve(), build_conf(), build_context(), build_device(), build_gateway(), build_mapping(), build_peer(), build_reply_digest(), build_user(), cache_lookup(), cache_lookup_internal(), calendar_join_attendees(), calendar_query_result_exec(), callerid_feed(), callerid_feed_jp(), callerid_read(), category_set_sublevels(), cc_build_payload(), cc_generic_agent_init(), cdata(), cdr_generic_register(), cdr_object_create_public_records(), cdr_object_format_property(), cdr_object_format_var_internal(), cdr_object_update_party_b_userfield_cb(), cdr_read_callback(), chan_pjsip_add_hold(), chan_pjsip_incoming_response_update_cause(), change_password_realtime(), channel_do_masquerade(), channel_read_pjsip(), channel_read_rtp(), channel_snapshot_connected_create(), channel_snapshot_peer_create(), chararray_handler_fn(), check_match(), check_password(), check_peer_ok(), check_sip_domain(), cleanup_stale_contexts(), cli_channelstats_print_body(), cli_list_subscriptions_detail(), cli_show_subscriptions_detail(), common_exec(), compile_script(), complete_dpreply(), complete_indications(), conf_exec(), conf_run(), config_device(), config_line(), config_parse_variables(), config_pgsql(), config_text_file_load(), configure_local_rtp(), connectedline_read(), console_dial(), construct_pidf_body(), copy_error(), copy_menu_entry(), copy_message(), copy_via_headers(), create_addr(), create_addr_from_peer(), create_epa_entry(), create_followme_number(), create_parked_subscription_full(), create_queue_member(), create_vmaccount(), crement_function_read(), csv_quote(), cut_internal(), dahdi_call(), dahdi_func_read(), dahdi_handle_event(), dahdi_hangup(), dahdi_new(), dahdi_queryoption(), dahdi_show_channel(), dahdi_show_channels(), db_get_common(), device_state_cb(), device_state_notify_callbacks(), devstate_read(), dial_exec_full(), dialandactivatesub(), dialgroup_read(), dialout(), dictate_exec(), disa_exec(), dispatch_thread_handler(), dns_srv_alloc(), do_forward(), dtls_handler(), dtmf_store_framehook(), dump_addr(), dump_byte(), dump_datetime(), dump_int(), dump_ipaddr(), dump_prov_flags(), dump_prov_ies(), dump_samprate(), dump_short(), dump_versioned_codec(), dundi_answer_entity(), dundi_answer_query(), dundi_do_lookup(), dundi_do_precache(), dundi_do_query(), dundi_lookup_internal(), dundi_lookup_local(), dundi_precache_internal(), dundi_prop_precache(), dundi_query_eid_internal(), dundi_query_thread(), ebl_callback(), enum_query_read(), env_read(), epoch_to_exchange_time(), evt_gen_auth_method_not_allowed(), evt_gen_chal_resp_failed(), evt_gen_chal_sent(), evt_gen_failed_acl(), evt_gen_inval_acct_id(), evt_gen_inval_password(), evt_gen_inval_transport(), evt_gen_load_avg(), evt_gen_mem_limit(), evt_gen_req_bad_format(), evt_gen_req_no_support(), evt_gen_req_not_allowed(), evt_gen_session_limit(), evt_gen_successful_auth(), evt_gen_unexpected_addr(), extract_uri(), featuremap_get(), file_basename(), file_dirname(), file_extension_from_string(), filename_parse(), find_account(), find_agent_callbacks(), find_cache(), find_conf(), find_conf_realtime(), find_context(), find_context_locked(), find_engine(), find_line_by_name(), find_or_create(), find_queue_by_name_rt(), find_realtime_gw(), find_subchannel_and_lock(), find_subchannel_by_name(), find_user_realtime(), findmeexec(), format_log_json(), forward_message(), func_channel_read(), func_get_parkingslot_channel(), func_header_read(), function_enum(), function_iaxpeer(), function_ooh323_read(), function_realtime_read(), function_realtime_readdestroy(), function_sippeer(), gen_header(), general_get(), generate_uri(), get_also_info(), get_date(), get_destination(), get_domain(), get_esc_entry(), get_ipaddress(), get_name_and_number(), get_name_from_resource(), get_number_str_en(), get_ordinal_str_en(), get_pai(), get_rpid(), getdisplaybyname(), getflagbyname(), getkeybyname(), getstatebyname(), getsubbyname(), gettag(), global_read(), gosub_allocate_frame(), group_function_read(), h264_getjoint(), handle_cli_confbridge_show_bridge_profile(), handle_cli_confbridge_start_record(), handle_cli_iax2_show_cache(), handle_cli_iax2_show_users(), handle_cli_indication_add(), handle_cli_indication_show(), handle_cli_presencestate_list(), handle_command_response(), handle_common_options(), handle_dial_page(), handle_incoming(), handle_request_invite(), handle_response(), handle_response_publish(), handle_select_codec(), handle_select_language(), handle_setcallerid(), handle_setting(), hangupcause_keys_read(), hangupcause_read(), has_voicemail(), headers_to_vars(), iax2_ack_registry(), iax2_append_register(), iax2_exec(), iax2_getpeername(), iax2_register(), iax2_transfer(), iax_frame_subclass2str(), iax_parse_ies(), iax_process_template(), iax_template_copy(), iax_template_parse(), iftime(), inboxcount2(), incoming_in_dialog_request(), init_acf_query(), init_logger_chain(), init_profile(), init_state(), initreqprep(), inprocess_count(), jingle_action_session_terminate(), jingle_alloc(), jingle_outgoing_hook(), jingle_request(), join_conference_bridge(), join_queue(), key_dial_page(), key_favorite(), key_history(), key_main_page(), key_select_extension(), key_select_language(), leave_voicemail(), link_topic_proxy(), listfilter(), load_asterisk_conf(), load_config(), load_module(), load_modules(), load_moh_classes(), load_mysql_config(), load_odbc_config(), load_password(), load_pktccops_config(), load_realtime_rules(), load_values_config(), load_zonemessages(), local_alloc(), lock_read(), log_events(), lookup_iface(), make_email_file(), make_filename(), make_fn(), manager_set_defaults(), math(), mbl_load_adapter(), mbl_load_device(), media_request_helper(), menu_alloc(), message_template_build(), message_template_create(), message_template_parse_filebody(), mgcp_call(), mgcp_request(), mgcp_ss(), minivm_accmess_exec(), minivm_account_func_read(), minivm_delete_exec(), minivm_greet_exec(), minivm_mwi_exec(), minivm_notify_exec(), mkintf(), moh_files_alloc(), moh_parse_options(), moh_scan_files(), msg_data_func_read(), msg_func_read(), my_distinctive_ring(), my_get_callerid(), named_acl_alloc(), named_acl_find(), netconsole(), new_category(), notify_new_message(), notify_option_alloc(), notify_option_handler(), odbc_log(), onOutgoingCall(), ooh323_alloc(), ooh323_call(), ooh323_onReceivedSetup(), ooh323_request(), open_mailbox(), osp_check_destination(), osp_convert_inout(), osp_convert_outin(), osp_create_provider(), osp_create_transaction(), osp_lookup(), osp_report_qos(), ospfinished_exec(), osplookup_exec(), page_exec(), parking_park_call(), parse_bookmark(), parse_config(), parse_moved_contact(), parse_naptr(), parse_ok_contact(), parse_options(), parse_sip_options(), parse_tag(), parse_tone_zone(), pbx_builtin_saynumber(), pbx_builtin_sayordinal(), pbx_extension_helper(), pbx_load_config(), pbx_load_users(), pbx_retrieve_variable(), pbx_substitute_variables_helper_full_location(), peer_status(), pgsql_reconnect(), pickup_get(), pjsip_acf_dial_contacts_read(), pjsip_set_logger_pcap(), pktccops_show_cmtses(), pktccops_show_gates(), play_message_by_id(), play_record_review(), populate_defaults(), presence_read(), presence_state_notify_callbacks(), private_enum_init(), process_dahdi(), process_precache(), process_request(), process_sdp_o(), profile_set_param(), prometheus_metric_create(), proxy_from_config(), publisher_start(), queue_exec(), queue_function_queuegetchannel(), queue_set_param(), quote(), rcv_mac_addr(), read_header(), read_headers(), read_password_from_file(), realtime_common(), realtime_peer(), realtime_peer_by_addr(), realtime_switch_common(), realtime_update_peer(), realtimefield_read(), receive_ademco_event(), receive_message(), record_exec(), redirecting_read(), refer_incoming_blind_request(), register_exten(), register_peer_exten(), register_verify(), registrar_contact_delete(), registry_rerequest(), reload_config(), reload_followme(), reload_module(), reload_queue_rules(), reload_single_member(), remove_from_queue(), reply_digest(), reqprep(), reschedule_precache(), reset_user_pw(), respprep(), ring_entry(), rt_extend_conf(), rt_handle_member_record(), run_externnotify(), save_dialstatus(), sendmail(), sendpage(), set(), set_asterisk_conf_path(), set_callforwards(), set_config(), set_destination(), set_insecure_flags(), set_message_vars_from_req(), set_next_mime_type(), set_queue_member_pause(), set_socket_path(), setsubstate(), setup_bridge_role(), setup_filestack(), setup_mixmonitor(), setup_privacy_args(), shared_read(), show_entry_history(), show_phone_number(), sip_acf_channel_read(), sip_call(), sip_cc_agent_init(), sip_cli_notify(), sip_find_peer_full(), sip_get_cc_information(), sip_parse_register_line(), sip_poke_peer(), sip_prepare_socket(), sip_prune_realtime(), sip_queryoption(), sip_report_chal_sent(), sip_report_failed_challenge_response(), sip_request_call(), sip_route_add(), sip_show_inuse(), sip_sipredirect(), sip_subscribe_mwi(), sip_subscription_to_ami(), skinny_call(), skinny_device_alloc(), skinny_register(), skinny_request(), smdi_load(), smdi_read(), sms_exec(), sms_handleincoming(), sms_handleincoming_proto2(), sms_writefile(), socket_process_helper(), socket_read(), softhangup_exec(), sorcery_object_type_alloc(), spawn_dp_lookup(), spawn_mp3(), speech_grammar(), speech_score(), speech_text(), stasis_app_control_continue(), stat_read(), store_tone_zone_ring_cadence(), subscription_change_alloc(), subscription_established(), subscription_get_generator_from_rdata(), subscription_persistence_update(), substring(), temp_peer(), term_color(), timeout_read(), timezone_add(), transmit_callinfo(), transmit_callinfo_variable(), transmit_cfwdstate(), transmit_connect(), transmit_connect_with_sdp(), transmit_dialednumber(), transmit_displaynotify(), transmit_displaypromptstatus(), transmit_displaypromptstatusvar(), transmit_modify_request(), transmit_modify_with_sdp(), transmit_notify_request(), transmit_notify_request_with_callerid(), transmit_refer(), transmit_speeddialstatres(), transmit_state_notify(), transmit_versionres(), try_calling(), try_load_key(), trylock_read(), txt_callback(), unistim_request(), unistim_sp(), unistim_ss(), unlock_read(), unregister_exten(), update_call_counter(), update_our_aliases(), uridecode(), user_profile_alloc(), vm_authenticate(), vm_change_password(), vm_change_password_shell(), vm_execmain(), vm_mailbox_snapshot_create(), vm_msg_forward(), vm_msg_move(), vm_msg_remove(), vmauthenticate(), wait_for_answer(), wait_for_winner(), while(), write_history(), write_metadata(), xfer_get(), xmpp_client_alloc(), xmpp_client_create_buddy(), xmpp_pak_message(), and xmpp_pak_presence().

◆ ast_ends_with()

static int force_inline attribute_pure ast_ends_with ( const char *  str,
const char *  suffix 
)
static

Checks whether a string ends with another.

Since
12.0.0
Parameters
strString to check.
suffixSuffix to look for.
Return values
1if str ends with suffix
0otherwise.

Definition at line 116 of file strings.h.

117 {
118  size_t str_len;
119  size_t suffix_len;
120 
121  ast_assert(str != NULL);
122  ast_assert(suffix != NULL);
123  str_len = strlen(str);
124  suffix_len = strlen(suffix);
125 
126  if (suffix_len > str_len) {
127  return 0;
128  }
129 
130  return strcmp(str + str_len - suffix_len, suffix) == 0;
131 }

References ast_assert, NULL, and str.

Referenced by ast_ari_callback(), ast_sip_cli_traverse_objects(), AST_TEST_DEFINE(), and format_log_message_ap().

◆ ast_escape()

char* ast_escape ( char *  dest,
const char *  s,
size_t  size,
const char *  to_escape 
)

Escape the 'to_escape' characters in the given string.

Note
The given output buffer will contain a truncated escaped version of the source string if the given buffer is not large enough.
Parameters
destthe escaped string
sthe source string to escape
sizeThe size of the destination buffer
to_escapean array of characters to escape
Returns
Pointer to the destination.

Definition at line 1932 of file main/utils.c.

1933 {
1934  char *p;
1935  char *c;
1936 
1937  if (!dest || !size) {
1938  return dest;
1939  }
1940  if (ast_strlen_zero(s)) {
1941  *dest = '\0';
1942  return dest;
1943  }
1944 
1945  if (ast_strlen_zero(to_escape)) {
1946  ast_copy_string(dest, s, size);
1947  return dest;
1948  }
1949 
1950  for (p = dest; *s && --size; ++s, ++p) {
1951  /* If in the list of characters to escape then escape it */
1952  if (strchr(to_escape, *s)) {
1953  if (!--size) {
1954  /* Not enough room left for the escape sequence. */
1955  break;
1956  }
1957 
1958  /*
1959  * See if the character to escape is part of the standard escape
1960  * sequences. If so we'll have to use its mapped counterpart
1961  * otherwise just use the current character.
1962  */
1963  c = strchr(escape_sequences, *s);
1964  *p++ = '\\';
1965  *p = c ? escape_sequences_map[c - escape_sequences] : *s;
1966  } else {
1967  *p = *s;
1968  }
1969  }
1970  *p = '\0';
1971 
1972  return dest;
1973 }
char escape_sequences[]
Definition: main/utils.c:1920
static char escape_sequences_map[]
Definition: main/utils.c:1928
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition: strings.h:65
void ast_copy_string(char *dst, const char *src, size_t size)
Size-limited null-terminating string copy.
Definition: strings.h:406
static struct test_val c

References ast_copy_string(), ast_strlen_zero(), c, escape_sequences, and escape_sequences_map.

Referenced by ast_escape_alloc().

◆ ast_escape_alloc()

char* ast_escape_alloc ( const char *  s,
const char *  to_escape 
)

Escape the 'to_escape' characters in the given string.

Note
Caller is responsible for freeing the returned string
Parameters
sthe source string to escape
to_escapean array of characters to escape
Returns
Pointer to the escaped string or NULL.

Definition at line 2030 of file main/utils.c.

2031 {
2032  size_t size = 0;
2033  char *dest = escape_alloc(s, &size);
2034 
2035  return ast_escape(dest, s, size, to_escape);
2036 }
char * ast_escape(char *dest, const char *s, size_t size, const char *to_escape)
Escape the 'to_escape' characters in the given string.
Definition: main/utils.c:1932
static char * escape_alloc(const char *s, size_t *size)
Definition: main/utils.c:2016

References ast_escape(), and escape_alloc().

◆ ast_escape_c()

char* ast_escape_c ( char *  dest,
const char *  s,
size_t  size 
)

Escape standard 'C' sequences in the given string.

Note
The given output buffer will contain a truncated escaped version of the source string if the given buffer is not large enough.
Parameters
destthe escaped string
sthe source string to escape
sizeThe size of the destination buffer
Returns
Pointer to the escaped string.

Definition at line 1975 of file main/utils.c.

1976 {
1977  /*
1978  * Note - This is an optimized version of ast_escape. When looking only
1979  * for escape_sequences a couple of checks used in the generic case can
1980  * be left out thus making it slightly more efficient.
1981  */
1982  char *p;
1983  char *c;
1984 
1985  if (!dest || !size) {
1986  return dest;
1987  }
1988  if (ast_strlen_zero(s)) {
1989  *dest = '\0';
1990  return dest;
1991  }
1992 
1993  for (p = dest; *s && --size; ++s, ++p) {
1994  /*
1995  * See if the character to escape is part of the standard escape
1996  * sequences. If so use its mapped counterpart.
1997  */
1998  c = strchr(escape_sequences, *s);
1999  if (c) {
2000  if (!--size) {
2001  /* Not enough room left for the escape sequence. */
2002  break;
2003  }
2004 
2005  *p++ = '\\';
2007  } else {
2008  *p = *s;
2009  }
2010  }
2011  *p = '\0';
2012 
2013  return dest;
2014 }

References ast_strlen_zero(), c, escape_sequences, and escape_sequences_map.

Referenced by ast_escape_c_alloc().

◆ ast_escape_c_alloc()

char* ast_escape_c_alloc ( const char *  s)

Escape standard 'C' sequences in the given string.

Note
Caller is responsible for freeing the returned string
Parameters
sthe source string to escape
Returns
Pointer to the escaped string or NULL.

Definition at line 2038 of file main/utils.c.

2039 {
2040  size_t size = 0;
2041  char *dest = escape_alloc(s, &size);
2042 
2043  return ast_escape_c(dest, s, size);
2044 }
char * ast_escape_c(char *dest, const char *s, size_t size)
Escape standard 'C' sequences in the given string.
Definition: main/utils.c:1975

References ast_escape_c(), and escape_alloc().

Referenced by ast_manager_build_channel_state_string_prefix(), channel_new_callerid(), presence_state_to_ami(), and varset_to_ami().

◆ ast_false()

int attribute_pure ast_false ( const char *  val)

Make sure something is false. Determine if a string containing a boolean value is "false". This function checks to see whether a string passed to it is an indication of an "false" value. It checks to see if the string is "no", "false", "n", "f", "off" or "0".

Return values
-1if "true".
0otherwise, like NUL pointer.

Definition at line 2114 of file main/utils.c.

2115 {
2116  if (ast_strlen_zero(s))
2117  return 0;
2118 
2119  /* Determine if this is a false value */
2120  if (!strcasecmp(s, "no") ||
2121  !strcasecmp(s, "false") ||
2122  !strcasecmp(s, "n") ||
2123  !strcasecmp(s, "f") ||
2124  !strcasecmp(s, "0") ||
2125  !strcasecmp(s, "off"))
2126  return -1;
2127 
2128  return 0;
2129 }

References ast_strlen_zero().

Referenced by acf_transaction_write(), actual_load_config(), announce_user_count_all_handler(), aoc_cli_debug_enable(), bool_handler_fn(), boolflag_handler_fn(), build_peer(), build_user(), check_debug(), find_realtime(), function_ooh323_write(), handle_common_options(), init_acf_query(), load_config(), manager_mute_mixmonitor(), manager_queue_member_ringinuse(), parking_feature_flag_cfg(), parse_empty_options(), prack_handler(), process_config(), process_dahdi(), read_pjproject_startup_options(), reload_config(), reload_single_member(), rt_handle_member_record(), rtp_reload(), set_config(), set_insecure_flags(), sip_parse_nat_option(), sla_build_trunk(), strings_to_mask(), and timers_handler().

◆ ast_generate_random_string()

char* ast_generate_random_string ( char *  buf,
size_t  size 
)

Create a pseudo-random string of a fixed length.

This function is useful for generating a string whose randomness does not need to be across all time and space, does not need to be cryptographically secure, and needs to fit in a limited space.

This function will write a null byte at the final position in the buffer (buf[size - 1]). So if you pass in a size of 10, then this will generate a random 9-character string.

Parameters
bufBuffer to write random string into.
sizeThe size of the buffer.
Returns
A pointer to buf

Definition at line 227 of file strings.c.

228 {
229  int i;
230 
231  for (i = 0; i < size - 1; ++i) {
232  buf[i] = 'a' + (ast_random() % 26);
233  }
234  buf[i] = '\0';
235 
236  return buf;
237 }
long int ast_random(void)
Definition: main/utils.c:2210

References ast_random(), and buf.

Referenced by add_rlmi_resource(), create_multipart_body(), generate_content_id_hdr(), and sip_outbound_registration_regc_alloc().

◆ ast_get_time_t()

int ast_get_time_t ( const char *  src,
time_t *  dst,
time_t  _default,
int *  consumed 
)

Parse a time (integer) string.

Parameters
srcString to parse
dstDestination
_defaultValue to use if the string does not contain a valid time
consumedThe number of characters 'consumed' in the string by the parse (see 'man sscanf' for details)
Return values
zeroon success.
non-zeroon failure.

Parse a time (integer) string.

Definition at line 2344 of file main/utils.c.

2345 {
2346  long t;
2347  int scanned;
2348 
2349  if (dst == NULL)
2350  return -1;
2351 
2352  *dst = _default;
2353 
2354  if (ast_strlen_zero(src))
2355  return -1;
2356 
2357  /* only integer at the moment, but one day we could accept more formats */
2358  if (sscanf(src, "%30ld%n", &t, &scanned) == 1) {
2359  *dst = t;
2360  if (consumed)
2361  *consumed = scanned;
2362  return 0;
2363  } else
2364  return -1;
2365 }

References ast_strlen_zero(), and NULL.

Referenced by build_peer(), cache_lookup_internal(), dundi_show_cache(), handle_saydatetime(), load_password(), play_message_datetime(), process_clearcache(), realtime_peer(), and sayunixtime_exec().

◆ ast_get_timeval()

int ast_get_timeval ( const char *  src,
struct timeval *  dst,
struct timeval  _default,
int *  consumed 
)

Parse a time (float) string.

Parameters
srcString to parse
dstDestination
_defaultValue to use if the string does not contain a valid time
consumedThe number of characters 'consumed' in the string by the parse (see 'man sscanf' for details)
Return values
zeroon success.
non-zeroon failure.

Parse a time (float) string.

Definition at line 2317 of file main/utils.c.

2318 {
2319  long double dtv = 0.0;
2320  int scanned;
2321 
2322  if (dst == NULL)
2323  return -1;
2324 
2325  *dst = _default;
2326 
2327  if (ast_strlen_zero(src))
2328  return -1;
2329 
2330  /* only integer at the moment, but one day we could accept more formats */
2331  if (sscanf(src, "%30Lf%n", &dtv, &scanned) > 0) {
2332  dst->tv_sec = dtv;
2333  dst->tv_usec = (dtv - dst->tv_sec) * 1000000.0;
2334  if (consumed)
2335  *consumed = scanned;
2336  return 0;
2337  } else
2338  return -1;
2339 }

References ast_strlen_zero(), and NULL.

Referenced by acf_strftime(), expiration_str2struct(), persistence_expires_str2struct(), and timeval_str2struct().

◆ ast_in_delimited_string()

int ast_in_delimited_string ( const char *  needle,
const char *  haystack,
char  delim 
)

Check if there is an exact match for 'needle' between delimiters in 'haystack'.

Note
This will skip extra leading spaces between delimiters.
Parameters
needleThe string to search for
haystackThe string searched in
delimThe haystack delimiter
Return values
trueIf an exact match for needle is in haystack.
falseotherwise

Definition at line 434 of file strings.c.

435 {
436  const char *end;
437  unsigned long needle_size;
438 
439  ast_assert(haystack != NULL);
440 
441  if (!needle) {
442  return 0;
443  }
444 
445  needle_size = strlen(needle);
446  haystack = ast_skip_blanks(haystack);
447 
448  while ((end = strchr(haystack, delim))) {
449  if (needle_size == end - haystack && !strncmp(haystack, needle, needle_size)) {
450  return 1;
451  }
452  haystack = ast_skip_blanks(end + 1);
453  }
454 
455  return strcmp(haystack, needle) ? 0 : -1;
456 }
char * end
Definition: eagi_proxy.c:73
char * ast_skip_blanks(const char *str)
Gets a pointer to the first non-whitespace character in a string.
Definition: strings.h:161

References ast_assert, ast_skip_blanks(), end, and NULL.

Referenced by __ast_manager_event_multichan(), ast_json_object_create_vars(), and AST_TEST_DEFINE().

◆ ast_join_delim()

void ast_join_delim ( char *  s,
size_t  len,
const char *const  w[],
unsigned int  size,
char  delim 
)

Join an array of strings into a single string.

Parameters
sthe resulting string buffer
lenthe length of the result buffer, s
wan array of strings to join.
sizethe number of elements to join
delimdelimiter between elements

This function will join all of the strings in the array 'w' into a single string. It will also place 'delim' in the result buffer in between each string from 'w'.

Since
12

Definition at line 2276 of file main/utils.c.

2277 {
2278  int x, ofs = 0;
2279  const char *src;
2280 
2281  /* Join words into a string */
2282  if (!s)
2283  return;
2284  for (x = 0; ofs < len && x < size && w[x] ; x++) {
2285  if (x > 0)
2286  s[ofs++] = delim;
2287  for (src = w[x]; *src && ofs < len; src++)
2288  s[ofs++] = *src;
2289  }
2290  if (ofs == len)
2291  ofs--;
2292  s[ofs] = '\0';
2293 }
static int len(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t buflen)

References len().

Referenced by ast_sip_auths_to_str().

◆ ast_read_line_from_buffer()

char* ast_read_line_from_buffer ( char **  buffer)

Read lines from a string buffer.

Since
13.18.0
Parameters
[in,out]bufferA pointer to a char * string with either Unix or Windows line endings
Returns
The "next" line
Warning
The original string and *buffer will be modified.

Both '\n' and '\r\n' are treated as single delimiters but consecutive occurrences of the delimiters are NOT considered to be a single delimiter. This preserves blank lines in the input.

macOS line endings ('\r') are not supported at this time.

Definition at line 372 of file strings.c.

373 {
374  char *start = *buffer;
375 
376  if (!buffer || !*buffer || *(*buffer) == '\0') {
377  return NULL;
378  }
379 
380  while (*(*buffer) && *(*buffer) != '\n' ) {
381  (*buffer)++;
382  }
383 
384  *(*buffer) = '\0';
385  if (*(*buffer - 1) == '\r') {
386  *(*buffer - 1) = '\0';
387  }
388  (*buffer)++;
389 
390  return start;
391 }

References NULL.

Referenced by parse_simple_message_summary().

◆ ast_regex_string_to_regex_pattern()

int ast_regex_string_to_regex_pattern ( const char *  regex_string,
struct ast_str **  regex_pattern 
)

Given a string regex_string in the form of "/regex/", convert it into the form of "regex".

This function will trim one leading / and one trailing / from a given input string ast_str regex_pattern must be preallocated before calling this function

Return values
0on success, non-zero on failure.
1if we only stripped a leading /
2if we only stripped a trailing /
3if we did not strip any / characters
Parameters
regex_stringthe string containing /regex/
regex_patternthe destination ast_str which will contain "regex" after execution

Definition at line 2077 of file main/utils.c.

2078 {
2079  int regex_len = strlen(regex_string);
2080  int ret = 3;
2081 
2082  /* Chop off the leading / if there is one */
2083  if ((regex_len >= 1) && (regex_string[0] == '/')) {
2084  ast_str_set(regex_pattern, 0, "%s", regex_string + 1);
2085  ret -= 2;
2086  }
2087 
2088  /* Chop off the ending / if there is one */
2089  if ((regex_len > 1) && (regex_string[regex_len - 1] == '/')) {
2090  ast_str_truncate(*regex_pattern, -1);
2091  ret -= 1;
2092  }
2093 
2094  return ret;
2095 }
char * ast_str_truncate(struct ast_str *buf, ssize_t len)
Truncates the enclosed string to the given length.
Definition: strings.h:764
int ast_str_set(struct ast_str **buf, ssize_t max_len, const char *fmt,...)
Set a dynamic string using variable arguments.
Definition: strings.h:1091

References ast_str_set(), and ast_str_truncate().

Referenced by action_hangup(), mwi_mailbox_delete(), and mwi_mailbox_get().

◆ ast_skip_blanks()

char * ast_skip_blanks ( const char *  str)
inline

◆ ast_skip_nonblanks()

char * ast_skip_nonblanks ( const char *  str)
inline

Gets a pointer to first whitespace character in a string.

Parameters
strthe input string
Returns
a pointer to the first whitespace character

Definition at line 204 of file strings.h.

217 {

References ast_skip_blanks(), and ast_trim_blanks().

Referenced by __ast_cli_register(), determine_firstline_parts(), handle_response(), httpd_process_request(), and remove_excess_lws().

◆ ast_str_append()

int ast_str_append ( struct ast_str **  buf,
ssize_t  max_len,
const char *  fmt,
  ... 
)
inline

Append to a thread local dynamic string.

Note
Care should be taken when using this function. The function can result in reallocating the ast_str. If a pointer to the ast_str is passed by value to a function that calls ast_str_append(), then the original ast_str pointer may be invalidated due to a reallocation.

The arguments, return values, and usage of this function are the same as ast_str_set(), but the new data is appended to the current value.

Definition at line 1117 of file strings.h.

1168 { \

Referenced by __ast_format_cap_get_names(), __manager_event_sessions_va(), __test_cel_generate_peer_str(), _ast_xmldoc_build_seealso(), acf_curl_helper(), acf_odbc_read(), action_agents(), action_createconfig(), action_userevent(), active_channels_to_str_cb(), add_allow_header(), add_blank(), add_bundle_groups(), add_codec_to_sdp(), add_content(), add_dtls_to_sdp(), add_header(), add_ice_to_sdp(), add_ice_to_stream(), add_noncodec_to_sdp(), add_required_respheader(), add_rpid(), add_tcodec_to_sdp(), add_vcodec_to_sdp(), agent_handle_show_specific(), ami_outbound_registration_task(), ami_registrations_aor(), aoc_amount_str(), aoc_d_event(), aoc_e_event(), aoc_request_event(), aoc_s_event(), aoc_time_str(), app_exec(), append_channel_vars(), append_event_str_single(), append_json_single(), append_var_and_value_to_filter(), ari_channels_handle_originate_with_id(), ast_aoc_decoded2str(), ast_apply_acl(), ast_ari_callback(), ast_ari_channels_create(), ast_ari_get_docs(), ast_ari_json_format(), ast_ari_recordings_get_stored_file(), ast_ari_response_created(), ast_category_get_templates(), ast_cdr_serialize_variables(), ast_eivr_getvariable(), ast_get_character_str(), ast_get_digit_str(), ast_get_money_en_dollars_str(), ast_get_phonetic_str(), ast_ha_join(), ast_json_ipaddr(), ast_log_backtrace(), ast_logger_get_channels(), ast_manager_build_bridge_state_string_prefix(), ast_manager_build_channel_state_string_prefix(), ast_monitor_stop(), ast_odbc_print_errors(), ast_print_namedgroups(), ast_realtime_encode_chunk(), ast_rtp_lookup_mime_multiple2(), ast_sched_report(), ast_sip_cli_print_sorcery_objectset(), ast_sip_cli_traverse_objects(), ast_sip_contact_to_str(), ast_sip_create_ami_event(), ast_sip_format_contact_ami(), ast_sip_sorcery_object_to_ami(), ast_statsd_log_string(), ast_str_append_event_header(), ast_str_encode_mime(), ast_str_quote(), ast_str_substitute_variables_full(), ast_stream_codec_prefs_parse(), ast_stream_codec_prefs_to_str(), ast_stream_create_resolved(), ast_stream_to_str(), ast_stream_topology_to_str(), ast_strings_match(), ast_term_color_code(), AST_TEST_DEFINE(), ast_translate_path_to_str(), ast_variable_list_join(), ast_xmldoc_printable(), astman_send_list_complete(), astman_send_list_complete_start_common(), astman_send_response_full(), attended_transfer_to_ami(), auth_http_callback(), authority_to_str(), build_nonce(), build_notify(), build_path_data(), build_peer(), caldav_get_events_between(), caldav_write_event(), calendar_join_attendees(), CB_ADD(), CB_ADD_LEN(), cc_unique_append(), cdata(), cel_generate_peer_str(), celt_cmp(), chanavail_exec(), channel_fax_cb(), channel_hangup_request_cb(), channel_mixmonitor_mute_cb(), cli_alias_passthrough(), cli_aor_print_body(), cli_aor_print_header(), cli_channel_print_body(), cli_channel_print_header(), cli_channelstats_print_body(), cli_channelstats_print_header(), cli_contact_print_body(), cli_contact_print_header(), cli_endpoint_print_header(), cli_print_body(), cli_print_header(), cli_prompt(), cli_show_subscription_common(), cli_unid_print_header(), codec_append_name(), collect_names_cb(), config_odbc(), construct_pidf_body(), contactstatus_to_ami(), create_lookup_filter(), curl_write_string_callback(), cut_internal(), dbl_list_expect_forward(), dbl_list_expect_reverse(), derive_category_text(), destroy_curl(), destroy_mysql(), destroy_odbc(), destroy_pgsql(), detect_disconnect(), dump_queue_members(), encmethods_to_str(), epoch_to_exchange_time(), ewscal_write_event(), exchangecal_get_events_between(), exchangecal_write_event(), fetch_response_reader(), file2display(), finalize_content(), find_aor(), format_ami_aor_handler(), format_ami_auth_handler(), format_ami_contactlist_handler(), format_ami_endpoints(), format_log_message_ap(), format_str_append_auth(), func_headers_read2(), function_realtime_read(), function_realtime_readdestroy(), g729_generate_sdp_fmtp(), generate_status(), generate_uri(), generic_http_callback(), get_content(), get_number_str_en(), get_ordinal_str_en(), h263_generate_sdp_fmtp(), h264_generate_sdp_fmtp(), handle_characters(), handle_cli_indication_show(), handle_manager_show_events(), handle_missing_table(), handle_options(), handle_request_refer(), handle_show_translation_path(), handle_show_translation_table(), handle_showchan(), hashkeys_read2(), http_callback(), httpstatus_callback(), ilbc_generate_sdp_fmtp(), initreqprep(), jack_str(), list_expect(), list_item_to_str(), listfilter(), load_column_config(), load_config(), load_modules(), local_message_to_ami(), log_action(), log_jack_status(), logger_add_verbose_magic(), manager_json_value_str_append(), manager_sipnotify(), meetme_cmd_helper(), multi_object_blob_to_ami(), mwi_generate_body_content(), mwi_subscription_mailboxes_str(), mwi_to_ami(), odbc_log(), opus_generate_sdp_fmtp(), pbx_builtin_serialize_variables(), peerstatus_to_ami(), pgsql_log(), pgsql_reconnect(), phoneprov_callback(), pjsip_acf_dial_contacts_read(), pp_each_extension_helper(), pp_each_user_helper(), print_queue(), print_uptimestr(), process_description_file(), process_output(), process_text_line(), prometheus_metric_full_to_string(), prometheus_metric_to_string(), realtime_curl(), realtime_directory(), realtime_multi_curl(), realtime_multi_mysql(), realtime_multi_odbc(), realtime_multi_pgsql(), realtime_mysql(), realtime_odbc(), realtime_pgsql(), realtime_sqlite3_destroy(), realtime_sqlite3_helper(), realtime_sqlite3_store(), realtime_sqlite3_update(), realtime_sqlite3_update2(), realtimefield_read(), require_curl(), rtcp_report_to_ami(), run_station(), send_eivr_event(), send_identify_ami_event(), set_outbound_authentication_credentials(), set_rec_filename(), set_var_to_str(), silk_cmp(), sip_aor_to_ami(), sip_cli_notify(), sip_cli_print_global(), sip_cli_print_system(), sip_endpoint_to_ami(), sip_endpoints_aors_ami(), sip_route_list(), sip_rtp_read(), sip_sorcery_object_ami_set_type_name(), sip_subscription_to_ami(), sip_tcptls_read(), siren14_generate_sdp_fmtp(), siren7_generate_sdp_fmtp(), spandsp_manager_fax_session(), stasis_app_control_snoop(), state_notify_build_xml(), store_curl(), store_mysql(), store_odbc(), store_pgsql(), str_appender(), strbetween(), strreplace(), substitute_escapes(), test_core_format_generate_sdp_fmtp(), to_ami(), transmit_info_with_aoc(), transmit_notify_with_mwi(), update2_curl(), update2_mysql(), update2_pgsql(), update2_prepare(), update_curl(), update_mysql(), update_odbc(), update_pgsql(), user_authority_to_str(), vp8_generate_sdp_fmtp(), websocket_client_parse_uri(), write_cdr(), write_cel(), xml_copy_escape(), xml_encode_str(), xml_translate(), xmldoc_get_syntax_cmd(), xmldoc_get_syntax_config_object(), xmldoc_get_syntax_manager(), xmldoc_parse_argument(), xmldoc_parse_cmd_enumlist(), xmldoc_parse_enumlist(), xmldoc_parse_example(), xmldoc_parse_info(), xmldoc_parse_option(), xmldoc_parse_optionlist(), xmldoc_parse_para(), xmldoc_parse_parameter(), xmldoc_parse_specialtags(), xmldoc_parse_variable(), xmldoc_parse_variablelist(), xmldoc_string_cleanup(), and xmldoc_string_wrap().

◆ ast_str_append_escapecommas()

char * ast_str_append_escapecommas ( struct ast_str **  buf,
ssize_t  maxlen,
const char *  src,
size_t  maxsrc 
)
inline

Append a non-NULL terminated substring to the end of a dynamic string, with escaping of commas.

Definition at line 1054 of file strings.h.

1081 {

References ast_str_set_va(), and buf.

Referenced by acf_odbc_read().

◆ ast_str_append_substr()

char * ast_str_append_substr ( struct ast_str **  buf,
ssize_t  maxlen,
const char *  src,
size_t  maxsrc 
)
inline

Append a non-NULL terminated substring to the end of a dynamic string.

Definition at line 1040 of file strings.h.

1044 {

References __ast_str_helper2(), and buf.

Referenced by ast_str_substitute_variables_full(), file_read(), listfilter(), logger_add_verbose_magic(), write_to_ast_str(), and WriteMemoryCallback().

◆ ast_str_append_va()

int ast_str_append_va ( struct ast_str **  buf,
ssize_t  max_len,
const char *  fmt,
va_list  ap 
)
inline

Append to a dynamic string using a va_list.

Same as ast_str_set_va(), but append to the current content.

Note
Care should be taken when using this function. The function can result in reallocating the ast_str. If a pointer to the ast_str is passed by value to a function that calls ast_str_append_va(), then the original ast_str pointer may be invalidated due to a reallocation.
Parameters
buf,max_len,fmt,ap

Definition at line 1026 of file strings.h.

1030 {

References __ast_str_helper2(), and buf.

Referenced by __manager_event_sessions_va(), and ast_str_set().

◆ ast_str_buffer()

char * ast_str_buffer ( const struct ast_str buf)
inline

Returns the string buffer within the ast_str buf.

Parameters
bufA pointer to the ast_str structure.
Returns
A pointer to the enclosed string.

Definition at line 739 of file strings.h.

751 {

References buf, len(), and typeof().

Referenced by __ast_format_cap_get_names(), __manager_event_sessions_va(), __queues_show(), __sip_pretend_ack(), __sip_semi_ack(), __sip_xmit(), _ast_xmldoc_build_arguments(), _ast_xmldoc_build_seealso(), _iax2_show_peers_one(), _macro_exec(), _sip_show_peer(), _sip_tcp_helper_thread(), _xmldoc_build_field(), acf_curl_exec(), acf_curl_helper(), acf_cut_exec(), acf_odbc_read(), acf_odbc_write(), action_agents(), action_confbridgelist_item(), action_coreshowchannels(), action_createconfig(), action_getconfig(), action_getconfigjson(), action_hangup(), action_userevent(), add_bundle_groups(), add_cc_call_info_to_response(), add_crypto_to_stream(), add_hintdevice(), add_ice_to_stream(), add_required_respheader(), add_route(), add_rpid(), add_user_extension(), agent_handle_show_specific(), agent_login_to_ami(), agent_logoff_to_ami(), agent_show_requested(), agi_channel_to_ami(), ALLOC_COMMENT(), ami_outbound_registration_task(), ami_registrations_aor(), ami_subscription_detail(), analog_publish_dnd_state(), aoc_to_ami(), aocmessage_get_unit_entry(), ari_channel_thread(), ari_channels_handle_originate_with_id(), ast_agi_send(), ast_ari_callback(), ast_ari_channels_get_channel_var(), ast_ari_get_docs(), ast_cc_agent_set_interfaces_chanvar(), ast_cli(), ast_eivr_getvariable(), ast_func_read(), ast_func_read2(), ast_get_money_en_dollars_str(), ast_http_create_response(), ast_http_send(), ast_json_ipaddr(), ast_json_load_str(), ast_log_backtrace(), ast_logger_get_channels(), ast_monitor_stop(), ast_odbc_ast_str_SQLGetData(), ast_parse_digest(), ast_print_namedgroups(), ast_realtime_encode_chunk(), ast_rtp_lookup_mime_multiple2(), ast_set_cc_interfaces_chanvar(), ast_sip_append_body(), ast_sip_format_contact_ami(), ast_sockaddr_stringify_fmt(), ast_statsd_log_full_va(), ast_statsd_log_string(), ast_statsd_log_string_va(), ast_str_encode_mime(), ast_str_get_encoded_str(), ast_str_quote(), ast_str_retrieve_variable(), ast_str_substitute_variables_full(), ast_str_substring(), ast_stream_codec_prefs_to_str(), ast_stream_create_resolved(), ast_stream_to_str(), ast_stream_topology_to_str(), ast_strings_match(), AST_TEST_DEFINE(), ast_translate_path_to_str(), ast_var_channels_table(), ast_xmldoc_printable(), ast_xmldoc_query(), astman_append(), astman_flush(), astman_send_error_va(), attended_transfer_to_ami(), authority_to_str(), base64_helper(), blind_transfer_to_ami(), bridge_merge_cb(), bridge_snapshot_update(), build_nonce(), build_notify_body(), build_peer(), build_user_routes(), caldav_request(), calendar_join_attendees(), call_pickup_to_ami(), cc_extension_monitor_init(), cc_unique_append(), cdata(), cel_bridge_enter_cb(), cel_bridge_leave_cb(), challenge(), chanavail_exec(), change_hold_state(), channel_chanspy_start_cb(), channel_chanspy_stop_cb(), channel_dial_cb(), channel_dtmf_begin_cb(), channel_dtmf_end_cb(), channel_enter_cb(), channel_fax_cb(), channel_flash_cb(), channel_get_external_vars(), channel_hangup_handler_cb(), channel_hangup_request_cb(), channel_hold_cb(), channel_leave_cb(), channel_mixmonitor_mute_cb(), channel_moh_start_cb(), channel_snapshot_update(), channel_unhold_cb(), channel_wink_cb(), check_message_integrity(), check_nonce(), cli_alias_passthrough(), cli_list_subscriptions_detail(), cli_match_char_tree(), cli_odbc_read(), cli_prompt(), cli_show_module_options(), cli_show_module_type(), cli_show_module_types(), cli_show_subscription_common(), cli_show_subscriptions_detail(), codec_prefs_handler(), commit_exec(), conf_start_record(), confbridge_publish_manager_event(), config_curl(), config_mysql(), config_odbc(), config_pgsql(), config_text_file_load(), construct_pidf_body(), contacts_to_str(), contactstatus_to_ami(), create_channel_name(), custom_log(), cut_internal(), dahdi_cc_callback(), dahdi_new(), dahdichannel_to_ami(), dbl_list_expect_forward(), dbl_list_expect_reverse(), destroy_curl(), destroy_mysql(), destroy_odbc(), destroy_pgsql(), detect_disconnect(), determine_firstline_parts(), do_magic_pickup(), do_notify(), dump_queue_members(), dump_str_and_free(), dumpchan_exec(), eivr_comm(), endelm(), exchangecal_get_events_between(), exchangecal_request(), exchangecal_write_event(), exec_exec(), exten_state_publisher_cb(), extract_transferrer_headers(), fetch_icalendar(), file2display(), finalize_content(), find_aor(), find_realtime(), find_table(), format_ami_aor_handler(), format_ami_aorlist_handler(), format_ami_auth_handler(), format_ami_authlist_handler(), format_ami_contactlist_handler(), format_ami_endpoint(), format_ami_endpoints(), format_ami_resource_lists(), format_log_message_ap(), func_headers_read2(), function_fieldnum_helper(), function_fieldqty_helper(), function_iaxpeer(), function_realtime_read(), function_realtime_readdestroy(), function_sippeer(), generate_fmtp_attr(), generate_notify_body(), generate_status(), generate_uri(), get_content(), get_key(), get_languages(), get_number_str_en(), get_ordinal_str_en(), handle_aor(), handle_call_token(), handle_cli_iax2_show_peer(), handle_cli_indication_show(), handle_dbget(), handle_end_element(), handle_getvariablefull(), handle_manager_show_events(), handle_missing_table(), handle_options(), handle_registrations(), handle_request_do(), handle_request_refer(), handle_show_translation_path(), handle_show_translation_table(), handle_showchan(), hangupcause_keys_read(), hashkeys_read2(), http_callback(), http_post_callback(), iax2_getformatname_multiple(), iax_parse_ies(), initreqprep(), is_new_rec_file(), is_valid_uuid(), jack_str(), leave_voicemail(), list_expect(), list_item_to_str(), listfilter(), load_column_config(), load_dlopen(), load_modules(), local_message_to_ami(), localnet_to_str(), log_action(), log_attended_transfer(), log_jack_status(), logger_add_verbose_magic(), lws2sws(), make_email_file(), manager_bridge_info(), manager_bridge_tech_list(), manager_build_parked_call_string(), manager_generic_msg_cb(), manager_json_array_with_key(), manager_json_obj_with_key(), manager_log(), manager_parking_status_all_lots(), manager_parking_status_single_lot(), match_to_str(), meetme_cmd_helper(), meetme_show_cmd(), meetme_stasis_cb(), module_load_error(), multi_object_blob_to_ami(), multi_user_event_to_ami(), mwi_app_event_cb(), mwi_mailbox_delete(), mwi_mailbox_get(), mwi_to_string(), named_callgroups_to_str(), named_pickupgroups_to_str(), odbc_log(), parked_call_message_response(), parking_lot_cfg_create_extensions(), parse_hint_device(), parse_hint_presence(), parse_request(), pbx_find_extension(), pbx_retrieve_variable(), peerstatus_to_ami(), pgsql_log(), pgsql_reconnect(), phoneprov_callback(), pjsip_acf_dial_contacts_read(), pp_each_extension_helper(), pp_each_user_helper(), print_event_instance(), print_queue(), print_uptimestr(), process_description_file(), process_text_line(), prometheus_show_metrics(), publish_basic_channel_event(), publish_channel_alarm(), publish_channel_alarm_clear(), publish_dnd_state(), queue_channel_to_ami(), queue_member_to_ami(), queue_multi_channel_to_ami(), realtime_curl(), realtime_directory(), realtime_ldap_base_ap(), realtime_multi_curl(), realtime_multi_mysql(), realtime_multi_odbc(), realtime_multi_pgsql(), realtime_mysql(), realtime_odbc(), realtime_pgsql(), realtime_sqlite3_destroy(), realtime_sqlite3_helper(), realtime_sqlite3_store(), realtime_sqlite3_update(), realtime_sqlite3_update2(), realtimefield_read(), replace(), require_curl(), require_pgsql(), resource_list_recursive_decline(), retrans_pkt(), rm_file(), rollback_exec(), rtcp_report_to_ami(), run_app_helper(), run_station(), say_filenames(), say_periodic_announcement(), sayfile_exec(), search_directory_sub(), security_event_stasis_cb(), security_event_to_ami_blob(), send_bridge_info_item_cb(), send_bridge_list_item_cb(), send_eivr_event(), send_ews_request_and_parse(), send_identify_ami_event(), send_request(), send_response(), send_unsolicited_mwi_notify_to_contact(), sendmail(), sendpage(), sendtext_exec(), session_timeout_to_ami(), set2(), set_format(), show_channels_cb(), sip_hangup(), sip_report_security_event(), sip_rtp_read(), sip_send_mwi_to_peer(), sip_show_channel(), sip_show_sched(), sip_tcptls_read(), snoop_stasis_thread(), spandsp_manager_fax_session(), sqlite3_escape_column_op(), sqlite3_escape_string_helper(), start_resource_list(), startelm(), statsmaker(), store_curl(), store_mysql(), store_odbc(), store_pgsql(), str_appender(), strbetween(), string_tolower2(), string_toupper2(), strreplace(), substitute_escapes(), system_exec_helper(), system_registry_to_ami(), talking_start_to_ami(), talking_stop_to_ami(), test_2way_function(), test_files_create(), test_files_get_one(), threadpool_alloc(), transmit_fake_auth_response(), transmit_info_dtmf(), transmit_info_with_aoc(), transmit_invite(), transmit_notify_with_mwi(), transmit_state_notify(), try_calling(), tryexec_exec(), update2_curl(), update2_ldap(), update2_mysql(), update2_odbc(), update2_pgsql(), update2_prepare(), update_caldav(), update_curl(), update_ewscal(), update_exchangecal(), update_mysql(), update_odbc(), update_peer(), update_pgsql(), user_authority_to_str(), varset_to_ami(), write_cdr(), write_cel(), xmldoc_get_formatted(), xmldoc_get_syntax_cmd(), xmldoc_get_syntax_config_object(), xmldoc_get_syntax_config_option(), xmldoc_get_syntax_manager(), xmldoc_parse_cmd_enumlist(), xmldoc_parse_example(), xmldoc_parse_para(), xmldoc_parse_variable(), xmldoc_string_wrap(), and xmldoc_update_config_type().

◆ ast_str_case_hash()

static force_inline int attribute_pure ast_str_case_hash ( const char *  str)
static

Compute a hash value on a case-insensitive string.

Uses the same hash algorithm as ast_str_hash, but converts all characters to lowercase prior to computing a hash. This allows for easy case-insensitive lookups in a hash table.

Examples
app_skel.c.

Definition at line 1281 of file strings.h.

1282 {
1283  unsigned int hash = 5381;
1284 
1285  while (*str) {
1286  hash = hash * 33 ^ (unsigned char) tolower(*str++);
1287  }
1288 
1289  return ast_str_hash_restrict(hash);
1290 }
static force_inline int attribute_pure ast_str_hash_restrict(unsigned int hash)
Restrict hash value range.
Definition: strings.h:1224

References ast_str_hash_restrict(), and str.

Referenced by ast_channel_hash_cb(), ast_tone_zone_hash(), ast_xml_doc_item_hash(), autohint_hash_cb(), bridge_hash_cb(), cache_hash(), calendar_hash_fn(), cdr_all_hash_fn(), cdr_master_hash_fn(), channel_role_hash_cb(), channel_snapshot_hash_cb(), channel_snapshot_uniqueid_hash_cb(), conference_bridge_hash_cb(), config_opt_hash(), dialog_hash_cb(), featuregroup_hash(), format_hash_cb(), hintdevice_hash_cb(), media_info_hash(), media_variant_hash(), menu_hash_cb(), moh_class_hash(), notify_option_hash(), peer_hash_cb(), pending_members_hash(), protocol_hash_fn(), pvt_hash_cb(), queue_hash_cb(), skel_level_hash(), topic_pool_entry_hash(), tps_hash_cb(), and user_hash_cb().

◆ ast_str_container_add()

int ast_str_container_add ( struct ao2_container str_container,
const char *  add 
)

Adds a string to a string container allocated by ast_str_container_alloc.

Since
12
Parameters
str_containerThe container to which to add a string
addThe string to add to the container
Return values
zeroon success
non-zeroif the operation failed

Definition at line 206 of file strings.c.

207 {
208  char *ao2_add;
209 
210  /* The ao2_add object is immutable so it doesn't need a lock of its own. */
211  ao2_add = ao2_alloc_options(strlen(add) + 1, NULL, AO2_ALLOC_OPT_LOCK_NOLOCK);
212  if (!ao2_add) {
213  return -1;
214  }
215  strcpy(ao2_add, add);/* Safe */
216 
217  ao2_link(str_container, ao2_add);
218  ao2_ref(ao2_add, -1);
219  return 0;
220 }
#define ao2_link(container, obj)
Add an object to a container.
Definition: astobj2.h:1532
@ AO2_ALLOC_OPT_LOCK_NOLOCK
Definition: astobj2.h:367
#define ao2_ref(o, delta)
Reference/unreference an object and return the old refcount.
Definition: astobj2.h:459
#define ao2_alloc_options(data_size, destructor_fn, options)
Definition: astobj2.h:404

References AO2_ALLOC_OPT_LOCK_NOLOCK, ao2_alloc_options, ao2_link, ao2_ref, and NULL.

Referenced by add_media_cb(), add_variant_cb(), append_name(), apps_handler(), ast_bridge_snapshot_create(), ast_dns_get_nameservers(), ast_endpoint_add_channel(), AST_TEST_DEFINE(), complete_ari_app(), custom_nameserver_handler(), declined_handler(), event_session_alloc(), get_languages(), ip_identify_match_handler(), test_cel_peer_strings_match(), and topic_add_subscription().

◆ ast_str_container_alloc_options()

struct ao2_container* ast_str_container_alloc_options ( enum ao2_alloc_opts  opts,
int  buckets 
)

Allocates a hash container for bare strings.

Since
12
Parameters
optsOptions to be provided to the container
bucketsThe number of buckets to use for the hash container
Returns
AO2 container for strings
Return values
NULLif allocation failed

Definition at line 201 of file strings.c.

202 {
203  return ao2_container_alloc_hash(opts, 0, buckets, str_hash, str_sort, str_cmp);
204 }
#define ao2_container_alloc_hash(ao2_options, container_options, n_buckets, hash_fn, sort_fn, cmp_fn)
Allocate and initialize a hash container with the desired number of buckets.
Definition: astobj2.h:1303
static int str_sort(const void *lhs, const void *rhs, int flags)
Definition: strings.c:178
static int str_cmp(void *lhs, void *rhs, int flags)
Definition: strings.c:187
static int str_hash(const void *obj, const int flags)
Definition: strings.c:173

References ao2_container_alloc_hash, str_cmp(), str_hash(), and str_sort().

Referenced by ast_dns_get_nameservers(), custom_nameserver_handler(), endpoint_internal_create(), and ip_identify_match_handler().

◆ ast_str_container_remove()

void ast_str_container_remove ( struct ao2_container str_container,
const char *  remove 
)

Removes a string from a string container allocated by ast_str_container_alloc.

Since
12
Parameters
str_containerThe container from which to remove a string
removeThe string to remove from the container

Definition at line 222 of file strings.c.

223 {
224  ao2_find(str_container, remove, OBJ_SEARCH_KEY | OBJ_NODATA | OBJ_UNLINK);
225 }
#define ao2_find(container, arg, flags)
Definition: astobj2.h:1736
@ OBJ_NODATA
Definition: astobj2.h:1044
@ OBJ_UNLINK
Definition: astobj2.h:1039
@ OBJ_SEARCH_KEY
The arg parameter is a search key, but is not an object.
Definition: astobj2.h:1101
#define remove

References ao2_find, OBJ_NODATA, OBJ_SEARCH_KEY, OBJ_UNLINK, and remove.

Referenced by endpoint_cache_clear(), test_cel_peer_strings_match(), and topic_remove_subscription().

◆ ast_str_copy_string()

int ast_str_copy_string ( struct ast_str **  dst,
struct ast_str src 
)
inline

Definition at line 824 of file strings.h.

827 { \

Referenced by copy_request().

◆ ast_str_hash()

static force_inline int attribute_pure ast_str_hash ( const char *  str)
static

Compute a hash value on a string.

This famous hash algorithm was written by Dan Bernstein and is commonly used.

http://www.cse.yorku.ca/~oz/hash.html

Definition at line 1237 of file strings.h.

1238 {
1239  unsigned int hash = 5381;
1240 
1241  while (*str) {
1242  hash = hash * 33 ^ (unsigned char) *str++;
1243  }
1244 
1245  return ast_str_hash_restrict(hash);
1246 }

References ast_str_hash_restrict(), and str.

Referenced by alias_hash_cb(), app_hash(), ast_event_append_ie_str(), ast_get_namedgroups(), ast_sorcery_object_id_hash(), bridges_channel_hash_fn(), bridges_hash(), channel_hash(), control_hash(), datastore_hash(), db_hash_fn(), device_state_subscriptions_hash(), dsn_hash(), entry_hash_fn(), esc_hash_fn(), event_hash_fn(), event_session_hash(), exten_state_publisher_hash(), formatter_hash(), group_hash_fn(), hook_hash(), internal_state_hash(), jingle_add_ice_udp_candidates_to_transport(), jingle_endpoint_hash(), jingle_session_hash(), lang_hash_fn(), message_subscription_hash_cb(), monitored_transport_hash_fn(), mwi_sub_hash(), outbound_publish_state_hash(), parking_lot_cfg_hash_fn(), peer_hash_cb(), persistent_endpoint_hash(), playback_hash(), pvt_cause_hash_fn(), recording_hash(), registration_state_hash(), registry_hash_cb(), sdp_handler_list_hash(), sorcery_memory_cache_hash(), sorcery_memory_cached_object_hash(), sorcery_memory_hash(), stasis_sub_hash(), str_hash(), str_hash_fn(), suspects_hash(), test_vm_api_create_mock_snapshot(), transport_state_hash(), uid_hold_hash_fn(), user_hash_cb(), variable_count_hash_fn(), wait_bridge_hash_fn(), and xmpp_buddy_hash().

◆ ast_str_hash_add()

static force_inline int ast_str_hash_add ( const char *  str,
int  seed 
)
static

Compute a hash value on a string.

Parameters
[in]strThe string to add to the hash
[in]seedThe hash value to start with

This version of the function is for when you need to compute a string hash of more than one string.

This famous hash algorithm was written by Dan Bernstein and is commonly used.

See also
http://www.cse.yorku.ca/~oz/hash.html

Definition at line 1263 of file strings.h.

1264 {
1265  unsigned int hash = (unsigned int) seed;
1266 
1267  while (*str) {
1268  hash = hash * 33 ^ (unsigned char) *str++;
1269  }
1270 
1271  return ast_str_hash_restrict(hash);
1272 }

References ast_str_hash_restrict(), and str.

◆ ast_str_hash_restrict()

static force_inline int attribute_pure ast_str_hash_restrict ( unsigned int  hash)
static

Restrict hash value range.

Hash values used all over asterisk are expected to be non-negative (signed) int values. This function restricts an unsigned int hash value to the positive half of the (signed) int values.

Definition at line 1224 of file strings.h.

1225 {
1226  return (int) (hash & (unsigned int) INT_MAX);
1227 }

Referenced by ast_sip_get_distributor_serializer(), ast_str_case_hash(), ast_str_hash(), ast_str_hash_add(), and dialog_associations_hash().

◆ ast_str_reset()

void ast_str_reset ( struct ast_str buf)
inline

◆ ast_str_set()

int ast_str_set ( struct ast_str **  buf,
ssize_t  max_len,
const char *  fmt,
  ... 
)
inline

Set a dynamic string using variable arguments.

Note
Care should be taken when using this function. The function can result in reallocating the ast_str. If a pointer to the ast_str is passed by value to a function that calls ast_str_set(), then the original ast_str pointer may be invalidated due to a reallocation.
Parameters
bufThis is the address of a pointer to a struct ast_str which should have been retrieved using ast_str_thread_get. It will need to be updated in the case that the buffer has to be reallocated to accomodate a longer string than what it currently has space for.
max_lenThis is the maximum length to allow the string buffer to grow to. If this is set to 0, then there is no maximum length. If set to -1, we are bound to the current maximum length.
fmtThis is the format string (printf style)
Returns
The return value of this function is the same as that of the printf family of functions.

All the rest is the same as ast_str_set_va()

Definition at line 1091 of file strings.h.

1107 {

References ast_str_append_va(), and buf.

Referenced by __ast_format_cap_get_names(), __ast_http_post_load(), __manager_event_sessions_va(), __queues_show(), acf_curl_exec(), acf_curl_helper(), acf_curlopt_helper(), action_agents(), action_createconfig(), add_bundle_groups(), add_cc_call_info_to_response(), add_crypto_to_stream(), add_hintdevice(), add_ice_to_stream(), add_rpid(), agent_handle_show_specific(), agent_show_requested(), analog_publish_dnd_state(), aocmessage_get_unit_entry(), ari_channels_handle_originate_with_id(), ast_ari_callback(), ast_extension_state2(), ast_http_auth(), ast_http_create_response(), ast_http_error(), ast_http_send(), ast_json_ipaddr(), ast_manager_build_bridge_state_string_prefix(), ast_manager_build_channel_state_string_prefix(), ast_monitor_stop(), ast_parse_digest(), ast_realtime_encode_chunk(), ast_regex_string_to_regex_pattern(), ast_sched_report(), ast_sip_append_body(), ast_sip_create_ami_event(), ast_sockaddr_stringify_fmt(), ast_str_encode_mime(), ast_str_expr(), ast_str_get_encoded_str(), ast_str_get_hint(), ast_str_quote(), ast_str_retrieve_variable(), ast_stream_create_resolved(), ast_strings_match(), AST_TEST_DEFINE(), ast_xmldoc_regenerate_doc_item(), astman_send_list_complete_start_common(), astman_send_response_full(), bs_to_exchange_bs(), build_notify(), build_path_data(), build_peer(), caldav_write_event(), cc_extension_monitor_init(), cc_generic_agent_start_monitoring(), cdata(), channel_hold_cb(), check_message_integrity(), cli_list_subscriptions_detail(), cli_match_char_tree(), cli_odbc_read(), cli_prompt(), cli_show_subscriptions_detail(), config_curl(), config_mysql(), config_odbc(), config_pgsql(), create_channel_name(), derive_category_text(), destroy_curl(), destroy_mysql(), destroy_odbc(), destroy_pgsql(), device_state_notify_callbacks(), do_magic_pickup(), do_notify(), encmethods_to_str(), ewscal_write_event(), exchangecal_write_event(), extension_presence_state_helper(), extract_transferrer_headers(), file2format(), file_format(), find_aor(), find_realtime(), find_table(), func_headers_read2(), function_fieldnum_helper(), function_fieldqty_helper(), generate_exchange_uuid(), generate_uri(), get_ewscal_ids_for(), get_languages(), handle_call_token(), handle_cli_indication_show(), handle_manager_show_events(), handle_missing_table(), handle_show_translation_path(), handle_show_translation_table(), handle_uri(), hashkeys_read(), hashkeys_read2(), iax_parse_ies(), init_queue(), init_req(), init_resp(), initreqprep(), is_new_rec_file(), leave_voicemail(), listfilter(), log_attended_transfer(), log_jack_status(), make_email_file(), manager_bridge_info(), manager_bridge_tech_list(), manager_bridges_list(), manager_build_parked_call_string(), manager_json_array_with_key(), manager_json_obj_with_key(), meetme_cmd_helper(), meetme_show_cmd(), meetme_stasis_cb(), mwi_to_string(), odbc_log(), parking_lot_cfg_create_extensions(), parse_ewscal_id(), parse_hint_device(), parse_hint_presence(), passthru(), pgsql_log(), pgsql_reconnect(), phoneprov_callback(), presence_state_notify_callbacks(), print_queue(), process_description_file(), process_text_line(), publish_channel_alarm(), publish_channel_alarm_clear(), publish_dnd_state(), queue_set_param(), realtime_curl(), realtime_directory(), realtime_multi_curl(), realtime_multi_mysql(), realtime_multi_odbc(), realtime_multi_pgsql(), realtime_mysql(), realtime_odbc(), realtime_pgsql(), realtime_sqlite3_destroy(), realtime_sqlite3_helper(), realtime_sqlite3_store(), realtime_sqlite3_update(), realtime_sqlite3_update2(), replace(), require_curl(), require_pgsql(), run_station(), search_directory_sub(), security_event_stasis_cb(), sendmail(), sendpage(), set_rec_filename(), sip_report_security_event(), sip_tcptls_write(), sip_websocket_callback(), sipsock_read(), startelm(), stasis_app_control_snoop(), static_callback(), statsmaker(), store_curl(), store_mysql(), store_odbc(), store_pgsql(), system_registry_to_ami(), test_files_create(), threadpool_alloc(), transmit_fake_auth_response(), transmit_info_dtmf(), try_calling(), update2_curl(), update2_mysql(), update2_pgsql(), update2_prepare(), update_curl(), update_mysql(), update_odbc(), update_pgsql(), varset_to_ami(), websocket_bad_request(), websocket_client_parse_uri(), xmldoc_build_documentation_item(), xmldoc_get_syntax_config_object(), and xmldoc_get_syntax_config_option().

◆ ast_str_set_escapecommas()

char * ast_str_set_escapecommas ( struct ast_str **  buf,
ssize_t  maxlen,
const char *  src,
size_t  maxsrc 
)
inline

Set a dynamic string to a non-NULL terminated substring, with escaping of commas.

Definition at line 1047 of file strings.h.

1051 {

References __ast_str_helper2(), and buf.

Referenced by acf_curl_helper(), and realtimefield_read().

◆ ast_str_set_substr()

char * ast_str_set_substr ( struct ast_str **  buf,
ssize_t  maxlen,
const char *  src,
size_t  maxsrc 
)
inline

Set a dynamic string to a non-NULL terminated substring.

Definition at line 1033 of file strings.h.

1037 {

References __ast_str_helper2(), and buf.

Referenced by ast_str_substitute_variables_full(), and set_rec_filename().

◆ ast_str_set_va()

int ast_str_set_va ( struct ast_str **  buf,
ssize_t  max_len,
const char *  fmt,
va_list  ap 
)
inline

Set a dynamic string from a va_list.

Parameters
bufThis is the address of a pointer to a struct ast_str. If it is retrieved using ast_str_thread_get, the struct ast_threadstorage pointer will need to be updated in the case that the buffer has to be reallocated to accommodate a longer string than what it currently has space for.
max_lenThis is the maximum length to allow the string buffer to grow to. If this is set to 0, then there is no maximum length.
fmtThis is the format string (printf style)
apThis is the va_list
Returns
The return value of this function is the same as that of the printf family of functions.

Example usage (the first part is only for thread-local storage)

AST_THREADSTORAGE(my_str, my_str_init);
#define MY_STR_INIT_SIZE 128
...
void my_func(const char *fmt, ...)
{
struct ast_str *buf;
va_list ap;
if (!(buf = ast_str_thread_get(&my_str, MY_STR_INIT_SIZE)))
return;
...
va_start(fmt, ap);
ast_str_set_va(&buf, 0, fmt, ap);
va_end(ap);
printf("This is the string we just built: %s\n", buf->str);
...
}
int ast_str_set_va(struct ast_str **buf, ssize_t max_len, const char *fmt, va_list ap)
Set a dynamic string from a va_list.
Definition: strings.h:1008
struct ast_str * ast_str_thread_get(struct ast_threadstorage *ts, size_t init_len)
Retrieve a thread locally stored dynamic string.
Definition: strings.h:887
#define AST_THREADSTORAGE(name)
Define a thread storage variable.
Definition: threadstorage.h:86
Note
Care should be taken when using this function. The function can result in reallocating the ast_str. If a pointer to the ast_str is passed by value to a function that calls ast_str_set_va(), then the original ast_str pointer may be invalidated due to a reallocation.

Definition at line 1008 of file strings.h.

1023 {

References _ast_str_helper, and buf.

Referenced by ast_agi_send(), ast_cli(), ast_statsd_log_full_va(), ast_statsd_log_string_va(), ast_str_append_escapecommas(), ast_xmldoc_query(), astman_append(), astman_send_error_va(), format_log_message_ap(), and module_load_error().

◆ ast_str_size()

size_t ast_str_size ( const struct ast_str buf)
inline

Returns the current maximum length (without reallocation) of the current buffer.

Parameters
bufA pointer to the ast_str structure.
Returns
Current maximum length of the buffer.

Definition at line 723 of file strings.h.

732 {

References buf.

Referenced by ari_channels_handle_originate_with_id(), ast_func_read(), ast_func_read2(), ast_odbc_ast_str_SQLGetData(), ast_str_get_encoded_str(), AST_TEST_DEFINE(), base64_helper(), handle_dbget(), load_config(), pbx_find_extension(), realtime_multi_odbc(), realtime_odbc(), set2(), sqlite3_escape_column_op(), sqlite3_escape_string_helper(), string_tolower2(), string_toupper2(), and write_to_ast_str().

◆ ast_str_strlen()

size_t ast_str_strlen ( const struct ast_str buf)
inline

Returns the current length of the string stored within buf.

Parameters
bufA pointer to the ast_str structure.

Definition at line 711 of file strings.h.

720 {

References buf.

Referenced by __sip_xmit(), _ast_xmldoc_build_arguments(), _sip_tcp_helper_thread(), _xmldoc_build_field(), acf_curl_helper(), acf_odbc_read(), action_getconfig(), action_getconfigjson(), add_header(), add_required_respheader(), add_route(), ALLOC_COMMENT(), ast_agi_send(), ast_cli(), ast_http_send(), ast_odbc_print_errors(), ast_statsd_log_string(), ast_str_encode_mime(), ast_str_expr(), ast_str_substitute_variables_full(), ast_str_substring(), AST_TEST_DEFINE(), ast_var_channels_table(), authority_to_str(), base64_helper(), build_cc_interfaces_chanvar(), build_notify(), build_peer(), caldav_get_events_between(), caldav_request(), cc_extension_monitor_init(), cdata(), chanavail_exec(), cli_show_module_options(), cli_show_module_type(), cli_show_module_types(), collect_names_cb(), config_mysql(), config_text_file_load(), copy_request(), cut_internal(), destroy_mysql(), detect_disconnect(), dump_queue_members(), encmethods_to_str(), endelm(), exchangecal_request(), fetch_icalendar(), finalize_content(), find_table(), function_fieldnum_helper(), function_fieldqty_helper(), generate_fmtp_attr(), get_key(), handle_dbget(), handle_end_element(), handle_request_cancel(), handle_request_do(), handle_showchan(), hangupcause_keys_read(), hashkeys_read2(), http_callback(), initreqprep(), listfilter(), load_column_config(), load_config(), load_dlopen(), load_modules(), lws2sws(), manager_log(), manager_sipnotify(), odbc_log(), opus_generate_sdp_fmtp(), parse_request(), pgsql_log(), pgsql_reconnect(), pjsip_acf_dial_contacts_read(), print_uptimestr(), realtime_multi_mysql(), realtime_multi_odbc(), realtime_mysql(), realtime_odbc(), replace(), say_filenames(), say_periodic_announcement(), send_ews_request_and_parse(), set_outbound_authentication_credentials(), set_rec_filename(), sip_cli_notify(), sip_hangup(), sip_send_mwi_to_peer(), sip_tcptls_read(), store_mysql(), system_exec_helper(), test_create_joint(), transmit_invite(), update2_mysql(), update_caldav(), update_exchangecal(), update_mysql(), user_authority_to_str(), write_cdr(), write_cel(), write_to_ast_str(), xmldoc_get_formatted(), and xmldoc_parse_variable().

◆ ast_str_thread_get()

struct ast_str * ast_str_thread_get ( struct ast_threadstorage ts,
size_t  init_len 
)
inline

Retrieve a thread locally stored dynamic string.

Parameters
tsThis is a pointer to the thread storage structure declared by using the AST_THREADSTORAGE macro. If declared with AST_THREADSTORAGE(my_buf, my_buf_init), then this argument would be (&my_buf).
init_lenThis is the initial length of the thread's dynamic string. The current length may be bigger if previous operations in this thread have caused it to increase.
Returns
This function will return the thread locally stored dynamic string associated with the thread storage management variable passed as the first argument. The result will be NULL in the case of a memory allocation error.

Example usage:

AST_THREADSTORAGE(my_str, my_str_init);
#define MY_STR_INIT_SIZE 128
...
void my_func(const char *fmt, ...)
{
struct ast_str *buf;
if (!(buf = ast_str_thread_get(&my_str, MY_STR_INIT_SIZE)))
return;
...
}

Definition at line 887 of file strings.h.

892 {

References buf, make_ari_stubs::file, and NULL.

Referenced by __manager_event_sessions_va(), acf_curl_helper(), acf_odbc_read(), acf_odbc_write(), action_userevent(), add_hintdevice(), ast_agi_send(), ast_cli(), ast_extension_state2(), ast_odbc_print_errors(), ast_sockaddr_stringify_fmt(), ast_statsd_log_full_va(), ast_statsd_log_string_va(), astman_append(), astman_send_error_va(), astman_send_list_complete_start_common(), astman_send_response_full(), cli_odbc_read(), config_curl(), config_mysql(), config_odbc(), config_pgsql(), custom_log(), destroy_curl(), destroy_mysql(), destroy_odbc(), destroy_pgsql(), dumpchan_exec(), extension_presence_state_helper(), find_table(), format_log_message_ap(), function_fieldnum_helper(), function_fieldqty_helper(), get_content(), handle_showchan(), listfilter(), logger_add_verbose_magic(), pbx_find_extension(), realtime_curl(), realtime_directory(), realtime_multi_curl(), realtime_multi_mysql(), realtime_multi_odbc(), realtime_multi_pgsql(), realtime_mysql(), realtime_odbc(), realtime_pgsql(), realtimefield_read(), require_curl(), search_directory_sub(), security_event_stasis_cb(), sip_report_security_event(), sqlite3_escape_column_op(), sqlite3_escape_string_helper(), store_curl(), store_mysql(), store_odbc(), store_pgsql(), strbetween(), strreplace(), substitute_escapes(), system_exec_helper(), transmit_fake_auth_response(), update2_curl(), update2_mysql(), update2_odbc(), update2_pgsql(), update2_prepare(), update_curl(), update_mysql(), update_odbc(), and update_pgsql().

◆ ast_str_to_lower()

static force_inline char* ast_str_to_lower ( char *  str)
static

Convert a string to all lower-case.

Parameters
strThe string to be converted to lower case
Return values
strthe char* passed in for convenience

Definition at line 1299 of file strings.h.

1300 {
1301  char *str_orig = str;
1302  if (!str) {
1303  return str;
1304  }
1305 
1306  for (; *str; ++str) {
1307  *str = tolower(*str);
1308  }
1309 
1310  return str_orig;
1311 }

References str.

Referenced by apps_handler(), ast_ari_endpoints_send_message_to_endpoint(), ast_uuid_to_str(), build_contact(), cel_track_app(), curl_header_callback(), get_user_agent(), and parse_simple_message_summary().

◆ ast_str_to_upper()

static force_inline char* ast_str_to_upper ( char *  str)
static

Convert a string to all upper-case.

Parameters
strThe string to be converted to upper case
Return values
strthe char* passed in for convenience

Definition at line 1320 of file strings.h.

1321 {
1322  char *str_orig = str;
1323  if (!str) {
1324  return str;
1325  }
1326 
1327  for (; *str; ++str) {
1328  *str = toupper(*str);
1329  }
1330 
1331  return str_orig;
1332 }

References str.

Referenced by ast_rtp_engine_load_format().

◆ ast_str_trim_blanks()

void ast_str_trim_blanks ( struct ast_str buf)
inline

Trims trailing whitespace characters from an ast_str string.

Parameters
bufA pointer to the ast_str string.

Definition at line 700 of file strings.h.

708 {

References buf.

Referenced by acf_curl_helper(), process_text_line(), and xmldoc_string_cleanup().

◆ ast_str_truncate()

char * ast_str_truncate ( struct ast_str buf,
ssize_t  len 
)
inline

Truncates the enclosed string to the given length.

Parameters
bufA pointer to the ast_str structure.
lenMaximum length of the string. If len is larger than the current maximum length, things will explode. If it is negative at most -len characters will be trimmed off the end.
Returns
A pointer to the resulting string.

Definition at line 764 of file strings.h.

785 {

Referenced by __test_cel_generate_peer_str(), _ast_xmldoc_build_arguments(), active_channels_to_str(), ast_regex_string_to_regex_pattern(), ast_str_substring(), build_cc_interfaces_chanvar(), cel_generate_peer_str(), contacts_to_str(), func_headers_read2(), hashkeys_read2(), jack_str(), list_item_to_str(), opus_generate_sdp_fmtp(), pjsip_acf_dial_contacts_read(), send_eivr_event(), set_outbound_authentication_credentials(), set_var_to_str(), test_create_joint(), xmldoc_get_formatted(), and xmldoc_string_wrap().

◆ ast_str_update()

void ast_str_update ( struct ast_str buf)
inline

Update the length of the buffer, after using ast_str merely as a buffer.

Parameters
bufA pointer to the ast_str string.

Definition at line 684 of file strings.h.

692 {

References buf.

Referenced by ast_odbc_ast_str_SQLGetData(), ast_str_get_encoded_str(), ast_str_substring(), base64_helper(), cli_show_subscription_common(), handle_dbget(), lws2sws(), realtime_multi_odbc(), realtime_odbc(), sqlite3_escape_column_op(), sqlite3_escape_string_helper(), string_tolower2(), and string_toupper2().

◆ ast_strings_equal()

int ast_strings_equal ( const char *  str1,
const char *  str2 
)

Compare strings for equality checking for NULL.

Since
16.3.0

This function considers NULL values as non-strings, thus a false condition. This means that it will return false if one, or both of the given values are NULL (i.e. two NULLs are not equal strings).

Parameters
str1The string to compare to str2
str2The string to compare to str1
Return values
trueif valid strings and equal.
falseotherwise.

Definition at line 239 of file strings.c.

240 {
241  if (!str1 || !str2) {
242  return 0;
243  }
244 
245  return str1 == str2 || !strcmp(str1, str2);
246 }

Referenced by app_event_filter_matched(), is_media_state_valid(), load_realtime_musiconhold(), resolve_refresh_media_states(), and set_outbound_authentication_credentials().

◆ ast_strings_match()

int ast_strings_match ( const char *  left,
const char *  op,
const char *  right 
)

Compares 2 strings using realtime-style operators.

Since
13.9.0
Parameters
leftThe left side of the equation
opThe operator to apply
rightThe right side of the equation
Return values
1matches
0doesn't match

Operators: "=", "!=", "<", "<=", ">", ">=": If both left and right can be converted to float, then they will be compared as such. Otherwise the result will be derived from strcmp(left, right). "regex": The right value will be compiled as a regular expression and matched against the left value. "like": Any '' character in the right value will be converted to '.*' and the resulting string will be handled as a regex. NULL , "": If the right value starts and ends with a '/' then it will be processed as a regex. Otherwise, same as "=".

Definition at line 248 of file strings.c.

249 {
250  char *internal_op = (char *)op;
251  char *internal_right = (char *)right;
252  double left_num;
253  double right_num;
254  int scan_numeric = 0;
255 
256  if (!(left && right)) {
257  return 0;
258  }
259 
260  if (ast_strlen_zero(op)) {
261  if (ast_strlen_zero(left) && ast_strlen_zero(right)) {
262  return 1;
263  }
264 
265  if (strlen(right) >= 2 && right[0] == '/' && right[strlen(right) - 1] == '/') {
266  internal_op = "regex";
267  internal_right = ast_strdupa(right);
268  /* strip the leading and trailing '/' */
269  internal_right++;
270  internal_right[strlen(internal_right) - 1] = '\0';
271  goto regex;
272  } else {
273  internal_op = "=";
274  goto equals;
275  }
276  }
277 
278  if (!strcasecmp(op, "like")) {
279  char *tok;
280  struct ast_str *buffer = ast_str_alloca(128);
281 
282  if (!strchr(right, '%')) {
283  return !strcmp(left, right);
284  } else {
285  internal_op = "regex";
286  internal_right = ast_strdupa(right);
287  tok = strsep(&internal_right, "%");
288  ast_str_set(&buffer, 0, "^%s", tok);
289 
290  while ((tok = strsep(&internal_right, "%"))) {
291  ast_str_append(&buffer, 0, ".*%s", tok);
292  }
293  ast_str_append(&buffer, 0, "%s", "$");
294 
295  internal_right = ast_str_buffer(buffer);
296  /* fall through to regex */
297  }
298  }
299 
300 regex:
301  if (!strcasecmp(internal_op, "regex")) {
302  regex_t expression;
303  int rc;
304 
305  if (regcomp(&expression, internal_right, REG_EXTENDED | REG_NOSUB)) {
306  return 0;
307  }
308 
309  rc = regexec(&expression, left, 0, NULL, 0);
310  regfree(&expression);
311  return !rc;
312  }
313 
314 equals:
315  scan_numeric = (sscanf(left, "%lf", &left_num) > 0 && sscanf(internal_right, "%lf", &right_num) > 0);
316 
317  if (internal_op[0] == '=') {
318  if (ast_strlen_zero(left) && ast_strlen_zero(internal_right)) {
319  return 1;
320  }
321 
322  if (scan_numeric) {
323  return (left_num == right_num);
324  } else {
325  return (!strcmp(left, internal_right));
326  }
327  }
328 
329  if (internal_op[0] == '!' && internal_op[1] == '=') {
330  if (scan_numeric) {
331  return (left_num != right_num);
332  } else {
333  return !!strcmp(left, internal_right);
334  }
335  }
336 
337  if (internal_op[0] == '<') {
338  if (scan_numeric) {
339  if (internal_op[1] == '=') {
340  return (left_num <= right_num);
341  } else {
342  return (left_num < right_num);
343  }
344  } else {
345  if (internal_op[1] == '=') {
346  return strcmp(left, internal_right) <= 0;
347  } else {
348  return strcmp(left, internal_right) < 0;
349  }
350  }
351  }
352 
353  if (internal_op[0] == '>') {
354  if (scan_numeric) {
355  if (internal_op[1] == '=') {
356  return (left_num >= right_num);
357  } else {
358  return (left_num > right_num);
359  }
360  } else {
361  if (internal_op[1] == '=') {
362  return strcmp(left, internal_right) >= 0;
363  } else {
364  return strcmp(left, internal_right) > 0;
365  }
366  }
367  }
368 
369  return 0;
370 }
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition: astmm.h:298
static int regex(struct ast_channel *chan, const char *cmd, char *parse, char *buf, size_t len)
char * strsep(char **str, const char *delims)
int ast_str_append(struct ast_str **buf, ssize_t max_len, const char *fmt,...)
Append to a thread local dynamic string.
Definition: strings.h:1117
char * ast_str_buffer(const struct ast_str *buf)
Returns the string buffer within the ast_str buf.
Definition: strings.h:739
#define ast_str_alloca(init_len)
Definition: strings.h:826

References ast_str_alloca, ast_str_append(), ast_str_buffer(), ast_str_set(), ast_strdupa, ast_strlen_zero(), NULL, regex(), and strsep().

Referenced by AST_TEST_DEFINE(), and ast_variables_match().

◆ ast_strip()

char * ast_strip ( char *  s)
inline

Strip leading/trailing whitespace from a string.

Parameters
sThe string to be stripped (will be modified).
Returns
The stripped string.

This functions strips all leading and trailing whitespace characters from the input string, and returns a pointer to the resulting string. The string is modified in place.

Definition at line 223 of file strings.h.

254 {

Referenced by acf_if(), add_menu_entry(), add_peer_mailboxes(), ami_sip_qualify(), apps_handler(), aqm_exec(), ari_channels_handle_originate_with_id(), ast_ari_channels_create(), ast_callerid_parse(), ast_el_add_history(), ast_format_cap_update_by_allow_disallow(), ast_get_namedgroups(), ast_playtones_start(), ast_sip_auth_vector_init(), ast_sip_for_each_aor(), ast_sip_location_retrieve_contact_and_aor_from_list_filtered(), ast_strip_quoted(), ast_strsep(), ast_variable_list_from_string(), ast_vector_string_split(), ast_websocket_uri_cb(), bridge_create_common(), build_calendar(), build_profile(), chanavail_exec(), check_blacklist(), check_peer_ok(), cli_qualify(), cli_reload_qualify_endpoint(), cli_show_qualify_endpoint(), config_parse_variables(), config_text_file_load(), create_unsolicited_mwi_subscriptions(), dial_exec_full(), eivr_comm(), events_handler(), find_aor(), find_aor_for_resource(), find_aor_name(), function_amiclient(), global_loaded(), h263_parse_sdp_fmtp(), h264_parse_sdp_fmtp(), header_identify_match_check(), ident_handler(), ip_identify_apply(), ip_identify_match_handler(), list_item_handler(), load_column_config(), load_config(), make_components(), mwi_on_aor(), mwi_validate_for_aor(), notify_endpoint(), page_exec(), parse_cookies(), parse_sip_options(), pbx_builtin_background(), pbx_load_config(), permanent_uri_handler(), pjsip_acf_dial_contacts_read(), process_text_line(), read_header(), read_headers(), realtime_multi_mysql(), realtime_multi_odbc(), realtime_multi_pgsql(), realtime_odbc(), realtime_pgsql(), reload_config(), reload_single_member(), send_unsolicited_mwi_notify(), set(), sip_options_synchronize_endpoint(), stir_shaken_incoming_request(), store_tone_zone_ring_cadence(), try_suggested_sip_codec(), and userevent_exec().

◆ ast_strip_quoted()

char* ast_strip_quoted ( char *  s,
const char *  beg_quotes,
const char *  end_quotes 
)

Strip leading/trailing whitespace and quotes from a string.

Parameters
sThe string to be stripped (will be modified).
beg_quotesThe list of possible beginning quote characters.
end_quotesThe list of matching ending quote characters.
Returns
The stripped string.

This functions strips all leading and trailing whitespace characters from the input string, and returns a pointer to the resulting string. The string is modified in place.

It can also remove beginning and ending quote (or quote-like) characters, in matching pairs. If the first character of the string matches any character in beg_quotes, and the last character of the string is the matching character in end_quotes, then they are removed from the string.

Examples:

ast_strip_quoted(buf, "\"", "\"");
ast_strip_quoted(buf, "'", "'");
ast_strip_quoted(buf, "[{(", "]})");
char * ast_strip_quoted(char *s, const char *beg_quotes, const char *end_quotes)
Strip leading/trailing whitespace and quotes from a string.
Definition: main/utils.c:1785

Definition at line 1785 of file main/utils.c.

1786 {
1787  char *e;
1788  char *q;
1789 
1790  s = ast_strip(s);
1791  if ((q = strchr(beg_quotes, *s)) && *q != '\0') {
1792  e = s + strlen(s) - 1;
1793  if (*e == *(end_quotes + (q - beg_quotes))) {
1794  s++;
1795  *e = '\0';
1796  }
1797  }
1798 
1799  return s;
1800 }
char * ast_strip(char *s)
Strip leading/trailing whitespace from a string.
Definition: strings.h:223

References ast_strip().

Referenced by applicationmap_handler(), ast_callerid_parse(), ast_sip_validate_uri_length(), ast_strsep(), dialog_info_generate_body_content(), get_destination(), iftime(), load_values_config(), parse_allowed_methods(), parse_cookies(), parse_dial_string(), pidf_allocate_body(), set_redirecting_reason(), sip_parse_register_line(), and xpidf_allocate_body().

◆ ast_strlen_zero()

static force_inline int attribute_pure ast_strlen_zero ( const char *  s)
static
Examples
app_skel.c.

Definition at line 65 of file strings.h.

66 {
67  return (!s || (*s == '\0'));
68 }

Referenced by __analog_handle_event(), __analog_ss_thread(), __ast_bridge_technology_register(), __ast_bucket_scheme_register(), __ast_callerid_generate(), __ast_channel_alloc_ap(), __ast_channel_internal_alloc(), __ast_cli_generator(), __ast_cli_register(), __ast_datastore_alloc(), __ast_format_cache_get(), __ast_http_load(), __ast_manager_event_multichan(), __ast_request_and_dial(), __ast_sorcery_wizard_register(), __astman_get_header(), __find_call(), __has_voicemail(), __init_manager(), __manager_event_sessions_va(), __queues_show(), __set_address_from_contact(), __sip_alloc(), __sip_subscribe_mwi_do(), __ssl_setup(), __state_find_or_add(), _iax2_show_peers_one(), _macro_exec(), _sip_show_peer(), _sip_show_peers(), _sip_show_peers_one(), _skinny_show_devices(), _skinny_show_lines(), acf_curl_exec(), acf_if(), acf_jabberreceive_read(), acf_jabberstatus_read(), acf_max_exec(), acf_meetme_info(), acf_min_exec(), acf_odbc_read(), acf_odbc_write(), acf_retrieve_docs(), acf_strptime(), acf_transaction_read(), acf_transaction_write(), acf_vm_info(), acl_to_str(), aco_option_register_deprecated(), aco_process_var(), aco_set_defaults(), action_add_agi_cmd(), action_agent_logoff(), action_agents(), action_aocmessage(), action_atxfer(), action_blind_transfer(), action_bridge(), action_cancel_atxfer(), action_challenge(), action_command(), action_confbridgekick(), action_confbridgelist(), action_confbridgelistrooms(), action_confbridgesetsinglevideosrc(), action_confbridgestartrecord(), action_confbridgestoprecord(), action_coresettings(), action_coreshowchannels(), action_corestatus(), action_dahdidialoffhook(), action_dahdidndoff(), action_dahdidndon(), action_dahdishowchannels(), action_devicestatelist(), action_events(), action_extensionstate(), action_getconfig(), action_getconfigjson(), action_getvar(), action_hangup(), action_listcategories(), action_lock_unlock_helper(), action_mailboxcount(), action_mailboxstatus(), action_meetmelist(), action_meetmelistrooms(), action_messagesend(), action_mute_unmute_helper(), action_originate(), action_ping(), action_presencestate(), action_presencestatelist(), action_redirect(), action_sendtext(), action_setvar(), action_status(), action_timeout(), action_transfer(), action_transferhangup(), action_updateconfig(), action_waitevent(), actual_load_config(), add_action_to_menu_entry(), add_calltoken_ignore(), add_cc_call_info_to_response(), add_diversion(), add_diversion_header(), add_extension(), add_format_information_cb(), add_header(), add_header_from_channel_var(), add_hints(), add_history_info_header(), add_item(), add_menu_entry(), add_msid_to_stream(), add_peer_mailboxes(), add_realm_authentication(), add_rpid(), add_sdp(), add_sip_domain(), add_text(), add_vm_recipients_from_string(), admin_exec(), adsi_exec(), adsi_input_format(), adsi_message(), advanced_options(), agent_alert(), agent_handle_logoff_cmd(), agent_handle_show_specific(), agent_login_channel_config(), agent_login_exec(), agent_pvt_destructor(), agent_request_exec(), agent_show_requested(), agi_exec_full(), alarmreceiver_exec(), alsa_new(), ami_register(), ami_show_endpoint(), ami_sip_qualify(), ami_unregister(), analog_call(), analog_ss_thread(), answer_exec_enable(), aoc_create_ie_data(), aoc_create_ie_data_charging_rate(), aoc_parse_ie_charging_rate(), aoc_to_ami(), aocmessage_get_unit_entry(), aor_apply_handler(), app_event_filter_set(), app_exec(), app_is_subscribed_bridge_id(), app_is_subscribed_channel_id(), app_is_subscribed_endpoint_id(), append_mailbox(), append_mailbox_mapping(), append_source_stream(), append_transaction(), append_vmu_info_astman(), applicationmap_handler(), apply_general_options(), apply_option_timeout(), apply_options_full(), apply_outgoing(), apply_peer(), apps_handler(), aqm_exec(), ari_channels_handle_originate_with_id(), ari_channels_handle_snoop_channel(), ari_originate_dial(), assign_and_insert(), ast_acl_output(), ast_agi_register(), ast_aoc_s_add_rate_duration(), ast_aoc_s_add_rate_flat(), ast_aoc_s_add_rate_volume(), ast_aoc_set_association_number(), ast_aoc_set_currency_info(), ast_app_getdata_full(), ast_app_group_get_count(), ast_app_group_match_get_count(), ast_app_group_set_channel(), ast_app_group_split_group(), ast_app_run_macro(), ast_app_run_sub(), ast_append_acl(), ast_ari_applications_subscribe(), ast_ari_asterisk_get_global_var(), ast_ari_asterisk_set_global_var(), ast_ari_bridges_add_channel(), ast_ari_bridges_create_with_id(), ast_ari_channels_continue_in_dialplan(), ast_ari_channels_create(), ast_ari_channels_dial(), ast_ari_channels_external_media(), ast_ari_channels_get_channel_var(), ast_ari_channels_hangup(), ast_ari_channels_mute(), ast_ari_channels_redirect(), ast_ari_channels_send_dtmf(), ast_ari_channels_set_channel_var(), ast_ari_channels_unmute(), ast_ari_config_validate_user(), ast_ari_events_user_event(), ast_audiosocket_connect(), ast_audiosocket_init(), ast_base64decode_string(), ast_base64encode_string(), ast_base64url_decode_string(), ast_base64url_encode_string(), ast_bridge_add_channel(), ast_bridge_channel_write_hold(), ast_bridge_features_enable(), ast_bridge_features_register(), ast_bridge_get_snapshot_by_uniqueid(), ast_bridge_read_after_goto(), ast_bridge_set_after_go_on(), ast_bridge_setup_after_goto(), ast_bridge_snapshot_to_json(), ast_bridge_timelimit(), ast_bucket_alloc(), ast_bucket_file_alloc(), ast_bucket_file_retrieve(), ast_bucket_file_temporary_destroy(), ast_bucket_retrieve(), ast_build_timing(), ast_call_forward(), ast_cc_is_recall(), ast_cdr_format_var(), ast_cdr_getvar(), ast_cdr_serialize_variables(), ast_cel_fabricate_channel_from_event(), ast_channel_by_exten_cb(), ast_channel_by_name_cb(), ast_channel_by_uniqueid_cb(), ast_channel_connected_line_macro(), ast_channel_connected_line_sub(), ast_channel_get_by_name_prefix(), ast_channel_hash_cb(), ast_channel_internal_setup_topics(), ast_channel_publish_dial_forward(), ast_channel_publish_dial_internal(), ast_channel_redirecting_macro(), ast_channel_redirecting_sub(), ast_channel_snapshot_cep_equal(), ast_channel_snapshot_get_latest(), ast_channel_snapshot_get_latest_by_name(), ast_cli_complete(), ast_cli_perms_init(), ast_context_remove_extension_callerid2(), ast_control_tone(), ast_datastores_add(), ast_datastores_alloc_datastore(), ast_db_deltree(), ast_db_gettree(), ast_dns_resolve(), ast_dns_resolve_ipv6_and_ipv4(), ast_dns_resolve_recurring(), ast_dns_resolver_register(), ast_dns_resolver_set_result(), ast_dnsmgr_get_family(), ast_eivr_senddtmf(), ast_el_read_default_histfile(), ast_el_write_default_histfile(), ast_endpoint_add_channel(), ast_endpoint_create(), ast_endpoint_latest_snapshot(), ast_endpoint_set_max_channels(), ast_endpoint_set_state(), ast_endpoint_snapshot_create(), ast_escape(), ast_escape_c(), ast_false(), ast_format_cache_set(), ast_format_cap_update_by_allow_disallow(), ast_frame_dump(), ast_get_chan_applicationmap(), ast_get_encoded_char(), ast_get_enum(), ast_get_group(), ast_get_indication_zone(), ast_get_namedgroups(), ast_get_time_t(), ast_get_timeval(), ast_http_create_response(), ast_http_get_json(), ast_http_get_post_vars(), ast_http_header_parse(), ast_http_send(), ast_iax2_new(), ast_include_new(), ast_is_valid_string(), ast_jb_read_conf(), ast_json_vpack(), ast_linear_stream(), ast_load_realtime_fields(), ast_logger_create_channel(), ast_makesocket(), ast_manager_build_bridge_state_string_prefix(), ast_manager_register2(), ast_media_cache_create_or_update(), ast_media_cache_delete(), ast_media_cache_exists(), ast_media_cache_retrieve(), ast_media_cache_retrieve_metadata(), ast_media_get_description(), ast_media_get_format_cap(), ast_media_index_update_for_file(), ast_module_check(), ast_moh_files_next(), ast_monitor_change_fname(), ast_monitor_start(), ast_monitor_stop(), ast_msg_send(), ast_multi_channel_blob_add_channel(), ast_multi_channel_blob_get_channel(), ast_multi_channel_blob_get_channels(), ast_multicast_rtp_create_options(), ast_multicast_rtp_options_get_format(), ast_mwi_mailbox_alloc(), ast_mwi_mailbox_delete(), ast_mwi_mailbox_get(), ast_parse_arg(), ast_parse_digest(), ast_pbx_hangup_handler_push(), ast_phoneprov_add_extension(), ast_phoneprov_provider_register(), ast_pickup_call(), ast_playtones_start(), ast_privacy_set(), ast_publish_device_state_full(), ast_queue_hold(), ast_redirecting_reason_name(), ast_register_application2(), ast_register_indication(), ast_remotecontrol(), ast_rtp_dtls_cfg_parse(), ast_rtp_dtls_cfg_validate(), ast_rtp_engine_register2(), ast_rtp_glue_register2(), ast_rtp_instance_new(), ast_rtp_publish_rtcp_message(), ast_sendtext(), ast_sendtext_data(), ast_set_cc_agent_dialstring(), ast_set_cc_callback_macro(), ast_set_cc_callback_sub(), ast_set_hangupsource(), ast_set_indication_country(), ast_sip_auth_vector_init(), ast_sip_cli_traverse_objects(), ast_sip_create_ami_event(), ast_sip_create_dialog_uac(), ast_sip_create_rdata_with_contact(), ast_sip_create_subscription(), ast_sip_default_outbound_endpoint(), ast_sip_for_each_aor(), ast_sip_format_contact_ami(), ast_sip_get_host_ip(), ast_sip_get_transport_name(), ast_sip_location_create_contact(), ast_sip_location_retrieve_contact_and_aor_from_list_filtered(), ast_sip_message_apply_transport(), ast_sip_modify_id_header(), ast_sip_persistent_endpoint_add_to_regcontext(), ast_sip_persistent_endpoint_update_state(), ast_sip_publish_client_add_datastore(), ast_sip_publish_client_alloc_datastore(), ast_sip_register_endpoint_identifier_with_name(), ast_sip_register_event_publisher_handler(), ast_sip_register_publish_handler(), ast_sip_register_subscription_handler(), ast_sip_sched_is_task_running_by_name(), ast_sip_sched_task_cancel_by_name(), ast_sip_sched_task_get_next_run_by_name(), ast_sip_sched_task_get_times_by_name2(), ast_sip_schedule_task(), ast_sip_session_add_datastore(), ast_sip_session_alloc_datastore(), ast_sip_session_create_outgoing(), ast_sip_session_media_get_transport(), ast_sip_set_tpselector_from_transport_name(), ast_sip_transport_state_set_preferred_identity(), ast_sip_transport_state_set_service_routes(), ast_sip_transport_state_set_transport(), ast_sorcery_alloc(), ast_sorcery_retrieve_by_id(), ast_speech_find_engine(), ast_speech_unregister2(), ast_statsd_log_string(), ast_stir_shaken_get_profile(), ast_str_substitute_variables_full(), ast_stream_and_wait(), ast_stream_topology_append_stream(), ast_stream_topology_set_stream(), ast_strings_match(), ast_strsep(), ast_taskprocessor_get(), AST_TEST_DEFINE(), ast_true(), ast_tzset(), ast_unreal_new_channels(), ast_uri_is_secure(), ast_var_channels_table(), ast_variable_delete(), ast_variable_list_from_string(), ast_variable_update(), ast_vector_string_split(), ast_websocket_uri_cb(), ast_xmldoc_build_arguments(), ast_xmldoc_build_final_response(), ast_xmldoc_build_list_responses(), ast_xmldoc_build_seealso(), ast_xmldoc_load_documentation(), asterisk_publication_devicestate(), asterisk_publication_devicestate_refresh(), asterisk_publication_mailboxstate(), asterisk_publication_mwi_refresh(), asterisk_start_devicestate_publishing(), asterisk_start_mwi_publishing(), astman_send_list_complete_start_common(), astman_send_response_full(), async_delete_name_rec(), async_play_sound_helper(), asyncgoto_exec(), attempt_thread(), attended_transfer_exec(), audiosocket_exec(), audiosocket_request(), auth_apply(), auth_exec(), auth_http_callback(), authenticate(), authenticate_reply(), authenticate_verify(), autopause2int(), background_detect_exec(), base64_helper(), base_process_party_a(), begin_dial_prerun(), blind_transfer_exec(), bridge_agent_hold_push(), bridge_base_init(), bridge_builtin_set_limits(), bridge_check_monitor(), bridge_exec(), bridge_features_duration_callback(), bridge_handle_trip(), bridge_parking_push(), bridge_personality_atxfer_push(), bridge_topics_init(), bridgeadd_exec(), bridgewait_exec(), bucket_file_update_path(), bucket_http_wizard_retrieve_id(), build_calendar(), build_contact(), build_device(), build_gateway(), build_mapping(), build_node_children(), build_nonce(), build_peer(), build_profile(), build_reply_digest(), build_user(), builtin_features_helper(), cache_get_callno_locked(), caldav_add_event(), caldav_load_calendar(), caldav_request(), caldav_write_event(), calendar_busy_exec(), calendar_query_exec(), calendar_query_result_exec(), calendar_write_exec(), caller_id_handler(), callerid_feed(), callerid_genmsg(), cause_to_reason(), cc_esc_publish_handler(), cc_handle_publish_error(), cc_unique_append(), cdr_format_var_internal(), cdr_object_create_public_records(), cdr_object_get_by_name(), cdr_prop_write_callback(), cdr_read(), cdr_read_callback(), cdr_write(), cdr_write_callback(), cel_channel_app_change(), cel_channel_linkedid_change(), cel_dial_cb(), cel_linkedid_ref(), celgenuserevent_exec(), chan_pjsip_new(), chanavail_exec(), change_monitor_action(), change_redirecting_information(), channel_admin_exec(), channel_dial_cb(), channel_dialplan(), channel_do_masquerade(), channel_fill_empty_accountcode(), channel_fill_empty_peeraccount(), channel_hold_cb(), channel_newexten(), channel_read_pjsip(), channel_read_rtcp(), channel_read_rtp(), channel_req_accountcodes(), channel_spy(), chanspy_exec(), chararray_handler_fn(), check_access(), check_blacklist(), check_bridge_play_sound(), check_date_header(), check_day(), check_dow(), check_match(), check_month(), check_new_cdr_needed(), check_password(), check_regcontext(), check_retire_linkedid(), check_sip_domain(), check_timerange(), cleaned_basedn(), clear_stats(), cli_complete(), cli_complete_notify(), cli_console_dial(), cli_console_sendtext(), cli_contact_get_container(), cli_odbc_read(), cli_print_body(), cli_qualify(), cli_reload_qualify_endpoint(), cli_show_qualify_endpoint(), client_config_apply(), close_client(), cmp_strings(), commit_exec(), common_exec(), compare(), compile_script(), complete_agent(), complete_agent_logoff(), complete_ari_app(), complete_ari_user(), complete_bridge_live(), complete_number(), complete_parking_lot(), conf_ended(), conf_exec(), conf_find_bridge_profile(), conf_find_user_profile(), conf_run(), conf_set_menu_to_user(), confbridge_exec(), confbridge_handle_atxfer(), config_curl(), config_ldap(), config_line(), config_module(), config_parse_variables(), config_text_file_load(), configuration_parse_unsigned_integer(), confkick_exec(), connection_dead(), console_dial(), console_new(), console_print(), contact_acl_to_str(), contact_apply_handler(), contactstatus_to_json(), control_list_create(), controlplayback_exec(), controlplayback_manager(), copy_all_header(), copy_header(), copy_message(), copy_rules(), copy_variables(), copy_via_headers(), count_exec(), create_addr(), create_addr_from_peer(), create_channel_name(), create_dynamic_lot_full(), create_local_sdp(), create_new_id_hdr(), create_out_of_dialog_request(), create_outgoing_sdp_stream(), create_queue_member(), create_rtp(), create_sound_blob(), create_transaction(), create_unsolicited_mwi_subscriptions(), create_vmaccount(), crement_function_read(), csv_log(), csv_quote(), custom_devstate_callback(), custom_prepare(), custom_presence_callback(), dahdi_handle_event(), dahdi_new(), dahdi_read(), dahdiscan_exec(), database_increment(), declined_handler(), delete_existing_cb(), deltree_exec(), destroy_endpoint(), destroy_mysql(), destroy_pgsql(), destroy_trans(), detect_write(), determine_actual_value(), determine_sip_publish_type(), determine_starting_point(), device_state_alloc(), device_state_cb(), device_state_subscription_create(), devstate_write(), dial_append_common(), dial_exec_full(), dial_handle_playtones(), dialgroup_read(), dialgroup_refreshdb(), dialog_info_generate_body_content(), dialout(), dialplan_has_destination_cb(), dictate_exec(), directory_exec(), disa_exec(), dns_query_alloc(), do_forward(), do_message(), do_monitor(), do_notify(), do_pause_or_unpause(), does_category_match(), does_id_conflict(), does_method_match(), domain_alias_apply(), dtmf_store_framehook(), dtmfstore_exec(), dump_cause(), dump_consumer(), dump_hint(), dumpchan_exec(), dundi_exec(), dundi_flags2str(), dundi_helper(), dundi_hint2str(), dundi_lookup_local(), dundi_query_thread(), dundi_show_mappings(), dundi_show_peer(), dynamic_dtmf_hook_add(), enable_jack_hook(), endpoint_acl_handler(), endpoint_internal_create(), enum_callback(), enum_query_read(), env_write(), event_session_alloc(), events_handler(), ewscal_load_calendar(), exchangecal_load_calendar(), exchangecal_write_event(), exec_exec(), execif_exec(), execute_state_callback(), expand_gosub_args(), exten_state_publisher_cb(), extension_match_core(), extension_presence_state_helper(), extenspy_exec(), external_media_audiosocket_tcp(), extract_uri(), fast_originate(), feature_automixmonitor(), feature_automonitor(), festival_exec(), fetch_icalendar(), fileexists_core(), filename_parse(), filter_outgoing_message(), filter_session_outgoing_message(), find_account(), find_aor(), find_aor_for_resource(), find_aor_name(), find_app_by_name(), find_body_generator_accept(), find_channel_parking_lot_name(), find_cli(), find_conf_realtime(), find_endpoint(), find_header(), find_line_by_name(), find_or_create(), find_queue_by_name_rt(), find_realtime_gw(), find_registrar_aor(), find_request_serializer(), find_sdp(), find_sip_method(), find_table(), find_user(), findmeexec(), forkcdr_exec(), format_log_default(), format_log_plain(), forward_message(), forwards_create(), free_user_final(), freq_parser(), func_channel_read(), func_channel_write_real(), func_confbridge_helper(), func_confbridge_info(), func_get_parkingslot_channel(), func_header_read(), func_read_header(), func_read_headers(), func_write_header(), function_amiclient(), function_db_delete(), function_db_read(), function_enum(), function_eval(), function_fieldnum_helper(), function_realtime_read(), function_realtime_readdestroy(), function_realtime_store(), function_realtime_write(), function_txtcidname(), generate_parked_user(), generic_fax_exec(), generic_recall(), get_also_info(), get_attestation_from_payload(), get_buddy_status(), get_container(), get_destination(), get_domain(), get_in_brackets_const(), get_in_brackets_full(), get_interface_helper(), get_key(), get_name_and_number(), get_name_from_variable(), get_or_create_subscription(), get_pai(), get_path_to_public_key(), get_queue_member_status(), get_range(), get_realm(), get_refer_info(), get_resource_display_name(), get_rpid(), get_sip_pvt_from_replaces(), get_subscription(), get_timerange(), get_transfer_context(), get_transport_str2enum(), global_apply(), gosub_exec(), goto_exten(), goto_parser(), grab_transfer(), group_function_read(), group_show_channels(), h264_generate_sdp_fmtp(), h264_getjoint(), handle_aor(), handle_attended_transfer(), handle_blind_transfer(), handle_bridge_enter(), handle_cc_notify(), handle_cc_subscribe(), handle_chanlist(), handle_cli_check_permissions(), handle_cli_confbridge_show_bridge_profile(), handle_cli_confbridge_show_user_profile(), handle_cli_confbridge_start_record(), handle_cli_config_reload(), handle_cli_database_show(), handle_cli_database_showkey(), handle_cli_dialplan_save(), handle_cli_dynamic_level_test(), handle_cli_iax2_show_cache(), handle_cli_iax2_show_peer(), handle_cli_iax2_show_users(), handle_cli_indication_add(), handle_command_response(), handle_controlstreamfile(), handle_debug(), handle_dial_message(), handle_dial_page(), handle_endpoint(), handle_getvariable(), handle_hangup(), handle_incoming(), handle_incoming_request(), handle_incoming_sdp(), handle_manager_bridge_tech_suspend(), handle_options(), handle_orig(), handle_playtones(), handle_queue_add_member(), handle_registrations(), handle_request_bye(), handle_request_info(), handle_request_invite(), handle_request_invite_st(), handle_request_notify(), handle_request_options(), handle_request_publish(), handle_request_refer(), handle_request_subscribe(), handle_request_update(), handle_response(), handle_response_invite(), handle_response_notify(), handle_response_publish(), handle_response_refer(), handle_response_register(), handle_saydatetime(), handle_show_dialplan(), handle_soft_key_event_message(), handle_stimulus_message(), handle_trace(), handle_verbose(), handle_voicemail_show_aliases(), handle_voicemail_show_users(), has_voicemail(), hashtab_compare_extens(), header_identify_match_check(), hep_queue_cb(), hepv3_config_pre_apply(), hold_intercept_fn_write(), hook_off(), hook_on(), hook_re_enable(), http_body_discard_chunk_trailer_headers(), http_callback(), http_request_headers_get(), http_server_get_by_addr(), iax2_call(), iax2_datetime(), iax2_prov_app(), iax2_request(), iax_firmware_append(), iax_firmware_get_version(), iax_provflags2str(), ical_load_calendar(), icalendar_add_event(), ident_handler(), iftime(), import_helper(), inboxcount2(), incoming_in_dialog_request(), init_acf_query(), init_jack_data(), initialize_cc_max_requests(), initreqprep(), insert_penaltychange(), inspect_module(), internal_aco_type_find(), internal_dnsmgr_lookup(), ip_identify_apply(), ip_identify_match_handler(), is_argument(), is_media_state_valid(), is_new_rec_file(), is_prefix(), is_preload(), is_unsolicited_allowed(), is_valid_dialstatus(), is_valid_tone_zone(), is_video_dest(), isAnsweringMachine(), isexten_function_read(), jack_exec(), jb_choose_impl(), jb_framedata_init(), jingle_action_hook(), jingle_alloc(), jingle_interpret_content(), jingle_interpret_description(), jingle_interpret_google_transport(), jingle_interpret_ice_udp_transport(), jingle_new(), jingle_outgoing_hook(), jingle_request(), jingle_send_error_response(), join_conference_bridge(), key_dial_page(), key_history(), key_main_page(), kill_if_unfound(), launch_monitor_thread(), ldap_reconnect(), ldap_table_config_add_attribute(), leave_voicemail(), list_item_handler(), load_aliases(), load_asterisk_conf(), load_column_config(), load_config(), load_endpoint(), load_modules(), load_moh_classes(), load_mysql_config(), load_odbc_config(), load_realtime_queues(), load_realtime_rules(), load_values_config(), local_ast_moh_start(), log_events(), log_exec(), logger_print_normal(), loopback_parse(), lua_get_variable(), lua_get_variable_value(), main(), make_components(), make_dir(), make_email_file(), make_filename(), make_fn(), make_logchannel(), man_do_variable_value(), manager_add_queue_member(), manager_bridge_destroy(), manager_bridge_info(), manager_bridge_kick(), manager_bridge_tech_list(), manager_bridges_list(), manager_change_priority_caller_on_queue(), manager_dbdel(), manager_dbdeltree(), manager_dbget(), manager_dbput(), manager_dialplan_extension_add(), manager_dialplan_extension_remove(), manager_fax_session(), manager_fax_stats(), manager_iax2_show_peer_list(), manager_iax2_show_peers(), manager_iax2_show_registry(), manager_jabber_send(), manager_list_voicemail_users(), manager_match_mailbox(), manager_mixmonitor(), manager_modulecheck(), manager_moduleload(), manager_mute_mixmonitor(), manager_mutestream(), manager_notify(), manager_optimize_away(), manager_park(), manager_parking_lot_list(), manager_parking_status(), manager_pause_queue_member(), manager_play_dtmf(), manager_play_mf(), manager_queue_log_custom(), manager_queue_member_penalty(), manager_queue_member_ringinuse(), manager_queue_rule_show(), manager_queues_status(), manager_queues_summary(), manager_remove_queue_member(), manager_request_withdraw_caller_from_queue(), manager_show_registry(), manager_sip_peer_status(), manager_sip_qualify_peer(), manager_sip_show_peer(), manager_sip_show_peers(), manager_sipnotify(), manager_skinny_show_device(), manager_skinny_show_line(), manager_status_voicemail_user(), manager_stop_mixmonitor(), mark_parsed_methods(), mark_unfound(), match_aor(), matchcid(), math(), mbl_load_adapter(), mbl_load_device(), mbl_sendsms_exec(), mbl_status_exec(), md5(), media_cache_item_populate_from_astdb(), meetmemute(), meetmestate(), message_playback_callback_fn(), message_range_and_existence_check(), message_received_handler(), message_template_find(), message_template_parse_filebody(), messagecount(), messaging_app_unsubscribe_endpoint(), mgcp_call(), mgcp_hangup(), mgcp_new(), mgcp_prune_realtime_gateway(), mgcp_request(), mgcp_ss(), mgcpsock_read(), milliwatt_exec(), minivm_accmess_exec(), minivm_account_func_read(), minivm_counter_func_read(), minivm_delete_exec(), minivm_greet_exec(), minivm_mwi_exec(), minivm_notify_exec(), minivm_record_exec(), mixmonitor_exec(), mixmonitor_save_prep(), mixmonitor_thread(), mkintf(), module_load_helper_on_file(), moh_parse_options(), morsecode_exec(), mp3_exec(), msg_send(), msg_send_exec(), msg_set_var_full(), msg_to_endpoint(), mssql_connect(), multicast_rtp_request(), mwi_contact_changed(), mwi_contact_deleted(), mwi_create_state(), mwi_generate_body_content(), mwi_mailbox_delete(), mwi_mailbox_get(), mwi_mailbox_update(), mwi_new_subscribe(), mwi_on_aor(), mwi_state_create_message(), mwi_subscription_alloc(), mwi_subscription_established(), mwi_to_event(), mwi_validate_for_aor(), mysql_reconnect(), named_acl_find_realtime(), named_groups_handler(), new_outgoing(), new_realtime_sqlite3_db(), newpvt(), notify_endpoint(), notify_message(), notify_new_message(), notify_uri(), odbc_log(), onedigit_goto(), onNewCallCreated(), onOutgoingCall(), ooh323_indicate(), ooh323_new(), ooh323_onReceivedSetup(), options_on_rx_request(), orig_app(), orig_exten(), originate_exec(), osp_auth(), osp_convert_inout(), osp_convert_outin(), osp_get_varfloat(), osp_get_varint(), osp_lookup(), osp_report_qos(), ospauth_exec(), ospfinished_exec(), osplookup_exec(), ospnext_exec(), page_exec(), park_and_announce_app_exec(), park_announce_update_cb(), park_app_exec(), park_app_parse_data(), park_common_setup(), parked_call_app_exec(), parking_blind_transfer_park(), parking_channel_set_roles(), parking_duration_callback(), parking_lot_cfg_create_extensions(), parking_lot_cfg_remove_extensions(), parse(), parse_allowed_methods(), parse_bookmark(), parse_config(), parse_cookies(), parse_data(), parse_dial_string(), parse_line(), parse_minse(), parse_moved_contact(), parse_oli(), parse_request(), parse_session_expires(), parse_simple_message_summary(), parse_sip_options(), parse_tag(), parse_tone_uri(), parse_uri_full(), parse_via(), participant_idle_mode_setup(), path_get_string(), path_outgoing_request(), payload_helper_app(), pbx_builtin_answer(), pbx_builtin_background(), pbx_builtin_execiftime(), pbx_builtin_gotoif(), pbx_builtin_gotoiftime(), pbx_builtin_hangup(), pbx_builtin_importvar(), pbx_builtin_incomplete(), pbx_builtin_saycharacters_case(), pbx_builtin_saynumber(), pbx_builtin_sayordinal(), pbx_builtin_setamaflags(), pbx_builtin_setvar(), pbx_builtin_setvar_helper(), pbx_builtin_setvar_multiple(), pbx_builtin_waitexten(), pbx_extension_helper(), pbx_find_extension(), pbx_load_config(), pbx_load_users(), pbx_set_overrideswitch(), pbx_substitute_variables_helper_full_location(), peer_ipcmp_cb_full(), permanent_uri_handler(), pgsql_reconnect(), pickup_exec(), pickupchan_exec(), pidf_validate_presence(), pjsip_acf_channel_read(), pjsip_acf_dial_contacts_read(), pjsip_acf_parse_uri_read(), pjsip_log_test_addr(), play_file(), play_mailbox_owner(), play_message(), play_message_by_id_helper(), play_message_callerid(), play_message_category(), play_message_datetime(), play_moh_exec(), play_record_review(), play_sound_helper(), playback_common(), playback_create(), playback_exec(), populate_cache(), port_str2int(), post_cdr(), pp_each_extension_helper(), pp_each_user_helper(), pqm_exec(), prep_email_sub_vars(), presence_read(), print_event_instance(), print_ext(), print_queue(), privacy_exec(), proc_422_rsp(), process_category(), process_dahdi(), process_description_file(), process_echocancel(), process_extmap_attributes(), process_ice_attributes(), process_message(), process_message_callback(), process_my_load_module(), process_sdp(), process_sdp_a_ice(), process_sdp_o(), process_text_line(), process_token(), prometheus_callback_register(), prometheus_config_pre_apply(), prometheus_metric_full_to_string(), proxy_from_config(), public_key_is_expired(), publish_acl_change(), publish_device_state_to_stasis(), publish_load_message_type(), publish_mwi_to_stasis(), publish_qualify_peer_done(), publish_request_initial(), publisher_start(), pubsub_on_rx_mwi_notify_request(), ql_exec(), queue_exec(), queue_function_exists(), queue_function_mem_read(), queue_function_mem_write(), queue_function_memberpenalty_read(), queue_function_memberpenalty_write(), queue_function_qac_dep(), queue_function_queuegetchannel(), queue_function_queuememberlist(), queue_function_queuewaitingcount(), queue_function_var(), queue_mwi_event(), queue_reload_request(), quote(), raise_msg_handler(), rcv_mac_addr(), read_dirs_cb(), read_exec(), read_mf_exec(), read_sf_exec(), readexten_exec(), realtime_common(), realtime_curl(), realtime_directory(), realtime_exec(), realtime_ldap_entry_to_var(), realtime_ldap_result_to_vars(), realtime_multi_curl(), realtime_multi_mysql(), realtime_multi_odbc(), realtime_multi_pgsql(), realtime_mysql(), realtime_odbc(), realtime_peer_by_addr(), realtime_pgsql(), realtime_sqlite3_destroy(), realtime_sqlite3_helper(), realtime_sqlite3_load(), realtime_sqlite3_require(), realtime_sqlite3_store(), realtime_sqlite3_update(), realtime_sqlite3_update2(), realtime_update_peer(), realtimefield_read(), reason_code_to_str(), receive_ademco_event(), receive_message(), receivefax_exec(), record_exec(), record_serializer(), recording_publish(), recvtext_exec(), refer_incoming_blind_request(), regex_filter_handler(), register_exten(), register_peer_exten(), register_verify(), registrar_on_rx_request(), registry_rerequest(), reload_config(), reload_exec(), reload_followme(), reload_queue_members(), reload_queues(), reload_single_member(), remove_from_queue(), replace(), reply_digest(), report_receive_fax_status(), report_send_fax_status(), reqprep(), request(), requirecalltoken_mark_auto(), res_sdp_crypto_parse_offer(), resetcdr_exec(), resource_event_handler(), resource_list_apply_handler(), respprep(), retrydial_exec(), ring_entry(), rollback_exec(), rotate_file(), rqm_exec(), rt_handle_member_record(), rtcp_do_debug_ip(), rtcp_message_handler(), rtp_do_debug_ip(), run_externnotify(), save_dialstatus(), save_response_fields_to_transport(), saycountedadj_exec(), saycountednoun_exec(), sayfile_exec(), sayunixtime_exec(), schedule_calendar_event(), sdp_fmtp_get(), sdp_requires_deferral(), search_directory(), search_directory_sub(), select_item_pause(), send_bridge_list_item_cb(), send_message(), send_refresh_cb(), send_unsolicited_mwi_notify(), send_unsolicited_mwi_notify_to_contact(), senddtmf_exec(), sendfax_exec(), sendmail(), sendmf_exec(), sendpage(), sendsf_exec(), sendtext(), sendtext_exec(), separate_mailbox(), session_outgoing_nat_hook(), set(), set_bridge_features_on_config(), set_callforwards(), set_config(), set_from_header(), set_id_from_hdr(), set_if(), set_insecure_flags(), set_local_info(), set_loop(), set_member_paused(), set_member_value(), set_outbound_authentication_credentials(), set_public_key_expiration(), set_queue_member_pause(), set_rec_filename(), set_remote_mslabel_and_stream_group(), set_sound(), set_touch_variable(), set_transport(), set_ttl(), set_var_handler(), set_voicemail_extension(), setsubstate(), setup_dahdi_int(), setup_mixmonitor(), setup_mixmonitor_ds(), setup_park_common_datastore(), setup_privacy_args(), setup_profile_caller(), setup_profile_paged(), setup_stunaddr(), sha1(), shared_read(), should_queue_connected_line_update(), show_main_page(), show_sound_info_cb(), sip_acf_channel_read(), sip_addheader(), sip_call(), sip_cc_agent_respond(), sip_cc_monitor_suspend(), sip_cc_monitor_unsuspend(), sip_dialog_create_contact(), sip_dialog_create_from(), sip_endpoint_apply_handler(), sip_get_cc_information(), sip_is_token(), sip_new(), sip_options_qualify_contact(), sip_options_synchronize_endpoint(), sip_outbound_publisher_init(), sip_outbound_publisher_set_uri(), sip_outbound_publisher_set_uris(), sip_outbound_registration_apply(), sip_outbound_registration_regc_alloc(), sip_parse_host(), sip_parse_register_line(), sip_pidf_validate(), sip_poke_peer(), sip_prepare_socket(), sip_publisher_service_queue(), sip_reason_code_to_str(), sip_removeheader(), sip_report_chal_sent(), sip_report_failed_challenge_response(), sip_report_security_event(), sip_request_call(), sip_send_mwi_to_peer(), sip_show_channel(), sip_show_registry(), sip_show_settings(), sip_show_user(), sip_sipredirect(), sip_subscribe_mwi(), sip_uri_cmp(), sip_uri_headers_cmp(), sip_uri_params_cmp(), sipinfo_send(), skel_exec(), skinny_new(), skinny_register(), skinny_request(), sla_build_station(), sla_build_trunk(), sla_check_device(), sla_queue_event_conf(), sla_state(), sla_station_destructor(), sla_station_exec(), sla_trunk_destructor(), smdi_md_q_cmp_fn(), smdi_msg_find(), smdi_msg_retrieve_read(), sms_exec(), socket_process_helper(), softhangup_exec(), sorcery_astdb_open(), sorcery_config_open(), sorcery_config_retrieve_regex(), sorcery_is_configuration_met(), sorcery_is_explicit_name_met(), sorcery_memory_cache_ami_expire(), sorcery_memory_cache_ami_expire_object(), sorcery_memory_cache_ami_populate(), sorcery_memory_cache_ami_stale(), sorcery_memory_cache_ami_stale_object(), sorcery_memory_cache_close(), sorcery_memory_cache_load(), sorcery_memory_cache_open(), sorcery_memory_retrieve_regex(), sorcery_realtime_open(), sorcery_realtime_retrieve_regex(), spawn_mp3(), speech_background(), split_ext(), start_automixmonitor(), start_automonitor(), start_mixmonitor_callback(), start_monitor_action(), start_monitor_exec(), stasis_app_control_moh_start(), stasis_app_control_play_uri(), stasis_app_control_record(), stasis_app_control_snoop(), stasis_app_device_states_to_json(), stasis_app_recording_if_exists_parse(), static_callback(), stir_shaken_acl_handler(), stir_shaken_certificate_apply(), stir_shaken_incoming_request(), stir_shaken_outgoing_request(), stir_shaken_verify_check_empty_strings(), stir_shaken_verify_json(), stir_shaken_verify_setup_file_paths(), stop_automixmonitor(), stop_automonitor(), stop_mixmonitor_full(), stop_monitor_action(), strbetween(), stream_echo_exec(), stringfield_handler_fn(), strings_to_mask(), strreplace(), sub_bridge_update_handler(), substituted(), subsystem_alert_decrement(), subsystem_alert_increment(), system_exec_helper(), system_registry_to_ami(), t38_initialize_session(), talk_detect_fn_write(), test_msg_has_destination_cb(), testclient_exec(), testserver_exec(), transfer(), transfer_exec(), transfer_refer(), transmit_cfwdstate(), transmit_fake_auth_response(), transmit_info_with_aoc(), transmit_invite(), transmit_modify_request(), transmit_modify_with_sdp(), transmit_notify_request(), transmit_notify_request_with_callerid(), transmit_register(), transmit_request_with_auth(), transport_apply(), transport_localnet_handler(), transport_tls_file_handler(), transport_tls_method_handler(), try_calling(), try_firmware(), try_suggested_sip_codec(), tryexec_exec(), unalloc_sub(), unbound_config_preapply(), unicast_rtp_request(), unistim_call(), unistim_new(), unistim_request(), unregister_exten(), update_connectedline(), update_from(), update_odbc(), update_realtime_member_field(), update_realtime_members(), update_registry(), upqm_exec(), uri_parse_and_default(), uridecode(), uriencode(), user_event_hook_cb(), userevent_exec(), ustmtext(), valid_exit(), validate_metric(), validate_metric_type_counter(), validate_metric_type_gauge(), validate_metric_type_set(), validate_metric_type_timer(), validate_name(), validate_publish_config(), validate_user_cb(), verbose_exec(), vm_authenticate(), vm_exec(), vm_execmain(), vm_mailbox_snapshot_create(), vm_msg_forward(), vm_msg_move(), vm_msg_remove(), vm_newuser_setup(), vm_options(), vm_playmsgexec(), vm_sayname(), vmauthenticate(), vmu_tm(), volume_write(), wait_exec(), wait_for_answer(), wait_for_winner(), waitfor_exec(), waitforcond_exec(), waituntil_exec(), wizard_apply_handler(), word_match(), write_metadata(), xml_translate(), xmldoc_build_field(), xmldoc_get_node(), xmldoc_get_syntax_fun(), xmldoc_parse_specialtags(), xmldoc_update_config_type(), xmpp_client_authenticate_sasl(), xmpp_client_config_post_apply(), xmpp_client_reconnect(), xmpp_client_send_message(), xmpp_client_set_presence(), xmpp_config_prelink(), xmpp_join_exec(), xmpp_leave_exec(), xmpp_pak_message(), xmpp_pak_presence(), xmpp_pubsub_iq_create(), xmpp_send_exec(), xmpp_sendgroup_exec(), and zapateller_exec().

◆ ast_strsep()

char* ast_strsep ( char **  s,
const char  sep,
uint32_t  flags 
)

Act like strsep but ignore separators inside quotes.

Parameters
sPointer to address of the string to be processed. Will be modified and can't be constant.
sepA single character delimiter.
flagsControls post-processing of the result. AST_STRSEP_TRIM trims all leading and trailing whitespace from the result. AST_STRSEP_STRIP does a trim then strips the outermost quotes. You may want to trim again after the strip. Just OR both the TRIM and STRIP flags. AST_STRSEP_UNESCAPE unescapes '\' sequences. AST_STRSEP_ALL does all of the above processing.
Returns
The next token or NULL if done or if there are more than 8 levels of nested quotes.

This function acts like strsep with three exceptions... The separator is a single character instead of a string. Separators inside quotes are treated literally instead of like separators. You can elect to have leading and trailing whitespace and quotes stripped from the result and have '\' sequences unescaped.

Like strsep, ast_strsep maintains no internal state and you can call it recursively using different separators on the same storage.

Also like strsep, for consistent results, consecutive separators are not collapsed so you may get an empty string as a valid result.

Examples:

char *mystr = ast_strdupa("abc=def,ghi='zzz=yyy,456',jkl");
char *token, *token2, *token3;
while((token = ast_strsep(&mystr, ',', AST_STRSEP_STRIP))) {
// 1st token will be aaa=def
// 2nd token will be ghi='zzz=yyy,456'
while((token2 = ast_strsep(&token, '=', AST_STRSEP_STRIP))) {
// 1st token2 will be ghi
// 2nd token2 will be zzz=yyy,456
while((token3 = ast_strsep(&token2, ',', AST_STRSEP_STRIP))) {
// 1st token3 will be zzz=yyy
// 2nd token3 will be 456
// and so on
}
}
// 3rd token will be jkl
}
char * ast_strsep(char **s, const char sep, uint32_t flags)
Act like strsep but ignore separators inside quotes.
Definition: main/utils.c:1802

Definition at line 1802 of file main/utils.c.

1803 {
1804  char *st = *iss;
1805  char *is;
1806  int inquote = 0;
1807  int found = 0;
1808  char stack[8];
1809 
1810  if (ast_strlen_zero(st)) {
1811  return NULL;
1812  }
1813 
1814  memset(stack, 0, sizeof(stack));
1815 
1816  for(is = st; *is; is++) {
1817  if (*is == '\\') {
1818  if (*++is != '\0') {
1819  is++;
1820  } else {
1821  break;
1822  }
1823  }
1824 
1825  if (*is == '\'' || *is == '"') {
1826  if (*is == stack[inquote]) {
1827  stack[inquote--] = '\0';
1828  } else {
1829  if (++inquote >= sizeof(stack)) {
1830  return NULL;
1831  }
1832  stack[inquote] = *is;
1833  }
1834  }
1835 
1836  if (*is == sep && !inquote) {
1837  *is = '\0';
1838  found = 1;
1839  *iss = is + 1;
1840  break;
1841  }
1842  }
1843  if (!found) {
1844  *iss = NULL;
1845  }
1846 
1847  if (flags & AST_STRSEP_STRIP) {
1848  st = ast_strip_quoted(st, "'\"", "'\"");
1849  }
1850 
1851  if (flags & AST_STRSEP_TRIM) {
1852  st = ast_strip(st);
1853  }
1854 
1855  if (flags & AST_STRSEP_UNESCAPE) {
1856  ast_unescape_quoted(st);
1857  }
1858 
1859  return st;
1860 }
void ast_unescape_quoted(char *quote_str)
Unescape quotes in a string.
Definition: main/utils.c:842
char * ast_strip_quoted(char *s, const char *beg_quotes, const char *end_quotes)
Strip leading/trailing whitespace and quotes from a string.
Definition: main/utils.c:1785

References ast_strip(), ast_strip_quoted(), ast_strlen_zero(), AST_STRSEP_STRIP, AST_STRSEP_TRIM, AST_STRSEP_UNESCAPE, ast_unescape_quoted(), and NULL.

Referenced by AST_TEST_DEFINE(), ast_variable_list_from_string(), does_category_match(), originate_exec(), reload_exec(), and wizard_apply_handler().

◆ ast_tech_to_upper()

char * ast_tech_to_upper ( char *  dev_str)
inline

Convert the tech portion of a device string to upper case.

Return values
dev_strthe char* passed in for convenience

Definition at line 1214 of file strings.h.

1225 {

Referenced by ast_endpoint_latest_snapshot(), create_new_generic_list(), find_generic_monitor_instance_list(), pvt_cause_cmp_fn(), and pvt_cause_hash_fn().

◆ ast_to_camel_case_delim()

char* ast_to_camel_case_delim ( const char *  s,
const char *  delim 
)

Attempts to convert the given string to camel case using the specified delimiter.

note - returned string needs to be freed

Parameters
sthe string to convert
delimdelimiter to parse out
Returns
The string converted to "CamelCase"
Since
12

Definition at line 2295 of file main/utils.c.

2296 {
2297  char *res = ast_strdup(s);
2298  char *front, *back, *buf = res;
2299  int size;
2300 
2301  front = strtok_r(buf, delim, &back);
2302 
2303  while (front) {
2304  size = strlen(front);
2305  *front = toupper(*front);
2306  ast_copy_string(buf, front, size + 1);
2307  buf += size;
2308  front = strtok_r(NULL, delim, &back);
2309  }
2310 
2311  return res;
2312 }
#define ast_strdup(str)
A wrapper for strdup()
Definition: astmm.h:241

References ast_copy_string(), ast_strdup, buf, and NULL.

◆ ast_trim_blanks()

char * ast_trim_blanks ( char *  str)
inline

◆ ast_true()

int attribute_pure ast_true ( const char *  val)

Make sure something is true. Determine if a string containing a boolean value is "true". This function checks to see whether a string passed to it is an indication of an "true" value. It checks to see if the string is "yes", "true", "y", "t", "on" or "1".

Return values
-1if "true".
0otherwise, like NULL pointer.
Examples
app_skel.c.

Definition at line 2097 of file main/utils.c.

2098 {
2099  if (ast_strlen_zero(s))
2100  return 0;
2101 
2102  /* Determine if this is a true value */
2103  if (!strcasecmp(s, "yes") ||
2104  !strcasecmp(s, "true") ||
2105  !strcasecmp(s, "y") ||
2106  !strcasecmp(s, "t") ||
2107  !strcasecmp(s, "1") ||
2108  !strcasecmp(s, "on"))
2109  return -1;
2110 
2111  return 0;
2112 }

References ast_strlen_zero().

Referenced by __ast_http_load(), __init_manager(), acf_curlopt_write(), acf_transaction_write(), action_agent_logoff(), action_originate(), action_status(), action_updateconfig(), actual_load_config(), agent_login_channel_config(), announce_user_count_all_handler(), aoc_cli_debug_enable(), apply_general_options(), apply_option(), ast_ari_bridges_add_channel_cb(), ast_ari_bridges_record_cb(), ast_ari_channels_record_cb(), ast_ari_events_event_websocket_ws_attempted_cb(), ast_ari_events_event_websocket_ws_established_cb(), ast_bridge_timelimit(), ast_jb_read_conf(), ast_rtp_dtls_cfg_parse(), AST_TEST_DEFINE(), ast_tls_read_conf(), autopause2int(), bool_handler_fn(), boolflag_handler_fn(), build_calendar(), build_device(), build_gateway(), build_peer(), build_user(), cdr_prop_write_callback(), check_debug(), client_bitfield_handler(), config_parse_variables(), custom_bitfield_handler(), customopt_handler(), encoding_format_handler(), festival_exec(), func_channel_write_real(), func_mute_write(), function_ooh323_write(), get_encrypt_methods(), global_bitfield_handler(), handle_common_options(), handle_logger_set_level(), handle_t38_options(), init_logger_chain(), internal_feature_write(), is_variable_true(), load_asterisk_conf(), load_config(), load_config_meetme(), load_module(), load_moh_classes(), load_odbc_config(), load_users(), loader_config_init(), manager_add_queue_member(), manager_dialplan_extension_add(), manager_mute_mixmonitor(), manager_mutestream(), manager_pause_queue_member(), manager_play_dtmf(), manager_queue_member_ringinuse(), mbl_load_adapter(), mbl_load_device(), message_template_build(), moh_parse_options(), new_realtime_sqlite3_db(), odbc_load_module(), osp_load(), osplookup_exec(), parse_config(), parse_empty_options(), parse_line(), pbx_load_config(), pbx_load_users(), permit_dtmf_interrupt(), pjsip_acf_moh_passthrough_write(), pjsip_set_logger_verbose(), prack_handler(), process_dahdi(), process_echocancel(), process_my_load_module(), profile_set_param(), queue_rules_set_global_params(), queue_set_global_params(), queue_set_param(), realtime_directory(), reload_config(), reload_followme(), reload_module(), reload_single_member(), rt_handle_member_record(), rtp_reload(), run_startup_commands(), sayunixtime_exec(), search_directory(), search_directory_sub(), set_active(), set_config(), sla_load_config(), smdi_load(), sorcery_config_open(), sorcery_memory_cache_ami_stale_object(), sorcery_memory_cache_open(), speex_write(), start_monitor_action(), strings_to_mask(), tds_load_module(), timers_handler(), transport_tls_bool_handler(), xfer_set(), xmldoc_get_syntax_cmd(), xmldoc_get_syntax_config_object(), xmldoc_get_syntax_fun(), and xmldoc_get_syntax_manager().

◆ ast_unescape_c()

char* ast_unescape_c ( char *  s)

Convert some C escape sequences.

(\b\f\n\r\t) 

into the equivalent characters. The string to be converted (will be modified).

Returns
The converted string.

Definition at line 1881 of file main/utils.c.

1882 {
1883  char c, *ret, *dst;
1884 
1885  if (src == NULL)
1886  return NULL;
1887  for (ret = dst = src; (c = *src++); *dst++ = c ) {
1888  if (c != '\\')
1889  continue; /* copy char at the end of the loop */
1890  switch ((c = *src++)) {
1891  case '\0': /* special, trailing '\' */
1892  c = '\\';
1893  break;
1894  case 'b': /* backspace */
1895  c = '\b';
1896  break;
1897  case 'f': /* form feed */
1898  c = '\f';
1899  break;
1900  case 'n':
1901  c = '\n';
1902  break;
1903  case 'r':
1904  c = '\r';
1905  break;
1906  case 't':
1907  c = '\t';
1908  break;
1909  }
1910  /* default, use the char literally */
1911  }
1912  *dst = '\0';
1913  return ret;
1914 }

References c, and NULL.

Referenced by ast_parse_digest().

◆ ast_unescape_semicolon()

char* ast_unescape_semicolon ( char *  s)

Strip backslash for "escaped" semicolons, the string to be stripped (will be modified).

Returns
The stripped string.

Definition at line 1862 of file main/utils.c.

1863 {
1864  char *e;
1865  char *work = s;
1866 
1867  while ((e = strchr(work, ';'))) {
1868  if ((e > work) && (*(e-1) == '\\')) {
1869  memmove(e - 1, e, strlen(e) + 1);
1870  work = e;
1871  } else {
1872  work = e + 1;
1873  }
1874  }
1875 
1876  return s;
1877 }

Referenced by sip_cli_notify().