2
#include "mod_mono_config.h"
7
#include "glib_compat.h"
9
#define ASCII_TOLOWER(_ch_) (isascii ((int)(_ch_)) && isalpha ((int)(_ch_))) ? tolower ((_ch_)) : (_ch_)
12
g_strndup (const char *str, int n)
15
return strndup (str, n);
18
char *retval = malloc (n + 1);
20
strncpy (retval, str, n)[n] = 0;
27
static void add_to_vector (gchar ***vector, int size, gchar *token)
29
*vector = *vector == NULL ?
30
(gchar **) malloc (2 * sizeof (*vector)) :
31
(gchar **) realloc (*vector, (size + 1) * sizeof (*vector));
33
(*vector)[size - 1] = token;
36
static gchar **make_empty_vector ()
38
gchar **vector = (gchar**)malloc (2 * sizeof (vector));
44
gchar **g_strsplit (const gchar *string, const gchar *delimiter, int max_tokens)
46
gchar **vector = NULL;
47
int delimiter_len = strlen (delimiter);
52
if (!string || !*string)
53
return make_empty_vector ();
55
if (!delimiter || !*delimiter) {
56
add_to_vector (&vector, size, strdup (string));
60
if (strncmp (string, delimiter, delimiter_len) == 0) {
61
add_to_vector (&vector, size, strdup (""));
63
string += delimiter_len;
67
while (*string && !(max_tokens > 0 && size >= max_tokens)) {
70
if (*string == *delimiter && strncmp (string, delimiter, delimiter_len) == 0) {
72
string += delimiter_len;
74
while (*string && (*string != *delimiter || strncmp (string, delimiter, delimiter_len) != 0))
78
size_t toklen = (size_t)(string - c);
79
token = g_strndup (c, toklen);
81
if (strcmp (string, delimiter) != 0)
82
string += delimiter_len;
87
add_to_vector (&vector, size, token);
92
add_to_vector (&vector, size, strdup (string));
97
return make_empty_vector ();
99
vector [size - 1] = NULL;
104
gint g_ascii_strcasecmp (const gchar *s1, const gchar *s2)
112
ch1 = ASCII_TOLOWER (*s1);
113
ch2 = ASCII_TOLOWER (*s2);
120
} while (ch1 == ch2);
122
return (ch1 > ch2 ? 1 : ch1 < ch2 ? -1 : 0);
125
gchar* g_strdelimit (gchar *string, const gchar *delimiters, gchar new_delimiter)
132
if (delimiters == NULL)
133
delimiters = G_STR_DELIMITERS;
135
for (ptr = string; *ptr; ptr++) {
136
if (strchr (delimiters, *ptr))
137
*ptr = new_delimiter;
143
gchar* g_strdup (const gchar *str)
148
return (gchar*) strdup (str);
151
void g_free (gpointer mem)
159
gboolean g_ascii_isalpha (gchar c)
161
return (isascii ((int)c) && isalpha ((int)c));
164
void g_strfreev (gchar **str_array)
166
gchar **orig = str_array;
167
if (str_array == NULL)
169
while (*str_array != NULL){
176
gchar *g_strjoinv (const gchar *separator, gchar **str_array)
181
if (separator != NULL)
182
slen = strlen (separator);
187
for (i = 0; str_array [i] != NULL; i++){
188
len += strlen (str_array [i]);
192
return g_strdup ("");
193
if (slen > 0 && len > 0)
196
res = (char*)malloc (len);
197
strcpy (res, str_array [0]);
198
for (i = 1; str_array [i] != NULL; i++){
199
if (separator != NULL)
200
strcat (res, separator);
201
strcat (res, str_array [i]);