creates an url string without password field*/
| 630 | |
| 631 | /* creates an url string without password field*/ |
| 632 | static void db_get_url(const str* url){ |
| 633 | struct db_id* id = new_db_id(url); |
| 634 | static str scheme_delimiter={"://",3}; |
| 635 | static str port_delimiter={":",1}; |
| 636 | static str host_delimiter={"@",1}; |
| 637 | static str database_delimiter={"/",1}; |
| 638 | str port; |
| 639 | |
| 640 | /* allocate memory for the database url if necessary*/ |
| 641 | database_url.len = 0; |
| 642 | |
| 643 | /* sanity checks */ |
| 644 | if (id == NULL) |
| 645 | return; |
| 646 | |
| 647 | database_url.s = pkg_realloc(database_url.s, url->len * sizeof(char)); |
| 648 | |
| 649 | if (database_url.s == NULL) { |
| 650 | free_db_id(id); |
| 651 | return; |
| 652 | } |
| 653 | |
| 654 | /* shortest database_url is s://a/b so we always need the scheme delimiter*/ |
| 655 | if (id->scheme != NULL) { |
| 656 | memcpy(database_url.s + database_url.len, id->scheme, strlen(id->scheme)); |
| 657 | database_url.len += strlen(id->scheme); |
| 658 | memcpy(database_url.s + database_url.len, scheme_delimiter.s, scheme_delimiter.len); |
| 659 | database_url.len += scheme_delimiter.len; |
| 660 | } |
| 661 | |
| 662 | if (id->username != NULL) { |
| 663 | memcpy(database_url.s + database_url.len, id->username, strlen(id->username)); |
| 664 | database_url.len += strlen(id->username); |
| 665 | } |
| 666 | |
| 667 | if (id->host != NULL) { |
| 668 | memcpy(database_url.s + database_url.len, host_delimiter.s, host_delimiter.len); |
| 669 | database_url.len += host_delimiter.len; |
| 670 | memcpy(database_url.s + database_url.len, id->host, strlen(id->host)); |
| 671 | database_url.len += strlen(id->host); |
| 672 | } |
| 673 | |
| 674 | if (id->port > 0) { |
| 675 | port.s = int2str(id->port,&port.len); |
| 676 | memcpy(database_url.s + database_url.len, port_delimiter.s, port_delimiter.len); |
| 677 | database_url.len += port_delimiter.len; |
| 678 | memcpy(database_url.s + database_url.len, port.s, port.len); |
| 679 | database_url.len += port.len; |
| 680 | } |
| 681 | |
| 682 | if (id->database != NULL){ |
| 683 | memcpy(database_url.s + database_url.len, |
| 684 | database_delimiter.s, database_delimiter.len); |
| 685 | database_url.len += database_delimiter.len; |
| 686 | memcpy(database_url.s + database_url.len, id->database, strlen(id->database)); |
| 687 | database_url.len += strlen(id->database); |
| 688 | } |
| 689 |
no test coverage detected