| 689 | }; |
| 690 | #endif |
| 691 | int |
| 692 | sys_ksem_close(struct thread *td, struct ksem_close_args *uap) |
| 693 | { |
| 694 | struct ksem *ks; |
| 695 | struct file *fp; |
| 696 | int error; |
| 697 | |
| 698 | /* No capability rights required to close a semaphore. */ |
| 699 | AUDIT_ARG_FD(uap->id); |
| 700 | error = ksem_get(td, uap->id, &cap_no_rights, &fp); |
| 701 | if (error) |
| 702 | return (error); |
| 703 | ks = fp->f_data; |
| 704 | if (ks->ks_flags & KS_ANONYMOUS) { |
| 705 | fdrop(fp, td); |
| 706 | return (EINVAL); |
| 707 | } |
| 708 | error = kern_close(td, uap->id); |
| 709 | fdrop(fp, td); |
| 710 | return (error); |
| 711 | } |
| 712 | |
| 713 | #ifndef _SYS_SYSPROTO_H_ |
| 714 | struct ksem_post_args { |
nothing calls this directly
no test coverage detected