2020-12-05 19:26:32 +08:00
|
|
|
#pragma once
|
|
|
|
|
2022-01-11 01:30:51 +08:00
|
|
|
#include "arch.h"
|
2020-12-05 19:26:32 +08:00
|
|
|
|
|
|
|
struct mg_str {
|
2021-09-15 14:43:48 +08:00
|
|
|
const char *ptr; // Pointer to string data
|
|
|
|
size_t len; // String len
|
2020-12-05 19:26:32 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
#define MG_NULL_STR \
|
|
|
|
{ NULL, 0 }
|
|
|
|
|
2022-01-23 14:10:14 +08:00
|
|
|
#define MG_C_STR(a) \
|
|
|
|
{ (a), sizeof(a) - 1 }
|
|
|
|
|
2021-07-15 09:18:32 +08:00
|
|
|
// Using macro to avoid shadowing C++ struct constructor, see #1298
|
|
|
|
#define mg_str(s) mg_str_s(s)
|
|
|
|
|
2020-12-05 19:26:32 +08:00
|
|
|
struct mg_str mg_str(const char *s);
|
2020-12-07 11:47:37 +08:00
|
|
|
struct mg_str mg_str_n(const char *s, size_t n);
|
2020-12-05 19:26:32 +08:00
|
|
|
int mg_lower(const char *s);
|
|
|
|
int mg_ncasecmp(const char *s1, const char *s2, size_t len);
|
|
|
|
int mg_casecmp(const char *s1, const char *s2);
|
|
|
|
int mg_vcmp(const struct mg_str *s1, const char *s2);
|
|
|
|
int mg_vcasecmp(const struct mg_str *str1, const char *str2);
|
|
|
|
int mg_strcmp(const struct mg_str str1, const struct mg_str str2);
|
|
|
|
struct mg_str mg_strstrip(struct mg_str s);
|
|
|
|
struct mg_str mg_strdup(const struct mg_str s);
|
|
|
|
const char *mg_strstr(const struct mg_str haystack, const struct mg_str needle);
|
2022-01-29 19:03:54 +08:00
|
|
|
bool mg_match(struct mg_str str, struct mg_str pattern, struct mg_str *caps);
|
|
|
|
bool mg_globmatch(const char *pattern, size_t plen, const char *s, size_t n);
|
|
|
|
bool mg_commalist(struct mg_str *s, struct mg_str *k, struct mg_str *v);
|