| 361 | } |
| 362 | |
| 363 | cap_rights_t * |
| 364 | cap_rights_remove(cap_rights_t *dst, const cap_rights_t *src) |
| 365 | { |
| 366 | unsigned int i, n; |
| 367 | |
| 368 | assert(CAPVER(dst) == CAP_RIGHTS_VERSION_00); |
| 369 | assert(CAPVER(src) == CAP_RIGHTS_VERSION_00); |
| 370 | assert(CAPVER(dst) == CAPVER(src)); |
| 371 | assert(cap_rights_is_valid(src)); |
| 372 | assert(cap_rights_is_valid(dst)); |
| 373 | |
| 374 | n = CAPARSIZE(dst); |
| 375 | assert(n >= CAPARSIZE_MIN && n <= CAPARSIZE_MAX); |
| 376 | |
| 377 | for (i = 0; i < n; i++) { |
| 378 | dst->cr_rights[i] &= |
| 379 | ~(src->cr_rights[i] & 0x01FFFFFFFFFFFFFFULL); |
| 380 | } |
| 381 | |
| 382 | assert(cap_rights_is_valid(src)); |
| 383 | assert(cap_rights_is_valid(dst)); |
| 384 | |
| 385 | return (dst); |
| 386 | } |
| 387 | |
| 388 | #ifndef _KERNEL |
| 389 | bool |
nothing calls this directly
no test coverage detected