636 |
return error; |
return error; |
637 |
} |
} |
638 |
|
|
639 |
static bool ccs_print_name_union(struct ccs_io_buffer *head, bool is_group, |
static bool ccs_print_name_union(struct ccs_io_buffer *head, |
640 |
union ccs_name_union *group) |
struct ccs_name_union *ptr) |
641 |
{ |
{ |
642 |
const int pos = head->read_avail; |
const int pos = head->read_avail; |
643 |
if (pos && head->read_buf[pos - 1] == ' ') |
if (pos && head->read_buf[pos - 1] == ' ') |
644 |
head->read_avail--; |
head->read_avail--; |
645 |
if (is_group) |
if (ptr->is_group) |
646 |
return ccs_io_printf(head, " @%s", |
return ccs_io_printf(head, " @%s", |
647 |
group->group->group_name->name); |
ptr->group->group_name->name); |
648 |
return ccs_io_printf(head, " %s", group->filename->name); |
return ccs_io_printf(head, " %s", ptr->filename->name); |
649 |
} |
} |
650 |
|
|
651 |
static bool ccs_print_number_union(struct ccs_io_buffer *head, bool is_group, |
static bool ccs_print_number_union(struct ccs_io_buffer *head, |
652 |
union ccs_number_union *group) |
struct ccs_number_union *ptr) |
653 |
{ |
{ |
654 |
unsigned int min; |
unsigned long min; |
655 |
unsigned int max; |
unsigned long max; |
656 |
if (is_group) |
u8 min_type; |
657 |
|
u8 max_type; |
658 |
|
if (ptr->is_group) |
659 |
return ccs_io_printf(head, " @%s", |
return ccs_io_printf(head, " @%s", |
660 |
group->group->group_name->name); |
ptr->group->group_name->name); |
661 |
min = group->value.min; |
min_type = ptr->min_type; |
662 |
max = group->value.max; |
max_type = ptr->max_type; |
663 |
if (min == max) |
min = ptr->values[0]; |
664 |
return ccs_io_printf(head, " %u", min); |
max = ptr->values[1]; |
665 |
return ccs_io_printf(head, " %u-%u", min, max); |
switch (min_type) { |
666 |
|
case VALUE_TYPE_HEXADECIMAL: |
667 |
|
if (!ccs_io_printf(head, " 0x%lX", min)) |
668 |
|
return false; |
669 |
|
break; |
670 |
|
case VALUE_TYPE_OCTAL: |
671 |
|
if (!ccs_io_printf(head, " 0%lo", min)) |
672 |
|
return false; |
673 |
|
break; |
674 |
|
default: |
675 |
|
if (!ccs_io_printf(head, " %lu", min)) |
676 |
|
return false; |
677 |
|
break; |
678 |
|
} |
679 |
|
if (min == max && min_type == max_type) |
680 |
|
return true; |
681 |
|
switch (max_type) { |
682 |
|
case VALUE_TYPE_HEXADECIMAL: |
683 |
|
return ccs_io_printf(head, "-0x%lX", max); |
684 |
|
case VALUE_TYPE_OCTAL: |
685 |
|
return ccs_io_printf(head, "-0%lo", max); |
686 |
|
default: |
687 |
|
return ccs_io_printf(head, "-%lu", max); |
688 |
|
} |
689 |
} |
} |
690 |
|
|
691 |
/** |
/** |
717 |
msg = ccs_sp2keyword(bit); |
msg = ccs_sp2keyword(bit); |
718 |
pos = head->read_avail; |
pos = head->read_avail; |
719 |
if (!ccs_io_printf(head, "allow_%s", msg) || |
if (!ccs_io_printf(head, "allow_%s", msg) || |
720 |
!ccs_print_name_union(head, ptr->name_is_group, |
!ccs_print_name_union(head, &ptr->name) || |
|
&ptr->name) || |
|
721 |
!ccs_print_condition(head, cond)) |
!ccs_print_condition(head, cond)) |
722 |
goto out; |
goto out; |
723 |
} |
} |
752 |
msg = ccs_mkdev2keyword(bit); |
msg = ccs_mkdev2keyword(bit); |
753 |
pos = head->read_avail; |
pos = head->read_avail; |
754 |
if (!ccs_io_printf(head, "allow_%s", msg) || |
if (!ccs_io_printf(head, "allow_%s", msg) || |
755 |
!ccs_print_name_union(head, ptr->name_is_group, |
!ccs_print_name_union(head, &ptr->name) || |
756 |
&ptr->name) || |
!ccs_print_number_union(head, &ptr->major) || |
757 |
!ccs_print_number_union(head, ptr->major_is_group, |
!ccs_print_number_union(head, &ptr->minor) || |
|
&ptr->major) || |
|
|
!ccs_print_number_union(head, ptr->minor_is_group, |
|
|
&ptr->minor) || |
|
758 |
!ccs_print_condition(head, cond)) |
!ccs_print_condition(head, cond)) |
759 |
goto out; |
goto out; |
760 |
} |
} |
789 |
msg = ccs_dp2keyword(bit); |
msg = ccs_dp2keyword(bit); |
790 |
pos = head->read_avail; |
pos = head->read_avail; |
791 |
if (!ccs_io_printf(head, "allow_%s", msg) || |
if (!ccs_io_printf(head, "allow_%s", msg) || |
792 |
!ccs_print_name_union(head, ptr->name1_is_group, |
!ccs_print_name_union(head, &ptr->name1) || |
793 |
&ptr->name1) || |
!ccs_print_name_union(head, &ptr->name2) || |
|
!ccs_print_name_union(head, ptr->name2_is_group, |
|
|
&ptr->name2) || |
|
794 |
!ccs_print_condition(head, cond)) |
!ccs_print_condition(head, cond)) |
795 |
goto out; |
goto out; |
796 |
} |
} |
825 |
msg = ccs_path_number2keyword(bit); |
msg = ccs_path_number2keyword(bit); |
826 |
pos = head->read_avail; |
pos = head->read_avail; |
827 |
if (!ccs_io_printf(head, "allow_%s", msg) || |
if (!ccs_io_printf(head, "allow_%s", msg) || |
828 |
!ccs_print_name_union(head, ptr->name_is_group, |
!ccs_print_name_union(head, &ptr->name) || |
829 |
&ptr->name) || |
!ccs_print_number_union(head, &ptr->number) || |
|
!ccs_print_number_union(head, ptr->number_is_group, |
|
|
&ptr->number) || |
|
830 |
!ccs_print_condition(head, cond)) |
!ccs_print_condition(head, cond)) |
831 |
goto out; |
goto out; |
832 |
} |
} |
990 |
goto out; |
goto out; |
991 |
break; |
break; |
992 |
} |
} |
993 |
if (!ccs_print_number_union(head, ptr->port_is_group, &ptr->port) || |
if (!ccs_print_number_union(head, &ptr->port) || |
994 |
!ccs_print_condition(head, cond)) |
!ccs_print_condition(head, cond)) |
995 |
goto out; |
goto out; |
996 |
return true; |
return true; |