volatile bool fd_running = false;
int fd_compare(struct fd *a, struct fd *b) {
- return (a->fd - b->fd) ?: (a->mode - b->mode);
+ return a->fd - b->fd;
};
bool fd_init(void) {
FD_ZERO(&readset);
FD_ZERO(&writeset);
- FD_ZERO(&exceptset);
+ FD_ZERO(&errorset);
fds = avl_tree_new((avl_compare_t)fd_compare, NULL);
FD_CLR(fd->fd, &writeset);
FD_CLR(fd->fd, &errorset);
- if(fd->fd >= max_fd)
- max_fd = ((struct fd *)fds->tail)->fd;
+ avl_del(fds, fd);
- return avl_del(fds, fd);
+ if(fds->tail)
+ max_fd = ((struct fd *)fds->tail->data)->fd;
+ else
+ max_fd = 0;
+
+ return true;
};
bool fd_mod(struct fd *fd) {