static bool ser_peerman(struct peer_manager *peers, int fd) { /* write "magic number" (constant first file record) */ GString *rec = message_str(chain->netmagic, "magic.peers", NULL, 0); unsigned int rec_len = rec->len; ssize_t wrc = write(fd, rec->str, rec_len); g_string_free(rec, TRUE); if (wrc != rec_len) return false; if (debugging) fprintf(stderr, "peerman: %u peers to write\n", g_list_length(peers->addrlist)); /* write peer list */ GList *tmp = peers->addrlist; while (tmp) { struct peer *peer; peer = tmp->data; tmp = tmp->next; GString *msg_data = g_string_sized_new(sizeof(struct peer)); ser_peer(msg_data, CADDR_TIME_VERSION, peer); rec = message_str(chain->netmagic, "peer", msg_data->str, msg_data->len); rec_len = rec->len; wrc = write(fd, rec->str, rec_len); g_string_free(rec, TRUE); g_string_free(msg_data, TRUE); if (wrc != rec_len) return false; } return true; }
static bool ser_peerman(struct peer_manager *peers, int fd, const struct chain_info *chain) { /* write "magic number" (constant first file record) */ cstring *rec = message_str(chain->netmagic, "magic.peers", NULL, 0); unsigned int rec_len = rec->len; ssize_t wrc = write(fd, rec->str, rec_len); cstr_free(rec, true); if (wrc != rec_len) return false; log_debug("peerman: %zu peers to write", clist_length(peers->addrlist)); /* write peer list */ clist *tmp = peers->addrlist; while (tmp) { struct peer *peer; peer = tmp->data; tmp = tmp->next; cstring *msg_data = cstr_new_sz(sizeof(struct peer)); ser_peer(msg_data, CADDR_TIME_VERSION, peer); rec = message_str(chain->netmagic, "peer", msg_data->str, msg_data->len); rec_len = rec->len; wrc = write(fd, rec->str, rec_len); cstr_free(rec, true); cstr_free(msg_data, true); if (wrc != rec_len) return false; } return true; }