Lines Matching refs:fh

898 file_header_init(struct file_header **fh, const char *fn, size_t file_pos)
901 if (fh && fn) {
904 *fh = sort_malloc(sizeof(struct file_header));
905 (*fh)->file_pos = file_pos;
906 (*fh)->fr = file_reader_init(fn);
907 if ((*fh)->fr == NULL) {
911 line = file_reader_readline((*fh)->fr);
913 file_reader_free((*fh)->fr);
914 (*fh)->fr = NULL;
915 (*fh)->si = NULL;
917 (*fh)->si = sort_list_item_alloc();
918 sort_list_item_set((*fh)->si, line);
927 file_header_close(struct file_header **fh)
930 if (fh && *fh) {
931 if ((*fh)->fr) {
932 file_reader_free((*fh)->fr);
933 (*fh)->fr = NULL;
935 if ((*fh)->si) {
936 sort_list_item_clean((*fh)->si);
937 sort_free((*fh)->si);
938 (*fh)->si = NULL;
940 sort_free(*fh);
941 *fh = NULL;
949 file_header_swap(struct file_header **fh, size_t i1, size_t i2)
953 tmp = fh[i1];
954 fh[i1] = fh[i2];
955 fh[i2] = tmp;
965 file_header_heap_swim(struct file_header **fh, size_t indx)
973 if (file_header_cmp(fh[indx], fh[parent_index]) < 0) {
975 file_header_swap(fh, indx, parent_index);
976 file_header_heap_swim(fh, parent_index);
985 file_header_heap_sink(struct file_header **fh, size_t indx, size_t size)
999 (file_header_cmp(fh[left_child_index],
1000 fh[right_child_index]) > 0))
1002 if (file_header_cmp(fh[indx], fh[min_child_index]) > 0) {
1003 file_header_swap(fh, indx, min_child_index);
1004 file_header_heap_sink(fh, min_child_index, size);
1015 file_header_list_rearrange_from_header(struct file_header **fh, size_t size)
1018 file_header_heap_sink(fh, 0, size);
1025 file_header_list_push(struct file_header *f, struct file_header **fh, size_t size)
1028 fh[size++] = f;
1029 file_header_heap_swim(fh, size - 1);
1041 file_header_print(struct file_header *fh, FILE *f_out, struct last_printed *lp)
1044 if (fh && fh->fr && f_out && fh->si && fh->si->str) {
1046 if ((lp->str == NULL) || (str_list_coll(lp->str, &(fh->si)))) {
1047 bwsfwrite(fh->si->str, f_out, sort_opts_vals.zflag);
1050 lp->str = bwsdup(fh->si->str);
1053 bwsfwrite(fh->si->str, f_out, sort_opts_vals.zflag);
1061 file_header_read_next(struct file_header *fh)
1064 if (fh && fh->fr) {
1067 tmp = file_reader_readline(fh->fr);
1069 file_reader_free(fh->fr);
1070 fh->fr = NULL;
1071 if (fh->si) {
1072 sort_list_item_clean(fh->si);
1073 sort_free(fh->si);
1074 fh->si = NULL;
1077 if (fh->si == NULL)
1078 fh->si = sort_list_item_alloc();
1079 sort_list_item_set(fh->si, tmp);
1088 file_headers_merge(size_t fnum, struct file_header **fh, FILE *f_out)
1099 file_header_list_push(fh[i], fh, i);
1101 while (fh[0]->fr) { /* unfinished files are always in front */
1103 file_header_print(fh[0], f_out, &lp);
1105 file_header_read_next(fh[0]);
1107 file_header_list_rearrange_from_header(fh, fnum);
1123 struct file_header **fh;
1132 fh = sort_malloc((argc + 1) * sizeof(struct file_header *));
1135 file_header_init(fh + i, argv[i], (size_t) i);
1137 file_headers_merge(argc, fh, f_out);
1140 file_header_close(fh + i);
1142 sort_free(fh);