Lines Matching defs:fh

772 file_header_init(struct file_header **fh, const char *fn, size_t file_pos)
776 *fh = sort_malloc(sizeof(struct file_header));
777 (*fh)->file_pos = file_pos;
778 (*fh)->fr = file_reader_init(fn);
779 if ((*fh)->fr == NULL) {
783 line = file_reader_readline((*fh)->fr);
785 file_reader_free((*fh)->fr);
786 (*fh)->fr = NULL;
787 (*fh)->si = NULL;
789 (*fh)->si = sort_list_item_alloc();
790 sort_list_item_set((*fh)->si, line);
798 file_header_close(struct file_header **fh)
800 if ((*fh)->fr) {
801 file_reader_free((*fh)->fr);
802 (*fh)->fr = NULL;
804 if ((*fh)->si) {
805 sort_list_item_clean((*fh)->si);
806 sort_free((*fh)->si);
807 (*fh)->si = NULL;
809 sort_free(*fh);
810 *fh = NULL;
817 file_header_swap(struct file_header **fh, size_t i1, size_t i2)
821 tmp = fh[i1];
822 fh[i1] = fh[i2];
823 fh[i2] = tmp;
833 file_header_heap_swim(struct file_header **fh, size_t indx)
840 if (file_header_cmp(fh[indx], fh[parent_index]) < 0) {
842 file_header_swap(fh, indx, parent_index);
843 file_header_heap_swim(fh, parent_index);
852 file_header_heap_sink(struct file_header **fh, size_t indx, size_t size)
866 (file_header_cmp(fh[left_child_index],
867 fh[right_child_index]) > 0))
869 if (file_header_cmp(fh[indx], fh[min_child_index]) > 0) {
870 file_header_swap(fh, indx, min_child_index);
871 file_header_heap_sink(fh, min_child_index, size);
882 file_header_list_rearrange_from_header(struct file_header **fh, size_t size)
884 file_header_heap_sink(fh, 0, size);
891 file_header_list_push(struct file_header *f, struct file_header **fh, size_t size)
893 fh[size++] = f;
894 file_header_heap_swim(fh, size - 1);
906 file_header_print(struct file_header *fh, FILE *f_out, struct last_printed *lp)
909 if ((lp->str == NULL) || (str_list_coll(lp->str, &(fh->si)))) {
910 bwsfwrite(fh->si->str, f_out, sort_opts_vals.zflag);
913 lp->str = bwsdup(fh->si->str);
916 bwsfwrite(fh->si->str, f_out, sort_opts_vals.zflag);
923 file_header_read_next(struct file_header *fh)
927 tmp = file_reader_readline(fh->fr);
929 file_reader_free(fh->fr);
930 fh->fr = NULL;
931 if (fh->si) {
932 sort_list_item_clean(fh->si);
933 sort_free(fh->si);
934 fh->si = NULL;
937 if (fh->si == NULL)
938 fh->si = sort_list_item_alloc();
939 sort_list_item_set(fh->si, tmp);
947 file_headers_merge(size_t fnum, struct file_header **fh, FILE *f_out)
958 file_header_list_push(fh[i], fh, i);
960 while (fh[0]->fr) { /* unfinished files are always in front */
962 file_header_print(fh[0], f_out, &lp);
964 file_header_read_next(fh[0]);
966 file_header_list_rearrange_from_header(fh, fnum);
980 struct file_header **fh;
989 fh = sort_reallocarray(NULL, argc + 1, sizeof(struct file_header *));
992 file_header_init(fh + i, argv[i], i);
994 file_headers_merge(argc, fh, f_out);
997 file_header_close(fh + i);
999 sort_free(fh);