13 extern void UpdateNetworkGameWindow(bool unselect); |
13 extern void UpdateNetworkGameWindow(bool unselect); |
14 |
14 |
15 |
15 |
16 NetworkGameList *NetworkGameListAddItem(uint32 ip, uint16 port) |
16 NetworkGameList *NetworkGameListAddItem(uint32 ip, uint16 port) |
17 { |
17 { |
18 NetworkGameList *item; |
18 NetworkGameList *item, *prev_item; |
19 |
19 |
20 item = _network_game_list; |
20 prev_item = NULL; |
21 if (item != NULL) { |
21 for (item = _network_game_list; item != NULL; item = item->next) { |
22 while (item->next != NULL) { |
22 if (item->ip == ip && item->port == port) return item; |
23 if (item->ip == ip && item->port == port) |
23 prev_item = item; |
24 return item; |
|
25 item = item->next; |
|
26 } |
|
27 |
|
28 if (item->ip == ip && item->port == port) |
|
29 return item; |
|
30 |
|
31 item->next = malloc(sizeof(*item)); |
|
32 item = item->next; |
|
33 } else { |
|
34 item = malloc(sizeof(*item)); |
|
35 _network_game_list = item; |
|
36 } |
24 } |
37 |
25 |
38 DEBUG(net, 4) ("[NET][GameList] Added server to list"); |
26 item = malloc(sizeof(*item)); |
39 |
|
40 memset(item, 0, sizeof(*item)); |
27 memset(item, 0, sizeof(*item)); |
41 |
|
42 item->next = NULL; |
28 item->next = NULL; |
43 item->ip = ip; |
29 item->ip = ip; |
44 item->port = port; |
30 item->port = port; |
45 _network_game_count++; |
31 |
|
32 if (prev_item == NULL) {_network_game_list = item;} |
|
33 else {prev_item->next = item;} |
|
34 DEBUG(net, 4) ("[NET][GameList] Added server to list"); |
46 |
35 |
47 UpdateNetworkGameWindow(false); |
36 UpdateNetworkGameWindow(false); |
48 |
37 |
49 return item; |
38 return item; |
50 } |
39 } |
51 |
40 |
52 void NetworkGameListRemoveItem(NetworkGameList *remove) |
41 void NetworkGameListRemoveItem(NetworkGameList *remove) |
53 { |
42 { |
54 NetworkGameList *item; |
43 NetworkGameList *item, *prev_item; |
55 |
44 |
56 item = _network_game_list; |
45 prev_item = NULL; |
|
46 for (item = _network_game_list; item != NULL; item = item->next) { |
|
47 if (remove == item) { |
|
48 if (prev_item == NULL) {_network_game_list = remove->next;} |
|
49 else {prev_item->next = remove->next;} |
57 |
50 |
58 // examine head of the list |
|
59 if ( remove == _network_game_list ) { |
|
60 _network_game_list = remove->next; |
|
61 free(remove); |
|
62 DEBUG(net, 4) ("[NET][GameList] Removed server from list"); |
|
63 return; |
|
64 } |
|
65 |
|
66 // examine each item |
|
67 while ( item->next != NULL ) { |
|
68 if ( item->next == remove ) |
|
69 { |
|
70 item->next = remove->next; |
|
71 free(remove); |
51 free(remove); |
72 DEBUG(net, 4) ("[NET][GameList] Removed server from list"); |
52 DEBUG(net, 4) ("[NET][GameList] Removed server from list"); |
|
53 UpdateNetworkGameWindow(false); |
73 return; |
54 return; |
74 } |
55 } |
75 item = item->next; |
56 prev_item = item; |
76 } |
57 } |
77 } |
58 } |
78 |
59 |
79 #endif /* ENABLE_NETWORK */ |
60 #endif /* ENABLE_NETWORK */ |