write data, queuing the padding for the next write. Returns negative for * error. */
| 45 | /* write data, queuing the padding for the next write. Returns negative for |
| 46 | * error. */ |
| 47 | static int padded_write(struct reftable_writer *w, uint8_t *data, size_t len, |
| 48 | int padding) |
| 49 | { |
| 50 | int n = 0; |
| 51 | if (w->pending_padding > 0) { |
| 52 | uint8_t *zeroed; |
| 53 | int n; |
| 54 | |
| 55 | zeroed = reftable_calloc(w->pending_padding, sizeof(*zeroed)); |
| 56 | if (!zeroed) |
| 57 | return -1; |
| 58 | |
| 59 | n = w->write(w->write_arg, zeroed, w->pending_padding); |
| 60 | if (n < 0) { |
| 61 | reftable_free(zeroed); |
| 62 | return n; |
| 63 | } |
| 64 | |
| 65 | w->pending_padding = 0; |
| 66 | reftable_free(zeroed); |
| 67 | } |
| 68 | |
| 69 | w->pending_padding = padding; |
| 70 | n = w->write(w->write_arg, data, len); |
| 71 | if (n < 0) |
| 72 | return n; |
| 73 | n += padding; |
| 74 | return 0; |
| 75 | } |
| 76 | |
| 77 | static void options_set_defaults(struct reftable_write_options *opts) |
| 78 | { |
no test coverage detected