952
strbuf_release(&out);
953
}
954
955
-struct trailer_info *trailer_info_new(void)
955
+static struct trailer_info *trailer_info_new(void)
956
{
957
struct trailer_info *info = xcalloc(1, sizeof(*info));
958
return info;
962
* Parse trailers in "str", populating the trailer info and "head"
963
* linked list structure.
964
*/
965
-void parse_trailers(const struct process_trailer_options *opts,
966
- struct trailer_info *info,
967
- const char *str,
968
- struct list_head *head)
965
+struct trailer_info *parse_trailers(const struct process_trailer_options *opts,
966
+ const char *str,
967
+ struct list_head *head)
968
{
969
+ struct trailer_info *info;
970
struct strbuf tok = STRBUF_INIT;
971
struct strbuf val = STRBUF_INIT;
972
size_t i;
973
974
- trailer_info_get(opts, str, info);
974
+ info = trailer_info_get(opts, str);
975
976
for (i = 0; i < info->trailer_nr; i++) {
977
int separator_pos;
995
strbuf_detach(&val, NULL));
996
}
997
}
998
+
999
+ return info;
1000
}
1001
1002
void free_trailers(struct list_head *trailers)
1023
return info->blank_line_before_trailer;
1024
}
1025
1024
-void trailer_info_get(const struct process_trailer_options *opts,
1025
- const char *str,
1026
- struct trailer_info *info)
1026
+struct trailer_info *trailer_info_get(const struct process_trailer_options *opts,
1027
+ const char *str)
1028
{
1029
+ struct trailer_info *info = trailer_info_new();
1030
size_t end_of_log_message = 0, trailer_block_start = 0;
1031
struct strbuf **trailer_lines, **ptr;
1032
char **trailer_strings = NULL;
1065
info->trailer_block_end = end_of_log_message;
1066
info->trailers = trailer_strings;
1067
info->trailer_nr = nr;
1068
+
1069
+ return info;
1070
}
1071
1072
void trailer_info_release(struct trailer_info *info)
1075
for (i = 0; i < info->trailer_nr; i++)
1076
free(info->trailers[i]);
1077
free(info->trailers);
1078
+ free(info);
1079
}
1080
1081
void format_trailers(const struct process_trailer_options *opts,
1143
struct strbuf *out)
1144
{
1145
LIST_HEAD(trailer_objects);
1141
- struct trailer_info info;
1142
-
1143
- parse_trailers(opts, &info, msg, &trailer_objects);
1146
+ struct trailer_info *info = parse_trailers(opts, msg, &trailer_objects);
1147
1148
/* If we want the whole block untouched, we can take the fast path. */
1149
if (!opts->only_trailers && !opts->unfold && !opts->filter &&
1150
!opts->separator && !opts->key_only && !opts->value_only &&
1151
!opts->key_value_separator) {
1149
- strbuf_add(out, msg + info.trailer_block_start,
1150
- info.trailer_block_end - info.trailer_block_start);
1152
+ strbuf_add(out, msg + info->trailer_block_start,
1153
+ info->trailer_block_end - info->trailer_block_start);
1154
} else
1155
format_trailers(opts, &trailer_objects, out);
1156
1157
free_trailers(&trailer_objects);
1155
- trailer_info_release(&info);
1158
+ trailer_info_release(info);
1159
}
1160
1161
void trailer_iterator_init(struct trailer_iterator *iter, const char *msg)
1164
strbuf_init(&iter->key, 0);
1165
strbuf_init(&iter->val, 0);
1166
opts.no_divider = 1;
1164
- trailer_info_get(&opts, msg, &iter->internal.info);
1167
+ iter->internal.info = trailer_info_get(&opts, msg);
1168
iter->internal.cur = 0;
1169
}
1170
1171
int trailer_iterator_advance(struct trailer_iterator *iter)
1172
{
1170
- if (iter->internal.cur < iter->internal.info.trailer_nr) {
1171
- char *line = iter->internal.info.trailers[iter->internal.cur++];
1173
+ if (iter->internal.cur < iter->internal.info->trailer_nr) {
1174
+ char *line = iter->internal.info->trailers[iter->internal.cur++];
1175
int separator_pos = find_separator(line, separators);
1176
1177
iter->raw = line;
1188
1189
void trailer_iterator_release(struct trailer_iterator *iter)
1190
{
1188
- trailer_info_release(&iter->internal.info);
1191
+ trailer_info_release(iter->internal.info);
1192
strbuf_release(&iter->val);
1193
strbuf_release(&iter->key);
1194
}