901
return state->cmd ? 0 : 1; /* 0 = more to come, 1 = EOF */
902
}
903
904
+static void *receive_hook_feed_state_alloc(void *feed_pipe_ctx)
905
+{
906
+ struct receive_hook_feed_state *init_state = feed_pipe_ctx;
907
+ struct receive_hook_feed_state *data = xcalloc(1, sizeof(*data));
908
+ data->report = init_state->report;
909
+ data->cmd = init_state->cmd;
910
+ data->skip_broken = init_state->skip_broken;
911
+ strbuf_init(&data->buf, 0);
912
+ return data;
913
+}
914
+
915
+static void receive_hook_feed_state_free(void *data)
916
+{
917
+ struct receive_hook_feed_state *d = data;
918
+ if (!d)
919
+ return;
920
+ strbuf_release(&d->buf);
921
+ free(d);
922
+}
923
+
924
static int run_receive_hook(struct command *commands,
925
const char *hook_name,
926
int skip_broken,
928
{
929
struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
930
struct command *iter = commands;
911
- struct receive_hook_feed_state feed_state;
931
+ struct receive_hook_feed_state feed_init_state = { 0 };
932
struct async sideband_async;
933
int sideband_async_started = 0;
934
int saved_stderr = -1;
958
prepare_sideband_async(&sideband_async, &saved_stderr, &sideband_async_started);
959
960
/* set up stdin callback */
941
- feed_state.cmd = commands;
942
- feed_state.skip_broken = skip_broken;
943
- feed_state.report = NULL;
944
- strbuf_init(&feed_state.buf, 0);
945
- opt.feed_pipe_cb_data = &feed_state;
961
+ feed_init_state.cmd = commands;
962
+ feed_init_state.skip_broken = skip_broken;
963
+ opt.feed_pipe_ctx = &feed_init_state;
964
opt.feed_pipe = feed_receive_hook_cb;
965
+ opt.feed_pipe_cb_data_alloc = receive_hook_feed_state_alloc;
966
+ opt.feed_pipe_cb_data_free = receive_hook_feed_state_free;
967
968
ret = run_hooks_opt(the_repository, hook_name, &opt);
969
950
- strbuf_release(&feed_state.buf);
970
finish_sideband_async(&sideband_async, saved_stderr, sideband_async_started);
971
972
return ret;