| 408 | } |
| 409 | |
| 410 | static void send_one_item(int fd, struct parallel_checkout_item *pc_item) |
| 411 | { |
| 412 | size_t len_data; |
| 413 | char *data, *variant; |
| 414 | struct pc_item_fixed_portion *fixed_portion; |
| 415 | const char *working_tree_encoding = pc_item->ca.working_tree_encoding; |
| 416 | size_t name_len = pc_item->ce->ce_namelen; |
| 417 | size_t working_tree_encoding_len = working_tree_encoding ? |
| 418 | strlen(working_tree_encoding) : 0; |
| 419 | |
| 420 | /* |
| 421 | * Any changes in the calculation of the message size must also be made |
| 422 | * in is_eligible_for_parallel_checkout(). |
| 423 | */ |
| 424 | len_data = sizeof(struct pc_item_fixed_portion) + name_len + |
| 425 | working_tree_encoding_len; |
| 426 | |
| 427 | data = xmalloc(len_data); |
| 428 | |
| 429 | fixed_portion = (struct pc_item_fixed_portion *)data; |
| 430 | fixed_portion->id = pc_item->id; |
| 431 | fixed_portion->ce_mode = pc_item->ce->ce_mode; |
| 432 | fixed_portion->crlf_action = pc_item->ca.crlf_action; |
| 433 | fixed_portion->ident = pc_item->ca.ident; |
| 434 | fixed_portion->name_len = name_len; |
| 435 | fixed_portion->working_tree_encoding_len = working_tree_encoding_len; |
| 436 | oidcpy(&fixed_portion->oid, &pc_item->ce->oid); |
| 437 | |
| 438 | variant = data + sizeof(*fixed_portion); |
| 439 | if (working_tree_encoding_len) { |
| 440 | memcpy(variant, working_tree_encoding, working_tree_encoding_len); |
| 441 | variant += working_tree_encoding_len; |
| 442 | } |
| 443 | memcpy(variant, pc_item->ce->name, name_len); |
| 444 | |
| 445 | packet_write(fd, data, len_data); |
| 446 | |
| 447 | free(data); |
| 448 | } |
| 449 | |
| 450 | static void send_batch(int fd, size_t start, size_t nr) |
| 451 | { |
no test coverage detected