Lines Matching defs:rfd
71 rfd_find_prev_class(rfd_t *rfd, rfd_class_t class)
73 while (rfd != NULL && rfd->rfd_class != class)
74 rfd = rfd->rfd_prev;
75 return (rfd);
82 rfd_revoke_fd(rfd_t *rfd)
84 if (rfd->rfd_revoke != NULL)
85 rfd->rfd_revoke(rfd);
86 return (rfd_close(rfd->rfd_fd));
96 rfd_t *rfd = NULL;
110 rfd = rfd_find_prev_class(tail, RFD_RESERVED);
116 if (rfd == NULL) {
117 rfd = rfd_find_prev_class(tail, RFD_PSINFO);
118 if (rfd != NULL)
119 rfd = rfd->rfd_prev_class;
127 if (rfd == NULL) {
128 rfd = tail;
129 while (rfd != NULL && class == RFD_RESERVED && rfd->rfd_class ==
131 rfd = rfd->rfd_prev;
134 if (rfd != NULL)
135 return (rfd_revoke_fd(rfd));
153 void(*revoke)(struct rfd *), void *data, int oflag, mode_t mode)
156 rfd_t *rfd;
171 rfd = malloc(sizeof (*rfd));
172 if (rfd == NULL) {
176 (void) bzero(rfd, sizeof (*rfd));
177 rfd->rfd_fd = fd;
178 rfd->rfd_class = class;
179 rfd->rfd_revoke = revoke;
180 rfd->rfd_data = data;
182 rfd->rfd_prev_class = rfd_find_prev_class(tail, class);
184 rfd->rfd_prev_class = tail;
185 rfd->rfd_prev = tail;
187 tail->rfd_next = rfd;
188 tail = rfd;
202 rfd_t *rfd;
207 rfd = tail;
208 while (rfd != NULL) {
209 rfdprev = rfd->rfd_prev;
210 if (rfd->rfd_fd == fd) {
211 if (rfd->rfd_prev != NULL)
212 rfd->rfd_prev->rfd_next = rfd->rfd_next;
213 if (rfd->rfd_next != NULL)
214 rfd->rfd_next->rfd_prev = rfd->rfd_prev;
215 if (tail == rfd)
216 tail = rfd->rfd_prev;
217 for (nextclass = rfd->rfd_next; nextclass != NULL;
219 if (nextclass->rfd_class == rfd->rfd_class) {
221 rfd->rfd_prev_class;
224 free(rfd);
230 rfd = rfdprev;