Mercurial > pidgin
annotate src/util.c @ 7000:9d038cc7e825
[gaim-migrate @ 7556]
forgot this
committer: Tailor Script <tailor@pidgin.im>
| author | Nathan Walp <nwalp@pidgin.im> |
|---|---|
| date | Sun, 28 Sep 2003 23:54:14 +0000 |
| parents | 083d1e4a9c78 |
| children | acd2a66e59ed |
| rev | line source |
|---|---|
| 1 | 1 /* |
| 2 * gaim | |
| 3 * | |
| 4 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
| 5 * | |
| 6 * This program is free software; you can redistribute it and/or modify | |
| 7 * it under the terms of the GNU General Public License as published by | |
| 8 * the Free Software Foundation; either version 2 of the License, or | |
| 9 * (at your option) any later version. | |
| 10 * | |
| 11 * This program is distributed in the hope that it will be useful, | |
| 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 * GNU General Public License for more details. | |
| 15 * | |
| 16 * You should have received a copy of the GNU General Public License | |
| 17 * along with this program; if not, write to the Free Software | |
| 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 19 * | |
| 20 */ | |
| 21 | |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5826
diff
changeset
|
22 #include "internal.h" |
| 3630 | 23 |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5826
diff
changeset
|
24 #include "conversation.h" |
|
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5826
diff
changeset
|
25 #include "debug.h" |
|
1575
427e1409917c
[gaim-migrate @ 1585]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1560
diff
changeset
|
26 #include "prpl.h" |
|
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5532
diff
changeset
|
27 #include "prefs.h" |
| 1 | 28 |
| 3630 | 29 static char home_dir[MAXPATHLEN]; |
| 30 | |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
31 char *full_date() |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
32 { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
33 char *date; |
| 70 | 34 time_t tme; |
| 35 | |
| 36 time(&tme); | |
| 37 date = ctime(&tme); | |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
38 date[strlen(date) - 1] = '\0'; |
| 70 | 39 return date; |
| 40 } | |
| 41 | |
| 4160 | 42 G_GNUC_CONST static gint badchar(char c) |
| 1 | 43 { |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
44 switch (c) { |
| 970 | 45 case ' ': |
| 46 case ',': | |
| 47 case '(': | |
| 48 case ')': | |
| 49 case '\0': | |
|
976
2586b2a3725e
[gaim-migrate @ 986]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
970
diff
changeset
|
50 case '\n': |
| 970 | 51 case '<': |
| 52 case '>': | |
|
1706
e6671b80a1f2
[gaim-migrate @ 1716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1622
diff
changeset
|
53 case '"': |
| 5176 | 54 case '\'': |
|
413
7ea55575cc01
[gaim-migrate @ 423]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
373
diff
changeset
|
55 return 1; |
| 970 | 56 default: |
| 57 return 0; | |
| 58 } | |
| 1 | 59 } |
| 60 | |
| 61 | |
|
1376
730a1a19b4cc
[gaim-migrate @ 1386]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1293
diff
changeset
|
62 gchar *sec_to_text(guint sec) |
| 1 | 63 { |
| 4834 | 64 guint daze, hrs, min; |
| 5341 | 65 char *ret = NULL; |
| 1 | 66 |
|
1826
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
67 daze = sec / (60 * 60 * 24); |
|
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
68 hrs = (sec % (60 * 60 * 24)) / (60 * 60); |
|
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
69 min = (sec % (60 * 60)) / 60; |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
70 sec = min % 60; |
| 1 | 71 |
|
1826
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
72 if (daze) { |
|
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
73 if (hrs || min) { |
|
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
74 if (hrs) { |
|
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
75 if (min) { |
| 5341 | 76 ret = g_strdup_printf( |
| 4834 | 77 "%d %s, %d %s, %d %s.", |
| 78 daze, ngettext("day","days",daze), | |
| 79 hrs, ngettext("hour","hours",hrs), min, ngettext("minute","minutes",min)); | |
|
1826
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
80 } else { |
| 5341 | 81 ret = g_strdup_printf( |
| 4834 | 82 "%d %s, %d %s.", |
| 83 daze, ngettext("day","days",daze), hrs, ngettext("hour","hours",hrs)); | |
|
1826
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
84 } |
|
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
85 } else { |
| 5341 | 86 ret = g_strdup_printf( |
| 4834 | 87 "%d %s, %d %s.", |
| 88 daze, ngettext("day","days",daze), min, ngettext("minute","minutes",min)); | |
|
1826
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
89 } |
|
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
90 } else |
| 5341 | 91 ret = g_strdup_printf("%d %s.", daze, ngettext("day","days",daze)); |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
92 } else { |
|
1826
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
93 if (hrs) { |
|
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
94 if (min) { |
| 5341 | 95 ret = g_strdup_printf( |
| 4834 | 96 "%d %s, %d %s.", |
| 97 hrs, ngettext("hour","hours",hrs), min, ngettext("minute","minutes",min)); | |
|
1826
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
98 } else { |
| 5341 | 99 ret = g_strdup_printf("%d %s.", hrs, ngettext("hour","hours",hrs)); |
|
1826
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
100 } |
|
7f889cdfa03e
[gaim-migrate @ 1836]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1815
diff
changeset
|
101 } else { |
| 5341 | 102 ret = g_strdup_printf("%d %s.", min, ngettext("minute","minutes",min)); |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
103 } |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
104 } |
| 1 | 105 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
106 return ret; |
| 1 | 107 } |
| 108 | |
| 5136 | 109 char *linkify_text(const char *text) |
| 1 | 110 { |
| 5136 | 111 const char *c, *t, *q = NULL; |
| 112 char *tmp; | |
|
1622
1acef460964a
[gaim-migrate @ 1632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1609
diff
changeset
|
113 char url_buf[BUF_LEN * 4]; |
| 5136 | 114 GString *ret = g_string_new(""); |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
115 /* Assumes you have a buffer able to cary at least BUF_LEN * 2 bytes */ |
| 1 | 116 |
| 5136 | 117 c = text; |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
118 while (*c) { |
| 5093 | 119 if(!q && (*c == '\"' || *c == '\'')) { |
| 120 q = c; | |
| 121 } else if(q) { | |
| 122 if(*c == *q) | |
| 123 q = NULL; | |
| 124 } else if (!g_ascii_strncasecmp(c, "<A", 2)) { | |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
125 while (1) { |
| 4793 | 126 if (!g_ascii_strncasecmp(c, "/A>", 3)) { |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
127 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
128 } |
| 5136 | 129 ret = g_string_append_c(ret, *c); |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
130 c++; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
131 if (!(*c)) |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
132 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
133 } |
| 5136 | 134 } else if ((*c=='h') && (!g_ascii_strncasecmp(c, "http://", 7) || |
| 135 (!g_ascii_strncasecmp(c, "https://", 8)))) { | |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
136 t = c; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
137 while (1) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
138 if (badchar(*t)) { |
| 925 | 139 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
140 if (*(t) == ',' && (*(t + 1) != ' ')) { |
| 925 | 141 t++; |
| 142 continue; | |
| 143 } | |
| 144 | |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
145 if (*(t - 1) == '.') |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
146 t--; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
147 strncpy(url_buf, c, t - c); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
148 url_buf[t - c] = 0; |
| 5136 | 149 g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", |
| 150 url_buf, url_buf); | |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
151 c = t; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
152 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
153 } |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
154 if (!t) |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
155 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
156 t++; |
| 1 | 157 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
158 } |
| 4793 | 159 } else if (!g_ascii_strncasecmp(c, "www.", 4)) { |
| 4160 | 160 if (c[4] != '.') { |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
161 t = c; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
162 while (1) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
163 if (badchar(*t)) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
164 if (t - c == 4) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
165 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
166 } |
| 925 | 167 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
168 if (*(t) == ',' && (*(t + 1) != ' ')) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
169 t++; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
170 continue; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
171 } |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
172 |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
173 if (*(t - 1) == '.') |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
174 t--; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
175 strncpy(url_buf, c, t - c); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
176 url_buf[t - c] = 0; |
| 5136 | 177 g_string_append_printf(ret, |
| 178 "<A HREF=\"http://%s\">%s</A>", url_buf, | |
| 179 url_buf); | |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
180 c = t; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
181 break; |
| 925 | 182 } |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
183 if (!t) |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
184 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
185 t++; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
186 } |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
187 } |
| 4793 | 188 } else if (!g_ascii_strncasecmp(c, "ftp://", 6)) { |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
189 t = c; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
190 while (1) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
191 if (badchar(*t)) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
192 if (*(t - 1) == '.') |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
193 t--; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
194 strncpy(url_buf, c, t - c); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
195 url_buf[t - c] = 0; |
| 5136 | 196 g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", |
| 197 url_buf, url_buf); | |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
198 c = t; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
199 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
200 } |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
201 if (!t) |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
202 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
203 t++; |
| 1 | 204 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
205 } |
| 4793 | 206 } else if (!g_ascii_strncasecmp(c, "ftp.", 4)) { |
| 4160 | 207 if (c[4] != '.') { |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
208 t = c; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
209 while (1) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
210 if (badchar(*t)) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
211 if (t - c == 4) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
212 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
213 } |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
214 if (*(t - 1) == '.') |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
215 t--; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
216 strncpy(url_buf, c, t - c); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
217 url_buf[t - c] = 0; |
| 5136 | 218 g_string_append_printf(ret, |
| 219 "<A HREF=\"ftp://%s\">%s</A>", url_buf, | |
| 220 url_buf); | |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
221 c = t; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
222 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
223 } |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
224 if (!t) |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
225 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
226 t++; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
227 } |
| 924 | 228 } |
| 4793 | 229 } else if (!g_ascii_strncasecmp(c, "mailto:", 7)) { |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
230 t = c; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
231 while (1) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
232 if (badchar(*t)) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
233 if (*(t - 1) == '.') |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
234 t--; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
235 strncpy(url_buf, c, t - c); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
236 url_buf[t - c] = 0; |
| 5136 | 237 g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", |
|
2614
3e2f455cb924
[gaim-migrate @ 2627]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
238 url_buf, url_buf); |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
239 c = t; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
240 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
241 } |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
242 if (!t) |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
243 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
244 t++; |
| 1 | 245 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
246 } |
| 5136 | 247 } else if (c != text && (*c == '@')) { |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
248 char *tmp; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
249 int flag; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
250 int len = 0; |
| 4160 | 251 const char illegal_chars[] = "!@#$%^&*()[]{}/|\\<>\":;\r\n \0"; |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
252 url_buf[0] = 0; |
| 1 | 253 |
| 4160 | 254 if (strchr(illegal_chars,*(c - 1)) || strchr(illegal_chars, *(c + 1))) |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
255 flag = 0; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
256 else |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
257 flag = 1; |
| 1 | 258 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
259 t = c; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
260 while (flag) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
261 if (badchar(*t)) { |
| 5136 | 262 ret = g_string_truncate(ret, ret->len - (len - 1)); |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
263 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
264 } else { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
265 len++; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
266 tmp = g_malloc(len + 1); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
267 tmp[len] = 0; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
268 tmp[0] = *t; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
269 strncpy(tmp + 1, url_buf, len - 1); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
270 strcpy(url_buf, tmp); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
271 url_buf[len] = 0; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
272 g_free(tmp); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
273 t--; |
| 5136 | 274 if (t < text) { |
| 275 ret = g_string_assign(ret, ""); | |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
276 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
277 } |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
278 } |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
279 } |
| 1 | 280 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
281 t = c + 1; |
| 1 | 282 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
283 while (flag) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
284 if (badchar(*t)) { |
|
3331
8f69ff64f0bf
[gaim-migrate @ 3349]
Christian Hammond <chipx86@chipx86.com>
parents:
3330
diff
changeset
|
285 char *d; |
|
8f69ff64f0bf
[gaim-migrate @ 3349]
Christian Hammond <chipx86@chipx86.com>
parents:
3330
diff
changeset
|
286 |
|
8f69ff64f0bf
[gaim-migrate @ 3349]
Christian Hammond <chipx86@chipx86.com>
parents:
3330
diff
changeset
|
287 for (d = url_buf + strlen(url_buf) - 1; *d == '.'; d--, t--) |
|
8f69ff64f0bf
[gaim-migrate @ 3349]
Christian Hammond <chipx86@chipx86.com>
parents:
3330
diff
changeset
|
288 *d = '\0'; |
|
3330
af52fdf06166
[gaim-migrate @ 3348]
Christian Hammond <chipx86@chipx86.com>
parents:
3279
diff
changeset
|
289 |
| 5136 | 290 g_string_append_printf(ret, "<A HREF=\"mailto:%s\">%s</A>", |
| 291 url_buf, url_buf); | |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
292 c = t; |
| 1 | 293 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
294 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
295 } else { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
296 strncat(url_buf, t, 1); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
297 len++; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
298 url_buf[len] = 0; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
299 } |
| 1 | 300 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
301 t++; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
302 } |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
303 } |
| 1 | 304 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
305 if (*c == 0) |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
306 break; |
| 1 | 307 |
| 5136 | 308 ret = g_string_append_c(ret, *c); |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
309 c++; |
| 1 | 310 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
311 } |
| 5136 | 312 tmp = ret->str; |
| 313 g_string_free(ret, FALSE); | |
| 314 return tmp; | |
| 1 | 315 } |
| 316 | |
| 317 | |
|
4888
912294585edf
[gaim-migrate @ 5218]
Christian Hammond <chipx86@chipx86.com>
parents:
4853
diff
changeset
|
318 static const char alphabet[] = |
|
912294585edf
[gaim-migrate @ 5218]
Christian Hammond <chipx86@chipx86.com>
parents:
4853
diff
changeset
|
319 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" |
|
912294585edf
[gaim-migrate @ 5218]
Christian Hammond <chipx86@chipx86.com>
parents:
4853
diff
changeset
|
320 "0123456789+/"; |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
321 |
| 6872 | 322 char *tobase64(const unsigned char *in, size_t inlen) |
| 1 | 323 { |
| 6872 | 324 char *out, *rv; |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
325 |
| 6872 | 326 rv = out = g_malloc((4 * (inlen + 1)) / 3 + 1); |
|
1238
78c4f497db2b
[gaim-migrate @ 1248]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1202
diff
changeset
|
327 |
| 6872 | 328 for (; inlen >= 3; inlen -= 3) |
| 329 { | |
| 330 *out++ = alphabet[in[0] >> 2]; | |
| 331 *out++ = alphabet[((in[0] << 4) & 0x30) | (in[1] >> 4)]; | |
| 332 *out++ = alphabet[((in[1] << 2) & 0x3c) | (in[2] >> 6)]; | |
| 333 *out++ = alphabet[in[2] & 0x3f]; | |
| 334 in += 3; | |
| 335 } | |
| 336 if (inlen > 0) | |
| 337 { | |
| 338 unsigned char fragment; | |
| 339 | |
| 340 *out++ = alphabet[in[0] >> 2]; | |
| 341 fragment = (in[0] << 4) & 0x30; | |
| 342 if (inlen > 1) | |
| 343 fragment |= in[1] >> 4; | |
| 344 *out++ = alphabet[fragment]; | |
| 345 *out++ = (inlen < 2) ? '=' : alphabet[(in[1] << 2) & 0x3c]; | |
| 346 *out++ = '='; | |
| 347 } | |
| 348 *out = '\0'; | |
| 5426 | 349 |
| 350 return rv; | |
| 1 | 351 } |
| 352 | |
| 353 | |
|
1920
5bed3bc833b5
[gaim-migrate @ 1930]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1878
diff
changeset
|
354 void frombase64(const char *text, char **data, int *size) |
| 1 | 355 { |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
356 char *out = NULL; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
357 char tmp = 0; |
|
1920
5bed3bc833b5
[gaim-migrate @ 1930]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1878
diff
changeset
|
358 const char *c; |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
359 gint32 tmp2 = 0; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
360 int len = 0, n = 0; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
361 |
|
1920
5bed3bc833b5
[gaim-migrate @ 1930]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1878
diff
changeset
|
362 if (!text || !data) |
|
5bed3bc833b5
[gaim-migrate @ 1930]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1878
diff
changeset
|
363 return; |
|
5bed3bc833b5
[gaim-migrate @ 1930]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1878
diff
changeset
|
364 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
365 c = text; |
| 1 | 366 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
367 while (*c) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
368 if (*c >= 'A' && *c <= 'Z') { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
369 tmp = *c - 'A'; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
370 } else if (*c >= 'a' && *c <= 'z') { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
371 tmp = 26 + (*c - 'a'); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
372 } else if (*c >= '0' && *c <= 57) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
373 tmp = 52 + (*c - '0'); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
374 } else if (*c == '+') { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
375 tmp = 62; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
376 } else if (*c == '/') { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
377 tmp = 63; |
| 5289 | 378 } else if (*c == '\r' || *c == '\n') { |
| 379 c++; | |
| 380 continue; | |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
381 } else if (*c == '=') { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
382 if (n == 3) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
383 out = g_realloc(out, len + 2); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
384 out[len] = (char)(tmp2 >> 10) & 0xff; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
385 len++; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
386 out[len] = (char)(tmp2 >> 2) & 0xff; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
387 len++; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
388 } else if (n == 2) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
389 out = g_realloc(out, len + 1); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
390 out[len] = (char)(tmp2 >> 4) & 0xff; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
391 len++; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
392 } |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
393 break; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
394 } |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
395 tmp2 = ((tmp2 << 6) | (tmp & 0xff)); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
396 n++; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
397 if (n == 4) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
398 out = g_realloc(out, len + 3); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
399 out[len] = (char)((tmp2 >> 16) & 0xff); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
400 len++; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
401 out[len] = (char)((tmp2 >> 8) & 0xff); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
402 len++; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
403 out[len] = (char)(tmp2 & 0xff); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
404 len++; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
405 tmp2 = 0; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
406 n = 0; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
407 } |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
408 c++; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
409 } |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
410 |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
411 out = g_realloc(out, len + 1); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
412 out[len] = 0; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
413 |
|
1920
5bed3bc833b5
[gaim-migrate @ 1930]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1878
diff
changeset
|
414 *data = out; |
|
5bed3bc833b5
[gaim-migrate @ 1930]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1878
diff
changeset
|
415 if (size) |
|
5bed3bc833b5
[gaim-migrate @ 1930]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1878
diff
changeset
|
416 *size = len; |
| 1 | 417 } |
| 418 | |
| 4853 | 419 /* |
| 420 * Converts raw data to a pretty, null-terminated base16 string. | |
| 421 */ | |
| 5451 | 422 unsigned char *tobase16(const unsigned char *data, int length) |
| 4853 | 423 { |
| 424 int i; | |
| 5450 | 425 unsigned char *ascii = NULL; |
| 4853 | 426 |
| 427 if (!data || !length) | |
| 428 return NULL; | |
| 429 | |
| 6053 | 430 ascii = g_malloc(length*2 + 1); |
| 4853 | 431 |
| 432 for (i=0; i<length; i++) | |
| 433 snprintf(&ascii[i*2], 3, "%02hhx", data[i]); | |
| 434 | |
| 435 return ascii; | |
| 436 } | |
| 437 | |
| 438 /* | |
| 439 * Converts a null-terminated string of hexidecimal to raw data. | |
| 440 */ | |
| 5497 | 441 int frombase16(const char *ascii, unsigned char **raw) |
| 4853 | 442 { |
| 5078 | 443 int len, i, accumulator=0; |
| 5497 | 444 unsigned char *data; |
| 4853 | 445 |
| 446 if (!ascii || !(len = strlen(ascii)) || (len % 2)) | |
| 447 return 0; | |
| 448 | |
| 6053 | 449 data = g_malloc(len/2); |
| 4853 | 450 for (i=0; i<len; i++) { |
| 451 if (!(i % 2)) | |
| 452 accumulator = 0; | |
| 453 else | |
| 454 accumulator = accumulator << 4; | |
| 455 if (isdigit(ascii[i])) | |
| 456 accumulator |= ascii[i]-48; | |
| 457 else switch(ascii[i]) { | |
| 458 case 'a': case 'A': accumulator|=10; break; | |
| 459 case 'b': case 'B': accumulator|=11; break; | |
| 460 case 'c': case 'C': accumulator|=12; break; | |
| 461 case 'd': case 'D': accumulator|=13; break; | |
| 462 case 'e': case 'E': accumulator|=14; break; | |
| 463 case 'f': case 'F': accumulator|=15; break; | |
| 464 } | |
| 465 if (i % 2) | |
| 466 data[(i-1)/2] = accumulator; | |
| 467 } | |
| 468 | |
| 469 *raw = data; | |
| 470 return len/2; | |
| 471 } | |
| 1 | 472 |
| 473 char *normalize(const char *s) | |
| 474 { | |
| 475 static char buf[BUF_LEN]; | |
| 4793 | 476 char *tmp; |
| 4282 | 477 int i, j; |
| 1 | 478 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
479 g_return_val_if_fail((s != NULL), NULL); |
| 26 | 480 |
| 4282 | 481 strncpy(buf, s, BUF_LEN); |
| 482 for (i=0, j=0; buf[j]; i++, j++) { | |
| 483 while (buf[j] == ' ') | |
| 484 j++; | |
| 485 buf[i] = buf[j]; | |
| 486 } | |
| 487 buf[i] = '\0'; | |
| 4793 | 488 |
| 489 tmp = g_utf8_strdown(buf, -1); | |
| 4899 | 490 g_snprintf(buf, sizeof(buf), "%s", tmp); |
| 4793 | 491 g_free(tmp); |
| 5247 | 492 tmp = g_utf8_normalize(buf, -1, G_NORMALIZE_DEFAULT); |
| 493 g_snprintf(buf, sizeof(buf), "%s", tmp); | |
| 494 g_free(tmp); | |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
495 |
| 1 | 496 return buf; |
| 497 } | |
| 498 | |
| 499 char *date() | |
| 500 { | |
| 501 static char date[80]; | |
| 502 time_t tme; | |
| 503 time(&tme); | |
| 504 strftime(date, sizeof(date), "%H:%M:%S", localtime(&tme)); | |
| 505 return date; | |
| 506 } | |
| 507 | |
| 3806 | 508 void clean_pid(void) |
| 509 { | |
| 510 #ifndef _WIN32 | |
| 511 int status; | |
| 512 pid_t pid; | |
| 513 | |
| 3890 | 514 do { |
| 515 pid = waitpid(-1, &status, WNOHANG); | |
| 3891 | 516 } while (pid != 0 && pid != (pid_t)-1); |
| 3890 | 517 if(pid == (pid_t)-1 && errno != ECHILD) { |
| 3806 | 518 char errmsg[BUFSIZ]; |
| 5435 | 519 snprintf(errmsg, BUFSIZ, "Warning: waitpid() returned %d", pid); |
| 3806 | 520 perror(errmsg); |
| 521 } | |
| 522 #endif | |
| 523 } | |
| 524 | |
| 206 | 525 |
|
592
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
526 /* Look for %n, %d, or %t in msg, and replace with the sender's name, date, |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
527 or time */ |
|
4890
89cb14edf8cf
[gaim-migrate @ 5220]
Christian Hammond <chipx86@chipx86.com>
parents:
4888
diff
changeset
|
528 char *away_subs(const char *msg, const char *name) |
|
592
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
529 { |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
530 char *c; |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
531 static char cpy[BUF_LONG]; |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
532 int cnt = 0; |
|
592
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
533 time_t t = time(0); |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
534 struct tm *tme = localtime(&t); |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
535 char tmp[20]; |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
536 |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
537 cpy[0] = '\0'; |
| 4921 | 538 c = (char *)msg; |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
539 while (*c) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
540 switch (*c) { |
|
592
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
541 case '%': |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
542 if (*(c + 1)) { |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
543 switch (*(c + 1)) { |
|
592
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
544 case 'n': |
| 1976 | 545 /* append name */ |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
546 strcpy(cpy + cnt, name); |
|
592
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
547 cnt += strlen(name); |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
548 c++; |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
549 break; |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
550 case 'd': |
| 1976 | 551 /* append date */ |
|
2161
757e10018950
[gaim-migrate @ 2171]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2155
diff
changeset
|
552 strftime(tmp, 20, "%m/%d/%Y", tme); |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
553 strcpy(cpy + cnt, tmp); |
|
592
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
554 cnt += strlen(tmp); |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
555 c++; |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
556 break; |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
557 case 't': |
| 1976 | 558 /* append time */ |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
559 strftime(tmp, 20, "%r", tme); |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
560 strcpy(cpy + cnt, tmp); |
|
592
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
561 cnt += strlen(tmp); |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
562 c++; |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
563 break; |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
564 default: |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
565 cpy[cnt++] = *c; |
|
592
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
566 } |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
567 } |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
568 break; |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
569 default: |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
570 cpy[cnt++] = *c; |
|
592
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
571 } |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
572 c++; |
|
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
573 } |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
574 cpy[cnt] = '\0'; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
575 return (cpy); |
|
592
7c75d69a1129
[gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
470
diff
changeset
|
576 } |
|
603
9b0717b4a490
[gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
592
diff
changeset
|
577 |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
578 GSList *message_split(char *message, int limit) |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
579 { |
|
1100
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
580 static GSList *ret = NULL; |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
581 int lastgood = 0, curgood = 0, curpos = 0, len = strlen(message); |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
582 gboolean intag = FALSE; |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
583 |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
584 if (ret) { |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
585 GSList *tmp = ret; |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
586 while (tmp) { |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
587 g_free(tmp->data); |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
588 tmp = g_slist_remove(tmp, tmp->data); |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
589 } |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
590 ret = NULL; |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
591 } |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
592 |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
593 while (TRUE) { |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
594 if (lastgood >= len) |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
595 return ret; |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
596 |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
597 if (len - lastgood < limit) { |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
598 ret = g_slist_append(ret, g_strdup(&message[lastgood])); |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
599 return ret; |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
600 } |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
601 |
|
1100
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
602 curgood = curpos = 0; |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
603 intag = FALSE; |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
604 while (curpos <= limit) { |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
605 if (isspace(message[curpos + lastgood]) && !intag) |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
606 curgood = curpos; |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
607 if (message[curpos + lastgood] == '<') |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
608 intag = TRUE; |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
609 if (message[curpos + lastgood] == '>') |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
610 intag = FALSE; |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
611 curpos++; |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
612 } |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
613 |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
614 if (curgood) { |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
615 ret = g_slist_append(ret, g_strndup(&message[lastgood], curgood)); |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
616 if (isspace(message[curgood + lastgood])) |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
617 lastgood += curgood + 1; |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
618 else |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
619 lastgood += curgood; |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
620 } else { |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
621 /* whoops, guess we have to fudge it here */ |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
622 ret = g_slist_append(ret, g_strndup(&message[lastgood], limit)); |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
623 lastgood += limit; |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
624 } |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
625 } |
|
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
626 } |
|
1191
4fd0d35826fe
[gaim-migrate @ 1201]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
627 |
| 3867 | 628 const gchar *gaim_home_dir() |
| 3630 | 629 { |
|
6848
060aa79a733e
[gaim-migrate @ 7393]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6478
diff
changeset
|
630 #ifndef _WIN32 |
| 3630 | 631 if(g_get_home_dir()) |
| 632 return g_get_home_dir(); | |
| 633 else | |
| 634 return NULL; | |
| 635 #else | |
|
6848
060aa79a733e
[gaim-migrate @ 7393]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6478
diff
changeset
|
636 return wgaim_data_dir(); |
| 3630 | 637 #endif |
| 638 } | |
| 639 | |
|
1238
78c4f497db2b
[gaim-migrate @ 1248]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1202
diff
changeset
|
640 /* returns a string of the form ~/.gaim, where ~ is replaced by the user's home |
| 3630 | 641 * dir. Note that there is no trailing slash after .gaim. */ |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
642 gchar *gaim_user_dir() |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
643 { |
| 4160 | 644 const gchar *hd = gaim_home_dir(); |
| 645 if(hd) { | |
| 646 strcpy( (char*)&home_dir, hd ); | |
| 3630 | 647 strcat( (char*)&home_dir, G_DIR_SEPARATOR_S ".gaim" ); |
| 648 return (gchar*)&home_dir; | |
| 649 } | |
| 650 else { | |
| 651 return NULL; | |
| 652 } | |
|
1238
78c4f497db2b
[gaim-migrate @ 1248]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1202
diff
changeset
|
653 } |
|
78c4f497db2b
[gaim-migrate @ 1248]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1202
diff
changeset
|
654 |
| 1292 | 655 /* |
| 656 * rcg10312000 This could be more robust, but it works for my current | |
| 657 * goal: to remove those annoying <BR> tags. :) | |
| 658 * dtf12162000 made the loop more readable. i am a neat freak. ;) */ | |
| 659 void strncpy_nohtml(gchar *dest, const gchar *src, size_t destsize) | |
| 660 { | |
| 661 gchar *ptr; | |
| 662 g_snprintf(dest, destsize, "%s", src); | |
| 663 | |
|
1815
f15d449b3167
[gaim-migrate @ 1825]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1805
diff
changeset
|
664 while ((ptr = strstr(dest, "<BR>")) != NULL) { |
| 1292 | 665 /* replace <BR> with a newline. */ |
| 666 *ptr = '\n'; | |
| 667 memmove(ptr + 1, ptr + 4, strlen(ptr + 4) + 1); | |
| 668 } | |
| 669 } | |
| 670 | |
|
1191
4fd0d35826fe
[gaim-migrate @ 1201]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
671 void strncpy_withhtml(gchar *dest, const gchar *src, size_t destsize) |
|
4fd0d35826fe
[gaim-migrate @ 1201]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
672 { |
| 1202 | 673 gchar *end = dest + destsize; |
|
1191
4fd0d35826fe
[gaim-migrate @ 1201]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
674 |
| 1293 | 675 while (dest < end) { |
| 676 if (*src == '\n' && dest < end - 5) { | |
| 1202 | 677 strcpy(dest, "<BR>"); |
|
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
678 src++; |
|
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
679 dest += 4; |
| 6397 | 680 } else if(*src == '\r') { |
| 681 src++; | |
| 1293 | 682 } else { |
| 683 *dest++ = *src; | |
|
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2371
diff
changeset
|
684 if (*src == '\0') |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2371
diff
changeset
|
685 return; |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2371
diff
changeset
|
686 else |
|
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2371
diff
changeset
|
687 src++; |
| 1293 | 688 } |
|
1191
4fd0d35826fe
[gaim-migrate @ 1201]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
689 } |
|
4fd0d35826fe
[gaim-migrate @ 1201]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
690 } |
|
1254
9da444224f0e
[gaim-migrate @ 1264]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1252
diff
changeset
|
691 |
|
9da444224f0e
[gaim-migrate @ 1264]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1252
diff
changeset
|
692 |
| 2956 | 693 /* |
| 694 * Like strncpy_withhtml (above), but malloc()'s the necessary space | |
| 695 * | |
| 696 * The caller is responsible for freeing the space pointed to by the | |
| 697 * return value. | |
| 698 */ | |
| 699 | |
| 700 gchar *strdup_withhtml(const gchar *src) | |
| 701 { | |
| 3279 | 702 gchar *sp, *dest; |
| 2956 | 703 gulong destsize; |
| 704 | |
| 4771 | 705 if(!src) |
| 706 return NULL; | |
| 707 | |
| 2956 | 708 /* |
| 709 * All we need do is multiply the number of newlines by 3 (the | |
| 710 * additional length of "<BR>" over "\n"), account for the | |
| 711 * terminator, malloc the space and call strncpy_withhtml. | |
| 712 */ | |
| 3279 | 713 for(destsize = 0, sp = (gchar *)src; (sp = strchr(sp, '\n')) != NULL; ++sp, ++destsize) |
| 2956 | 714 ; |
| 715 destsize *= 3; | |
| 716 destsize += strlen(src) + 1; | |
| 717 dest = g_malloc(destsize); | |
| 718 strncpy_withhtml(dest, src, destsize); | |
| 719 | |
| 720 return(dest); | |
| 721 } | |
| 722 | |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
723 void strip_linefeed(gchar *text) |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
724 { |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
725 int i, j; |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
726 gchar *text2 = g_malloc(strlen(text) + 1); |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
727 |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
728 for (i = 0, j = 0; text[i]; i++) |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
729 if (text[i] != '\r') |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
730 text2[j++] = text[i]; |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
731 text2[j] = '\0'; |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
732 |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
733 strcpy(text, text2); |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
734 g_free(text2); |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
735 } |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
736 |
| 5136 | 737 char *add_cr(const char *text) |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
738 { |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
739 char *ret = NULL; |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
740 int count = 0, i, j; |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
741 |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
742 if (text[0] == '\n') |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
743 count++; |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
744 for (i = 1; i < strlen(text); i++) |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
745 if (text[i] == '\n' && text[i - 1] != '\r') |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
746 count++; |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
747 |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
748 if (count == 0) |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
749 return g_strdup(text); |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
750 |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
751 ret = g_malloc0(strlen(text) + count + 1); |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
752 |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
753 i = 0; j = 0; |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
754 if (text[i] == '\n') |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
755 ret[j++] = '\r'; |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
756 ret[j++] = text[i++]; |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
757 for (; i < strlen(text); i++) { |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
758 if (text[i] == '\n' && text[i - 1] != '\r') |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
759 ret[j++] = '\r'; |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
760 ret[j++] = text[i]; |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
761 } |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
762 |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
763 gaim_debug(GAIM_DEBUG_INFO, "add_cr", "got: %s, leaving with %s\n", |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
764 text, ret); |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
765 |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
766 return ret; |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
767 } |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2596
diff
changeset
|
768 |
|
1805
caa605e70917
[gaim-migrate @ 1815]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1753
diff
changeset
|
769 time_t get_time(int year, int month, int day, int hour, int min, int sec) |
|
caa605e70917
[gaim-migrate @ 1815]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1753
diff
changeset
|
770 { |
|
caa605e70917
[gaim-migrate @ 1815]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1753
diff
changeset
|
771 struct tm tm; |
|
caa605e70917
[gaim-migrate @ 1815]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1753
diff
changeset
|
772 |
|
caa605e70917
[gaim-migrate @ 1815]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1753
diff
changeset
|
773 tm.tm_year = year - 1900; |
|
caa605e70917
[gaim-migrate @ 1815]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1753
diff
changeset
|
774 tm.tm_mon = month - 1; |
|
caa605e70917
[gaim-migrate @ 1815]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1753
diff
changeset
|
775 tm.tm_mday = day; |
|
caa605e70917
[gaim-migrate @ 1815]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1753
diff
changeset
|
776 tm.tm_hour = hour; |
|
caa605e70917
[gaim-migrate @ 1815]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1753
diff
changeset
|
777 tm.tm_min = min; |
|
caa605e70917
[gaim-migrate @ 1815]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1753
diff
changeset
|
778 tm.tm_sec = sec >= 0 ? sec : time(NULL) % 60; |
|
caa605e70917
[gaim-migrate @ 1815]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1753
diff
changeset
|
779 return mktime(&tm); |
|
caa605e70917
[gaim-migrate @ 1815]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1753
diff
changeset
|
780 } |
| 3230 | 781 |
| 782 /* | |
| 783 * Like mkstemp() but returns a file pointer, uses a pre-set template, | |
| 784 * uses the semantics of tempnam() for the directory to use and allocates | |
| 785 * the space for the filepath. | |
| 786 * | |
| 787 * Caller is responsible for closing the file and removing it when done, | |
| 788 * as well as freeing the space pointed-to by "path" with g_free(). | |
| 789 * | |
| 790 * Returns NULL on failure and cleans up after itself if so. | |
| 791 */ | |
| 792 static const char *gaim_mkstemp_templ = {"gaimXXXXXX"}; | |
| 793 | |
| 794 FILE *gaim_mkstemp(gchar **fpath) | |
| 795 { | |
| 3466 | 796 const gchar *tmpdir; |
| 3630 | 797 #ifndef _WIN32 |
| 3230 | 798 int fd; |
| 3630 | 799 #endif |
| 3230 | 800 FILE *fp = NULL; |
| 801 | |
| 3630 | 802 if((tmpdir = (gchar*)g_get_tmp_dir()) != NULL) { |
| 803 if((*fpath = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", tmpdir, gaim_mkstemp_templ)) != NULL) { | |
| 804 #ifdef _WIN32 | |
| 805 char* result = _mktemp( *fpath ); | |
| 806 if( result == NULL ) | |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
807 gaim_debug(GAIM_DEBUG_ERROR, "gaim_mkstemp", |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
808 "Problem creating the template\n"); |
| 3630 | 809 else |
| 810 { | |
| 811 if( (fp = fopen( result, "w+" )) == NULL ) { | |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
812 gaim_debug(GAIM_DEBUG_ERROR, "gaim_mkstemp", |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
813 "Couldn't fopen() %s\n", result); |
| 3630 | 814 } |
| 815 } | |
| 816 #else | |
| 3230 | 817 if((fd = mkstemp(*fpath)) == -1) { |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
818 gaim_debug(GAIM_DEBUG_ERROR, "gaim_mkstemp", |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
819 "Couldn't make \"%s\", error: %d\n", |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
820 *fpath, errno); |
| 3230 | 821 } else { |
| 822 if((fp = fdopen(fd, "r+")) == NULL) { | |
| 823 close(fd); | |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
824 gaim_debug(GAIM_DEBUG_ERROR, "gaim_mkstemp", |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
825 "Couldn't fdopen(), error: %d\n", errno); |
| 3230 | 826 } |
| 827 } | |
| 3630 | 828 #endif |
| 3230 | 829 if(!fp) { |
| 830 g_free(*fpath); | |
| 831 *fpath = NULL; | |
| 832 } | |
| 833 } | |
| 3233 | 834 } else { |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
835 gaim_debug(GAIM_DEBUG_ERROR, "gaim_mkstemp", |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
836 "g_get_tmp_dir() failed!"); |
| 3230 | 837 } |
| 838 | |
| 839 return fp; | |
| 840 } | |
| 3478 | 841 |
| 6861 | 842 gboolean program_is_valid(const char *program) |
| 843 { | |
| 844 GError *error = NULL; | |
| 845 char **argv; | |
| 846 gchar *progname; | |
| 847 gboolean is_valid = FALSE; | |
| 848 | |
| 849 if (program == NULL || *program == '\0') { | |
| 850 return FALSE; | |
| 851 } | |
| 852 | |
| 853 if (!g_shell_parse_argv(program, NULL, &argv, &error)) { | |
| 854 gaim_debug(GAIM_DEBUG_ERROR, "program_is_valid", | |
| 855 "Could not parse program '%s': %s\n", | |
| 856 program, error->message); | |
| 857 g_error_free(error); | |
| 858 return FALSE; | |
| 859 } | |
| 860 | |
| 861 if (argv == NULL) { | |
| 862 return FALSE; | |
| 863 } | |
| 864 | |
| 865 progname = g_find_program_in_path(argv[0]); | |
| 866 is_valid = (progname != NULL); | |
| 867 | |
| 868 g_strfreev(argv); | |
| 869 g_free(progname); | |
| 870 | |
| 871 return is_valid; | |
| 872 } | |
| 873 | |
| 4458 | 874 char *gaim_try_conv_to_utf8(const char *str) |
| 875 { | |
|
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6439
diff
changeset
|
876 gsize converted; |
| 4458 | 877 char *utf8; |
| 3698 | 878 |
| 4458 | 879 if (str == NULL) { |
| 880 return NULL; | |
| 881 } | |
| 882 | |
| 883 if (g_utf8_validate(str, -1, NULL)) { | |
| 884 return g_strdup(str); | |
| 885 } | |
| 3698 | 886 |
| 4458 | 887 utf8 = g_locale_to_utf8(str, -1, &converted, NULL, NULL); |
| 6439 | 888 if (utf8) |
| 4458 | 889 return(utf8); |
| 6439 | 890 |
| 891 g_free(utf8); | |
| 892 | |
| 4458 | 893 utf8 = g_convert(str, -1, "UTF-8", "ISO-8859-15", &converted, NULL, NULL); |
| 894 if (utf8 && converted == strlen (str)) { | |
| 895 return(utf8); | |
| 896 } else if (utf8) { | |
| 897 g_free(utf8); | |
| 898 } | |
| 3698 | 899 |
| 4458 | 900 return(NULL); |
| 901 } | |
| 4650 | 902 |
| 903 char *gaim_getip_from_fd(int fd) | |
| 904 { | |
| 905 struct sockaddr addr; | |
| 906 socklen_t namelen = sizeof(addr); | |
| 907 | |
| 908 if (getsockname(fd, &addr, &namelen)) | |
| 909 return NULL; | |
| 910 | |
| 911 return g_strdup(inet_ntoa(((struct sockaddr_in *)&addr)->sin_addr)); | |
| 912 } | |
| 4793 | 913 |
| 914 gint gaim_utf8_strcasecmp(const gchar *a, const gchar *b) { | |
|
5915
124ca6f5e895
[gaim-migrate @ 6347]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
5874
diff
changeset
|
915 gchar *a_norm=NULL; |
|
124ca6f5e895
[gaim-migrate @ 6347]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
5874
diff
changeset
|
916 gchar *b_norm=NULL; |
|
124ca6f5e895
[gaim-migrate @ 6347]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
5874
diff
changeset
|
917 gint ret=-1; |
|
124ca6f5e895
[gaim-migrate @ 6347]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
5874
diff
changeset
|
918 |
| 7000 | 919 if(!a && b) |
| 920 return -1; | |
| 921 else if(!b && a) | |
| 922 return 1; | |
| 923 else if(!a && !b) | |
| 924 return 0; | |
| 925 | |
|
5915
124ca6f5e895
[gaim-migrate @ 6347]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
5874
diff
changeset
|
926 if(!g_utf8_validate(a, -1, NULL) || !g_utf8_validate(b, -1, NULL)) { |
|
124ca6f5e895
[gaim-migrate @ 6347]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
5874
diff
changeset
|
927 gaim_debug(GAIM_DEBUG_ERROR, "gaim_utf8_strcasecmp", "One or both parameters are invalid UTF8\n"); |
|
124ca6f5e895
[gaim-migrate @ 6347]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
5874
diff
changeset
|
928 return ret; |
|
124ca6f5e895
[gaim-migrate @ 6347]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
5874
diff
changeset
|
929 } |
|
124ca6f5e895
[gaim-migrate @ 6347]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
5874
diff
changeset
|
930 |
|
124ca6f5e895
[gaim-migrate @ 6347]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
5874
diff
changeset
|
931 a_norm = g_utf8_casefold(a, -1); |
|
124ca6f5e895
[gaim-migrate @ 6347]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
5874
diff
changeset
|
932 b_norm = g_utf8_casefold(b, -1); |
|
124ca6f5e895
[gaim-migrate @ 6347]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
5874
diff
changeset
|
933 ret = g_utf8_collate(a_norm, b_norm); |
| 4793 | 934 g_free(a_norm); |
| 935 g_free(b_norm); | |
| 936 return ret; | |
| 937 } | |
| 5515 | 938 |
| 939 gchar *gaim_strreplace(const gchar *string, const gchar *delimiter, const gchar *replacement) { | |
| 940 gchar **split; | |
| 941 gchar *ret; | |
| 942 | |
| 943 split = g_strsplit(string, delimiter, 0); | |
| 944 ret = g_strjoinv(replacement, split); | |
| 945 g_strfreev(split); | |
| 946 | |
| 947 return ret; | |
| 948 } | |
| 5826 | 949 |
| 6982 | 950 const char *gaim_strcasestr(const char *haystack, const char *needle) { |
| 951 size_t hlen, nlen; | |
| 952 const char *tmp, *ret; | |
| 953 | |
| 954 g_return_val_if_fail(haystack != NULL, NULL); | |
| 955 g_return_val_if_fail(needle != NULL, NULL); | |
| 956 | |
| 957 hlen = strlen(haystack); | |
| 958 nlen = strlen(needle); | |
| 959 tmp = haystack, | |
| 960 ret = NULL; | |
| 961 | |
| 962 g_return_val_if_fail(hlen > 0, NULL); | |
| 963 g_return_val_if_fail(nlen > 0, NULL); | |
| 964 | |
| 965 while (*tmp && !ret) { | |
| 966 if (!g_ascii_strncasecmp(needle, tmp, nlen)) | |
| 967 ret = tmp; | |
| 968 else | |
| 969 tmp++; | |
| 970 } | |
| 971 | |
| 972 return ret; | |
| 973 } | |
| 974 | |
| 5826 | 975 char *gaim_get_size_string(size_t size) |
| 976 { | |
| 977 static const char *size_str[4] = { "bytes", "KB", "MB", "GB" }; | |
| 978 float size_mag; | |
| 979 int size_index = 0; | |
| 980 | |
| 981 if (size == -1) { | |
| 982 return g_strdup(_("Calculating...")); | |
| 983 } | |
| 984 else if (size == 0) { | |
| 985 return g_strdup(_("Unknown.")); | |
| 986 } | |
| 987 else { | |
| 988 size_mag = (float)size; | |
| 989 | |
| 990 while ((size_index < 4) && (size_mag > 1024)) { | |
| 991 size_mag /= 1024; | |
| 992 size_index++; | |
| 993 } | |
| 994 | |
| 995 return g_strdup_printf("%.2f %s", size_mag, size_str[size_index]); | |
| 996 } | |
| 997 } | |
| 6982 | 998 |
| 999 gboolean gaim_markup_find_tag(const char *needle, const char *haystack, const char **start, const char **end, GData **attributes) { | |
| 1000 GData *attribs; | |
| 1001 const char *cur = haystack; | |
| 1002 char *name = NULL; | |
| 1003 gboolean found = FALSE; | |
| 1004 gboolean in_tag = FALSE; | |
| 1005 gboolean in_attr = FALSE; | |
| 1006 gboolean in_quotes = FALSE; | |
| 1007 size_t needlelen = strlen(needle); | |
| 1008 | |
| 1009 g_datalist_init(&attribs); | |
| 1010 | |
| 1011 while (*cur && !found) { | |
| 1012 if (in_tag) { | |
| 1013 if (in_quotes) { | |
| 1014 const char *close = cur; | |
| 1015 | |
| 1016 while (*close && *close != '"') | |
| 1017 close++; | |
| 1018 | |
| 1019 /* if we got the close quote, store the value and carry on from * | |
| 1020 * after it. if we ran to the end of the string, point to the NULL * | |
| 1021 * and we're outta here */ | |
| 1022 if (*close) { | |
| 1023 /* only store a value if we have an attribute name */ | |
| 1024 if (name) { | |
| 1025 size_t len = close - cur; | |
| 1026 char *val = g_strndup(cur, len); | |
| 1027 | |
| 1028 g_datalist_set_data_full(&attribs, name, val, g_free); | |
| 1029 g_free(name); | |
| 1030 name = NULL; | |
| 1031 } | |
| 1032 | |
| 1033 in_quotes = FALSE; | |
| 1034 cur = close + 1; | |
| 1035 } else { | |
| 1036 cur = close; | |
| 1037 } | |
| 1038 } else if (in_attr) { | |
| 1039 const char *close = cur; | |
| 1040 | |
| 1041 while (*close && *close != '>' && *close != '"' && *close != ' ' && *close != '=') | |
| 1042 close++; | |
| 1043 | |
| 1044 /* if we got the equals, store the name of the attribute. if we got | |
| 1045 * the quote, save the attribute and go straight to quote mode. | |
| 1046 * otherwise the tag closed or we reached the end of the string, | |
| 1047 * so we can get outta here */ | |
| 1048 switch (*close) { | |
| 1049 case '"': | |
| 1050 in_quotes = TRUE; | |
| 1051 case '=': | |
| 1052 { | |
| 1053 size_t len = close - cur; | |
| 1054 | |
| 1055 /* don't store a blank attribute name */ | |
| 1056 if (len) { | |
| 1057 if (name) | |
| 1058 g_free(name); | |
| 1059 name = g_ascii_strdown(cur, len); | |
| 1060 } | |
| 1061 | |
| 1062 in_attr = FALSE; | |
| 1063 cur = close + 1; | |
| 1064 break; | |
| 1065 } | |
| 1066 case ' ': | |
| 1067 case '>': | |
| 1068 in_attr = FALSE; | |
| 1069 default: | |
| 1070 cur = close; | |
| 1071 break; | |
| 1072 } | |
| 1073 } else { | |
| 1074 switch (*cur) { | |
| 1075 case ' ': | |
| 1076 /* swallow extra spaces inside tag */ | |
| 1077 while (*cur && *cur == ' ') cur++; | |
| 1078 in_attr = TRUE; | |
| 1079 break; | |
| 1080 case '>': | |
| 1081 found = TRUE; | |
| 1082 *end = cur; | |
| 1083 break; | |
| 1084 case '"': | |
| 1085 in_quotes = TRUE; | |
| 1086 default: | |
| 1087 cur++; | |
| 1088 break; | |
| 1089 } | |
| 1090 } | |
| 1091 } else { | |
| 1092 /* if we hit a < followed by the name of our tag... */ | |
| 1093 if (*cur == '<' && !g_ascii_strncasecmp(cur + 1, needle, needlelen)) { | |
| 1094 *start = cur; | |
| 1095 cur = cur + needlelen + 1; | |
| 1096 | |
| 1097 /* if we're pointing at a space or a >, we found the right tag. if * | |
| 1098 * we're not, we've found a longer tag, so we need to skip to the * | |
| 1099 * >, but not being distracted by >s inside quotes. */ | |
| 1100 if (*cur == ' ' || *cur == '>') { | |
| 1101 in_tag = TRUE; | |
| 1102 } else { | |
| 1103 while (*cur && *cur != '"' && *cur != '>') { | |
| 1104 if (*cur == '"') { | |
| 1105 cur++; | |
| 1106 while (*cur && *cur != '"') | |
| 1107 cur++; | |
| 1108 } else { | |
| 1109 cur++; | |
| 1110 } | |
| 1111 } | |
| 1112 } | |
| 1113 } else { | |
| 1114 cur++; | |
| 1115 } | |
| 1116 } | |
| 1117 } | |
| 1118 | |
| 1119 /* clean up any attribute name from a premature termination */ | |
| 1120 if (name) | |
| 1121 g_free(name); | |
| 1122 | |
| 1123 if (found) { | |
| 1124 *attributes = attribs; | |
| 1125 } else { | |
| 1126 *start = NULL; | |
| 1127 *end = NULL; | |
| 1128 *attributes = NULL; | |
| 1129 } | |
| 1130 | |
| 1131 return found; | |
| 1132 } |
