comparison src/util.c @ 4160:fcc6db86f5c7

[gaim-migrate @ 4389] Nicola's Lichtmaier (niqueco) writes: "Several things: I've added some "const"s here and there. I've declared some functions as "pure" or "const" (helps gcc to optimize the code). I've declared debug_printf so that gcc can check the printf format string (this makes visible several formatting bugs!) I've changed minor things in util.c (why having an useless extra call to g_strncasecmp?). And I've added some _() as usual. I hope some of this gets checked in, if not all." committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Tue, 31 Dec 2002 18:19:14 +0000
parents a611ec77d1d2
children d3c8d2b40494
comparison
equal deleted inserted replaced
4159:3f267c74e50a 4160:fcc6db86f5c7
65 date = ctime(&tme); 65 date = ctime(&tme);
66 date[strlen(date) - 1] = '\0'; 66 date[strlen(date) - 1] = '\0';
67 return date; 67 return date;
68 } 68 }
69 69
70 gint badchar(char c) 70 G_GNUC_CONST static gint badchar(char c)
71 { 71 {
72 switch (c) { 72 switch (c) {
73 case ' ': 73 case ' ':
74 case ',': 74 case ',':
75 case '(': 75 case '(':
153 text[cnt++] = *c; 153 text[cnt++] = *c;
154 c++; 154 c++;
155 if (!(*c)) 155 if (!(*c))
156 break; 156 break;
157 } 157 }
158 } else if ((!g_strncasecmp(c, "http://", 7) || (!g_strncasecmp(c, "https://", 8)))) { 158 } else if ((*c=='h') && (!g_strncasecmp(c, "http://", 7) || (!g_strncasecmp(c, "https://", 8)))) {
159 t = c; 159 t = c;
160 while (1) { 160 while (1) {
161 if (badchar(*t)) { 161 if (badchar(*t)) {
162 162
163 if (*(t) == ',' && (*(t + 1) != ' ')) { 163 if (*(t) == ',' && (*(t + 1) != ' ')) {
178 break; 178 break;
179 t++; 179 t++;
180 180
181 } 181 }
182 } else if (!g_strncasecmp(c, "www.", 4)) { 182 } else if (!g_strncasecmp(c, "www.", 4)) {
183 if (g_strncasecmp(c, "www..", 5)) { 183 if (c[4] != '.') {
184 t = c; 184 t = c;
185 while (1) { 185 while (1) {
186 if (badchar(*t)) { 186 if (badchar(*t)) {
187 if (t - c == 4) { 187 if (t - c == 4) {
188 break; 188 break;
225 break; 225 break;
226 t++; 226 t++;
227 227
228 } 228 }
229 } else if (!g_strncasecmp(c, "ftp.", 4)) { 229 } else if (!g_strncasecmp(c, "ftp.", 4)) {
230 if (g_strncasecmp(c, "ftp..", 5)) { 230 if (c[4] != '.') {
231 t = c; 231 t = c;
232 while (1) { 232 while (1) {
233 if (badchar(*t)) { 233 if (badchar(*t)) {
234 if (t - c == 4) { 234 if (t - c == 4) {
235 break; 235 break;
265 if (!t) 265 if (!t)
266 break; 266 break;
267 t++; 267 t++;
268 268
269 } 269 }
270 } else if (c != cpy && !g_strncasecmp(c, "@", 1)) { 270 } else if (c != cpy && (*c == '@')) {
271 char *tmp; 271 char *tmp;
272 int flag; 272 int flag;
273 int len = 0; 273 int len = 0;
274 char illegal_chars[] = "!@#$%^&*()[]{}/|\\<>\":;\0"; 274 const char illegal_chars[] = "!@#$%^&*()[]{}/|\\<>\":;\r\n \0";
275 url_buf[0] = 0; 275 url_buf[0] = 0;
276 276
277 if (*(c - 1) == ' ' || *(c + 1) == ' ' || rindex(illegal_chars, *(c + 1)) 277 if (strchr(illegal_chars,*(c - 1)) || strchr(illegal_chars, *(c + 1)))
278 || *(c + 1) == 13 || *(c + 1) == 10)
279 flag = 0; 278 flag = 0;
280 else 279 else
281 flag = 1; 280 flag = 1;
282 281
283 t = c; 282 t = c;
341 g_free(cpy); 340 g_free(cpy);
342 return cnt; 341 return cnt;
343 } 342 }
344 343
345 344
346 FILE *open_gaim_log_file(char *name, int *flag) 345 FILE *open_gaim_log_file(const char *name, int *flag)
347 { 346 {
348 char *buf; 347 char *buf;
349 char *buf2; 348 char *buf2;
350 char log_all_file[256]; 349 char log_all_file[256];
351 struct stat st; 350 struct stat st;
370 fd = fopen(log_all_file, "r"); 369 fd = fopen(log_all_file, "r");
371 370
372 if (!fd) { 371 if (!fd) {
373 res = mkdir(log_all_file, S_IRUSR | S_IWUSR | S_IXUSR); 372 res = mkdir(log_all_file, S_IRUSR | S_IWUSR | S_IXUSR);
374 if (res < 0) { 373 if (res < 0) {
375 g_snprintf(buf, BUF_LONG, "Unable to make directory %s for logging", 374 g_snprintf(buf, BUF_LONG, _("Unable to make directory %s for logging"),
376 log_all_file); 375 log_all_file);
377 do_error_dialog(buf, NULL, GAIM_ERROR); 376 do_error_dialog(buf, NULL, GAIM_ERROR);
378 g_free(buf); 377 g_free(buf);
379 g_free(buf2); 378 g_free(buf2);
380 return NULL; 379 return NULL;
391 390
392 fd = fopen(log_all_file, "r"); 391 fd = fopen(log_all_file, "r");
393 if (!fd) { 392 if (!fd) {
394 res = mkdir(log_all_file, S_IRUSR | S_IWUSR | S_IXUSR); 393 res = mkdir(log_all_file, S_IRUSR | S_IWUSR | S_IXUSR);
395 if (res < 0) { 394 if (res < 0) {
396 g_snprintf(buf, BUF_LONG, "Unable to make directory %s for logging", 395 g_snprintf(buf, BUF_LONG, _("Unable to make directory %s for logging"),
397 log_all_file); 396 log_all_file);
398 do_error_dialog(buf, NULL, GAIM_ERROR); 397 do_error_dialog(buf, NULL, GAIM_ERROR);
399 g_free(buf); 398 g_free(buf);
400 g_free(buf2); 399 g_free(buf2);
401 return NULL; 400 return NULL;
404 fclose(fd); 403 fclose(fd);
405 #else /* _WIN32 */ 404 #else /* _WIN32 */
406 g_snprintf(log_all_file, 256, "%s" G_DIR_SEPARATOR_S "logs", gaim_dir); 405 g_snprintf(log_all_file, 256, "%s" G_DIR_SEPARATOR_S "logs", gaim_dir);
407 406
408 if( _mkdir(log_all_file) < 0 && errno != EEXIST ) { 407 if( _mkdir(log_all_file) < 0 && errno != EEXIST ) {
409 g_snprintf(buf, BUF_LONG, "Unable to make directory %s for logging", log_all_file); 408 g_snprintf(buf, BUF_LONG, _("Unable to make directory %s for logging"), log_all_file);
410 do_error_dialog(buf, NULL, GAIM_ERROR); 409 do_error_dialog(buf, NULL, GAIM_ERROR);
411 g_free(buf); 410 g_free(buf);
412 g_free(buf2); 411 g_free(buf2);
413 return NULL; 412 return NULL;
414 } 413 }
425 g_free(buf); 424 g_free(buf);
426 g_free(buf2); 425 g_free(buf2);
427 return fd; 426 return fd;
428 } 427 }
429 428
430 FILE *open_log_file(char *name, int is_chat) 429 FILE *open_log_file(const char *name, int is_chat)
431 { 430 {
432 struct stat st; 431 struct stat st;
433 char realname[256]; 432 char realname[256];
434 struct log_conversation *l; 433 struct log_conversation *l;
435 FILE *fd; 434 FILE *fd;
448 447
449 fd = fopen(l->filename, "a"); 448 fd = fopen(l->filename, "a");
450 449
451 if (flag) { /* is a new file */ 450 if (flag) { /* is a new file */
452 if (logging_options & OPT_LOG_STRIP_HTML) { 451 if (logging_options & OPT_LOG_STRIP_HTML) {
453 fprintf(fd, "IM Sessions with %s\n", name); 452 fprintf(fd, _("IM Sessions with %s\n"), name);
454 } else { 453 } else {
455 fprintf(fd, "<HTML><HEAD><TITLE>"); 454 fprintf(fd, "<HTML><HEAD><TITLE>");
456 fprintf(fd, "IM Sessions with %s", name); 455 fprintf(fd, _("IM Sessions with %s"), name);
457 fprintf(fd, "</TITLE></HEAD><BODY BGCOLOR=\"ffffff\">\n"); 456 fprintf(fd, "</TITLE></HEAD><BODY BGCOLOR=\"ffffff\">\n");
458 } 457 }
459 } 458 }
460 459
461 return fd; 460 return fd;
464 g_snprintf(realname, sizeof(realname), "%s.log", normalize(name)); 463 g_snprintf(realname, sizeof(realname), "%s.log", normalize(name));
465 fd = open_gaim_log_file(realname, &flag); 464 fd = open_gaim_log_file(realname, &flag);
466 465
467 if (fd && flag) { /* is a new file */ 466 if (fd && flag) { /* is a new file */
468 if (logging_options & OPT_LOG_STRIP_HTML) { 467 if (logging_options & OPT_LOG_STRIP_HTML) {
469 fprintf(fd, "IM Sessions with %s\n", name); 468 fprintf(fd, _("IM Sessions with %s\n"), name);
470 } else { 469 } else {
471 fprintf(fd, "<HTML><HEAD><TITLE>"); 470 fprintf(fd, "<HTML><HEAD><TITLE>");
472 fprintf(fd, "IM Sessions with %s", name); 471 fprintf(fd, _("IM Sessions with %s"), name);
473 fprintf(fd, "</TITLE></HEAD><BODY BGCOLOR=\"ffffff\">\n"); 472 fprintf(fd, "</TITLE></HEAD><BODY BGCOLOR=\"ffffff\">\n");
474 } 473 }
475 } 474 }
476 475
477 return fd; 476 return fd;
485 return open_log_file(name, 2); 484 return open_log_file(name, 2);
486 else 485 else
487 return open_gaim_log_file("system", &x); 486 return open_gaim_log_file("system", &x);
488 } 487 }
489 488
490 char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" "0123456789+/"; 489 const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" "0123456789+/";
491 490
492 /* XXX Find bug */ 491 /* XXX Find bug */
493 char *tobase64(const char *text) 492 char *tobase64(const char *text)
494 { 493 {
495 char *out = NULL; 494 char *out = NULL;
882 881
883 /* returns a string of the form ~/.gaim, where ~ is replaced by the user's home 882 /* returns a string of the form ~/.gaim, where ~ is replaced by the user's home
884 * dir. Note that there is no trailing slash after .gaim. */ 883 * dir. Note that there is no trailing slash after .gaim. */
885 gchar *gaim_user_dir() 884 gchar *gaim_user_dir()
886 { 885 {
887 if(gaim_home_dir()) { 886 const gchar *hd = gaim_home_dir();
888 strcpy( (char*)&home_dir, gaim_home_dir() ); 887 if(hd) {
888 strcpy( (char*)&home_dir, hd );
889 strcat( (char*)&home_dir, G_DIR_SEPARATOR_S ".gaim" ); 889 strcat( (char*)&home_dir, G_DIR_SEPARATOR_S ".gaim" );
890 return (gchar*)&home_dir; 890 return (gchar*)&home_dir;
891 } 891 }
892 else { 892 else {
893 return NULL; 893 return NULL;
1217 if( result == NULL ) 1217 if( result == NULL )
1218 debug_printf("gaim_mkstemp: Problem creating the template\n"); 1218 debug_printf("gaim_mkstemp: Problem creating the template\n");
1219 else 1219 else
1220 { 1220 {
1221 if( (fp = fopen( result, "w+" )) == NULL ) { 1221 if( (fp = fopen( result, "w+" )) == NULL ) {
1222 debug_printf("Error: Couldn't fopen()in gaim_mkstemp():\n%s\n", result); 1222 debug_printf("Error: Couldn't fopen() in gaim_mkstemp():\n%s\n", result);
1223 } 1223 }
1224 } 1224 }
1225 #else 1225 #else
1226 if((fd = mkstemp(*fpath)) == -1) { 1226 if((fd = mkstemp(*fpath)) == -1) {
1227 debug_printf("Error: Couldn't make \"%s\", error: %d\n", *fpath, errno); 1227 debug_printf("Error: Couldn't make \"%s\", error: %d\n", *fpath, errno);
1261 } 1261 }
1262 conn = conn->next; 1262 conn = conn->next;
1263 } 1263 }
1264 1264
1265 if (gc == NULL) 1265 if (gc == NULL)
1266 return "Not connected to AIM"; 1266 return _("Not connected to AIM");
1267 1267
1268 /* aim:goim?screenname=screenname&message=message */ 1268 /* aim:goim?screenname=screenname&message=message */
1269 if (!g_strncasecmp(uri, "aim:goim?", strlen("aim:goim?"))) { 1269 if (!g_strncasecmp(uri, "aim:goim?", strlen("aim:goim?"))) {
1270 char *who, *what; 1270 char *who, *what;
1271 struct conversation *c; 1271 struct conversation *c;
1272 uri = uri + strlen("aim:goim?"); 1272 uri = uri + strlen("aim:goim?");
1273 1273
1274 if (!(who = strstr(uri, "screenname="))) { 1274 if (!(who = strstr(uri, "screenname="))) {
1275 return "No screenname given."; 1275 return _("No screenname given.");
1276 } 1276 }
1277 /* spaces are encoded as +'s */ 1277 /* spaces are encoded as +'s */
1278 who = who + strlen("screenname="); 1278 who = who + strlen("screenname=");
1279 str = g_string_new(NULL); 1279 str = g_string_new(NULL);
1280 while (*who && (*who != '&')) { 1280 while (*who && (*who != '&')) {
1307 char *who, *group; 1307 char *who, *group;
1308 uri = uri + strlen("aim:addbuddy?"); 1308 uri = uri + strlen("aim:addbuddy?");
1309 /* spaces are encoded as +'s */ 1309 /* spaces are encoded as +'s */
1310 1310
1311 if (!(who = strstr(uri, "screenname="))) { 1311 if (!(who = strstr(uri, "screenname="))) {
1312 return "No screenname given."; 1312 return _("No screenname given.");
1313 } 1313 }
1314 who = who + strlen("screenname="); 1314 who = who + strlen("screenname=");
1315 str = g_string_new(NULL); 1315 str = g_string_new(NULL);
1316 while (*who && (*who != '&')) { 1316 while (*who && (*who != '&')) {
1317 g_string_append_c(str, *who == '+' ? ' ' : *who); 1317 g_string_append_c(str, *who == '+' ? ' ' : *who);
1343 1343
1344 uri = uri + strlen("aim:gochat?"); 1344 uri = uri + strlen("aim:gochat?");
1345 /* spaces are encoded as +'s */ 1345 /* spaces are encoded as +'s */
1346 1346
1347 if (!(room = strstr(uri, "roomname="))) { 1347 if (!(room = strstr(uri, "roomname="))) {
1348 return "No roomname given."; 1348 return _("No roomname given.");
1349 } 1349 }
1350 room = room + strlen("roomname="); 1350 room = room + strlen("roomname=");
1351 str = g_string_new(NULL); 1351 str = g_string_new(NULL);
1352 while (*room && (*room != '&')) { 1352 while (*room && (*room != '&')) {
1353 g_string_append_c(str, *room == '+' ? ' ' : *room); 1353 g_string_append_c(str, *room == '+' ? ' ' : *room);
1359 chat = g_list_append(chat, &exch); 1359 chat = g_list_append(chat, &exch);
1360 serv_join_chat(gc, chat); 1360 serv_join_chat(gc, chat);
1361 g_free(room); 1361 g_free(room);
1362 g_list_free(chat); 1362 g_list_free(chat);
1363 } else { 1363 } else {
1364 return "Invalid AIM URI"; 1364 return _("Invalid AIM URI");
1365 } 1365 }
1366 1366
1367 1367
1368 return NULL; 1368 return NULL;
1369 } 1369 }