comparison src/parse.c @ 273:00724782b6c9

parse.c: comments, better debugging, tiny refactoring
author markus schnalke <meillo@marmaro.de>
date Fri, 03 Dec 2010 19:25:43 -0300
parents 899175e8dff0
children 89199eda6144
comparison
equal deleted inserted replaced
272:681863fdafbb 273:00724782b6c9
144 144
145 *local_begin = *local_end = NULL; 145 *local_begin = *local_end = NULL;
146 *domain_begin = *domain_end = NULL; 146 *domain_begin = *domain_end = NULL;
147 147
148 /* might be some memory left from previous call: */ 148 /* might be some memory left from previous call: */
149 if (parse_error != NULL) { 149 if (parse_error) {
150 g_free(parse_error); 150 g_free(parse_error);
151 parse_error = NULL; 151 parse_error = NULL;
152 } 152 }
153 153
154 /* leading spaces and angle brackets */ 154 /* leading spaces and angle brackets */
248 *domain_begin = *domain_end = NULL; 248 *domain_begin = *domain_end = NULL;
249 break; 249 break;
250 250
251 } else if (strchr(specials, *p) || iscntrl(*p) || isspace(*p)) { 251 } else if (strchr(specials, *p) || iscntrl(*p) || isspace(*p)) {
252 parse_error = g_strdup_printf("unexpected character: %c", *p); 252 parse_error = g_strdup_printf("unexpected character: %c", *p);
253 #ifdef PARSE_TEST
254 g_print("unexpected character: %c", *p);
255 #endif
253 return FALSE; 256 return FALSE;
254 } 257 }
255 } 258 }
256 259
257 /* trailing spaces and angle brackets */ 260 /* trailing spaces and angle brackets */
380 gchar *loc_beg, *loc_end; 383 gchar *loc_beg, *loc_end;
381 gchar *dom_beg, *dom_end; 384 gchar *dom_beg, *dom_end;
382 gchar *addr_end; 385 gchar *addr_end;
383 gboolean ret; 386 gboolean ret;
384 387
388 /* TODO: what about (string == NULL)? */
385 if (string && (string[0] == '\0')) { 389 if (string && (string[0] == '\0')) {
386 address *addr = g_malloc(sizeof(address)); 390 address *addr = g_malloc(sizeof(address));
387 addr->address = g_strdup(""); 391 addr->address = g_strdup("");
388 addr->local_part = g_strdup(""); 392 addr->local_part = g_strdup("");
389 /* 'NULL' address (failure notice), 393 /* 'NULL' address (failure notice),
421 g_print("addr->local_part = %s\n", addr->local_part); 425 g_print("addr->local_part = %s\n", addr->local_part);
422 #endif 426 #endif
423 427
424 if (dom_beg != NULL) { 428 if (dom_beg != NULL) {
425 addr->domain = g_strndup(dom_beg, dom_end - dom_beg); 429 addr->domain = g_strndup(dom_beg, dom_end - dom_beg);
426 } else if (addr->local_part[0] == 0) { 430 } else if (addr->local_part[0] == '\0') {
427 /* 'NULL' address (failure notice), 431 /* 'NULL' address (failure notice),
428 "" makes sure it will not be qualified with a hostname */ 432 "" makes sure it will not be qualified with a hostname */
429 addr->domain = g_strdup(""); 433 addr->domain = g_strdup("");
430 } else { 434 } else {
431 addr->domain = NULL; 435 addr->domain = NULL;
432 } 436 }
433 437
434 if (end != NULL) { 438 if (end) {
435 *end = p; 439 *end = p;
436 } 440 }
437 441
438 #ifndef PARSE_TEST 442 #ifndef PARSE_TEST
439 addr_unmark_delivered(addr); 443 addr_unmark_delivered(addr);
459 { 463 {
460 gchar *p = string; 464 gchar *p = string;
461 gchar *end; 465 gchar *end;
462 466
463 while (*p) { 467 while (*p) {
468 #ifdef PARSE_TEST
469 g_print("string: %s\n", p);
470 #endif
471
464 address *addr = _create_address(p, &end, FALSE); 472 address *addr = _create_address(p, &end, FALSE);
465 fprintf(stderr, "string: %s\n", p);
466
467 if (!addr) { 473 if (!addr) {
468 break; 474 break;
469 } 475 }
470 476
471 fprintf(stderr, " addr: %s (%s<@>%s)\n", addr->address, addr->local_part, addr->domain); 477 #ifdef PARSE_TEST
478 g_print("addr: %s (%s<@>%s)", addr->address, addr->local_part, addr->domain);
479 #endif
472 if (domain && !addr->domain) { 480 if (domain && !addr->domain) {
473 addr->domain = g_strdup(domain); 481 addr->domain = g_strdup(domain);
474 } 482 }
475 fprintf(stderr, " %s (%s<@>%s)\n", addr->address, addr->local_part, addr->domain); 483 #ifdef PARSE_TEST
484 g_print(" (%s<@>%s)\n", addr->local_part, addr->domain);
485 #endif
476 486
477 addr_list = g_list_append(addr_list, addr); 487 addr_list = g_list_append(addr_list, addr);
478 p = end; 488 p = end;
479 489
480 while (*p == ',' || isspace(*p)) { 490 while (*p == ',' || isspace(*p)) {