| 76 if (src == NULL) |
76 if (src == NULL) |
| 77 return NULL; |
77 return NULL; |
| 78 |
78 |
| 79 dst = g_convert_with_fallback(src, strlen(src), dstenc, srcenc, "?", |
79 dst = g_convert_with_fallback(src, strlen(src), dstenc, srcenc, "?", |
| 80 NULL, NULL, &err); |
80 NULL, NULL, &err); |
| 81 if (err != NULL) |
81 if (err != NULL) { |
| 82 { |
|
| 83 purple_debug_error("gg", "error converting from %s to %s: %s\n", |
82 purple_debug_error("gg", "error converting from %s to %s: %s\n", |
| 84 srcenc, dstenc, err->message); |
83 srcenc, dstenc, err->message); |
| 85 g_error_free(err); |
84 g_error_free(err); |
| 86 } |
85 } |
| 87 |
86 |
| 120 return g_strdup(str); |
119 return g_strdup(str); |
| 121 |
120 |
| 122 end_ptr = g_utf8_offset_to_pointer(str, g_utf8_pointer_to_offset(str, &str[n])); |
121 end_ptr = g_utf8_offset_to_pointer(str, g_utf8_pointer_to_offset(str, &str[n])); |
| 123 raw_len = end_ptr - str; |
122 raw_len = end_ptr - str; |
| 124 |
123 |
| 125 if (raw_len > n) |
124 if (raw_len > n) { |
| 126 { |
|
| 127 end_ptr = g_utf8_prev_char(end_ptr); |
125 end_ptr = g_utf8_prev_char(end_ptr); |
| 128 raw_len = end_ptr - str; |
126 raw_len = end_ptr - str; |
| 129 } |
127 } |
| 130 |
128 |
| 131 g_assert(raw_len <= n); |
129 g_assert(raw_len <= n); |
| 175 list_len = g_list_length(list); |
171 list_len = g_list_length(list); |
| 176 str_array = g_new(gchar*, list_len + 1); |
172 str_array = g_new(gchar*, list_len + 1); |
| 177 |
173 |
| 178 it = g_list_first(list); |
174 it = g_list_first(list); |
| 179 i = 0; |
175 i = 0; |
| 180 while (it) |
176 while (it) { |
| 181 { |
|
| 182 str_array[i++] = it->data; |
177 str_array[i++] = it->data; |
| 183 it = g_list_next(it); |
178 it = g_list_next(it); |
| 184 } |
179 } |
| 185 str_array[i] = NULL; |
180 str_array[i] = NULL; |
| 186 |
181 |
| 204 return buff; |
199 return buff; |
| 205 } |
200 } |
| 206 |
201 |
| 207 GList * ggp_list_truncate(GList *list, guint length, GDestroyNotify free_func) |
202 GList * ggp_list_truncate(GList *list, guint length, GDestroyNotify free_func) |
| 208 { |
203 { |
| 209 while (g_list_length(list) > length) |
204 while (g_list_length(list) > length) { |
| 210 { |
|
| 211 GList *last = g_list_last(list); |
205 GList *last = g_list_last(list); |
| 212 free_func(last->data); |
206 free_func(last->data); |
| 213 list = g_list_delete_link(list, last); |
207 list = g_list_delete_link(list, last); |
| 214 } |
208 } |
| 215 return list; |
209 return list; |
| 216 } |
210 } |
| 217 |
211 |
| 218 gchar * ggp_free_if_equal(gchar *str, const gchar *pattern) |
212 gchar * ggp_free_if_equal(gchar *str, const gchar *pattern) |
| 219 { |
213 { |
| 220 if (g_strcmp0(str, pattern) == 0) |
214 if (g_strcmp0(str, pattern) == 0) { |
| 221 { |
|
| 222 g_free(str); |
215 g_free(str); |
| 223 return NULL; |
216 return NULL; |
| 224 } |
217 } |
| 225 return str; |
218 return str; |
| 226 } |
219 } |