Example #1
0
/*
 * Find fields start
 */
static void
find_field_start(const struct bwstring *s, struct key_specs *ks,
    size_t *field_start, size_t *key_start, bool *empty_field, bool *empty_key)
{

	*field_start = skip_fields_to_start(s, ks->f1, empty_field);
	if (!*empty_field)
		*key_start = skip_cols_to_start(s, ks->c1, *field_start,
		    ks->pos1b, empty_key);
	else
		*empty_key = true;
}
Example #2
0
/*
 * Find end key position
 */
static size_t
find_field_end(const struct bwstring *s, struct key_specs *ks)
{
	size_t f2, next_field_start, pos_end;
	bool empty_field, empty_key;

	pos_end = 0;
	next_field_start = 0;
	empty_field = false;
	empty_key = false;
	f2 = ks->f2;

	if (f2 == 0)
		return (BWSLEN(s) + 1);
	else {
		if (ks->c2 == 0) {
			next_field_start = skip_fields_to_start(s, f2 + 1,
			    &empty_field);
			if ((next_field_start > 0) && sort_opts_vals.tflag &&
			    (sort_opts_vals.field_sep == BWS_GET(s,
			    next_field_start - 1)))
				--next_field_start;
		} else
			next_field_start = skip_fields_to_start(s, f2,
			    &empty_field);
	}

	if (empty_field || (next_field_start >= BWSLEN(s)))
		return (BWSLEN(s) + 1);

	if (ks->c2) {
		pos_end = skip_cols_to_start(s, ks->c2, next_field_start,
		    ks->pos2b, &empty_key);
		if (pos_end < BWSLEN(s))
			++pos_end;
	} else
		pos_end = next_field_start;

	return (pos_end);
}