@@ -615,27 +615,42 @@ bool add_to_list(
615
615
Node_format * nodes_list , uint32_t length , const uint8_t pk [CRYPTO_PUBLIC_KEY_SIZE ],
616
616
const IP_Port * ip_port , const uint8_t cmp_pk [CRYPTO_PUBLIC_KEY_SIZE ])
617
617
{
618
- for (uint32_t i = 0 ; i < length ; ++ i ) {
619
- Node_format * node = & nodes_list [i ];
618
+ uint8_t pk_cur [CRYPTO_PUBLIC_KEY_SIZE ];
619
+ memcpy (pk_cur , pk , CRYPTO_PUBLIC_KEY_SIZE );
620
+ IP_Port ip_port_cur = * ip_port ;
620
621
621
- if (id_closest (cmp_pk , node -> public_key , pk ) == 2 ) {
622
- uint8_t pk_bak [CRYPTO_PUBLIC_KEY_SIZE ];
623
- memcpy (pk_bak , node -> public_key , CRYPTO_PUBLIC_KEY_SIZE );
622
+ bool inserted = false;
623
+ bool done = false;
624
624
625
- const IP_Port ip_port_bak = node -> ip_port ;
626
- memcpy ( node -> public_key , pk , CRYPTO_PUBLIC_KEY_SIZE ) ;
625
+ while (! done ) {
626
+ done = true ;
627
627
628
- node -> ip_port = * ip_port ;
628
+ for (uint32_t i = 0 ; i < length ; ++ i ) {
629
+ Node_format * node = & nodes_list [i ];
629
630
630
- if (i != length - 1 ) {
631
- add_to_list ( nodes_list , length , pk_bak , & ip_port_bak , cmp_pk ) ;
632
- }
631
+ if (id_closest ( cmp_pk , node -> public_key , pk_cur ) == 2 ) {
632
+ uint8_t pk_bak [ CRYPTO_PUBLIC_KEY_SIZE ] ;
633
+ memcpy ( pk_bak , node -> public_key , CRYPTO_PUBLIC_KEY_SIZE );
633
634
634
- return true;
635
+ const IP_Port ip_port_bak = node -> ip_port ;
636
+ memcpy (node -> public_key , pk_cur , CRYPTO_PUBLIC_KEY_SIZE );
637
+
638
+ node -> ip_port = ip_port_cur ;
639
+
640
+ if (i == length - 1 ) {
641
+ return true;
642
+ }
643
+
644
+ memcpy (pk_cur , pk_bak , CRYPTO_PUBLIC_KEY_SIZE );
645
+ ip_port_cur = ip_port_bak ;
646
+ done = false;
647
+ inserted = true;
648
+ break ;
649
+ }
635
650
}
636
651
}
637
652
638
- return false ;
653
+ return inserted ;
639
654
}
640
655
641
656
/**
0 commit comments