Home | History | Annotate | Download | only in adb

Lines Matching refs:fde

1247 static void dump_fde(fdevent *fde, const char *info)
1249 fprintf(stderr,"FDE #%03d %c%c%c %s\n", fde->fd,
1250 fde->state & FDE_READ ? 'R' : ' ',
1251 fde->state & FDE_WRITE ? 'W' : ' ',
1252 fde->state & FDE_ERROR ? 'E' : ' ',
1256 #define dump_fde(fde, info) do { } while(0)
1340 fdevent* fde = fd_table[ fd - WIN32_FH_BASE ];
1342 if (fde != NULL && fde->fd == fd) {
1343 if ((fde->state & FDE_PENDING) == 0) {
1344 fde->state |= FDE_PENDING;
1345 fdevent_plist_enqueue( fde );
1347 fde->events |= hook->wanted;
1437 static void fdevent_connect(fdevent *fde)
1440 int events = fde->state & FDE_EVENTMASK;
1443 event_looper_hook( looper, fde->fd, events );
1446 static void fdevent_disconnect(fdevent *fde)
1449 int events = fde->state & FDE_EVENTMASK;
1452 event_looper_unhook( looper, fde->fd, events );
1455 static void fdevent_update(fdevent *fde, unsigned events)
1458 unsigned events0 = fde->state & FDE_EVENTMASK;
1464 D("fdevent_update: remove %x from %d\n", removes, fde->fd);
1465 event_looper_unhook( looper, fde->fd, removes );
1468 D("fdevent_update: add %x to %d\n", adds, fde->fd);
1469 event_looper_hook ( looper, fde->fd, adds );
1571 static void fdevent_register(fdevent *fde)
1573 int fd = fde->fd - WIN32_FH_BASE;
1576 FATAL("bogus negative fd (%d)\n", fde->fd);
1581 if(fde->fd > 32000) {
1582 FATAL("bogus huuuuge fd (%d)\n", fde->fd);
1598 fd_table[fd] = fde;
1601 static void fdevent_unregister(fdevent *fde)
1603 int fd = fde->fd - WIN32_FH_BASE;
1606 FATAL("fd out of range (%d)\n", fde->fd);
1609 if(fd_table[fd] != fde) {
1615 if(!(fde->state & FDE_DONT_CLOSE)) {
1616 dump_fde(fde, "close");
1617 adb_close(fde->fd);
1656 fdevent *fde = (fdevent*) malloc(sizeof(fdevent));
1657 if(fde == 0) return 0;
1658 fdevent_install(fde, fd, func, arg);
1659 fde->state |= FDE_CREATED;
1660 return fde;
1663 void fdevent_destroy(fdevent *fde)
1665 if(fde == 0) return;
1666 if(!(fde->state & FDE_CREATED)) {
1667 FATAL("fde %p not created by fdevent_create()\n", fde);
1669 fdevent_remove(fde);
1672 void fdevent_install(fdevent *fde, int fd, fd_func func, void *arg)
1674 memset(fde, 0, sizeof(fdevent));
1675 fde->state = FDE_ACTIVE;
1676 fde->fd = fd;
1677 fde->func = func;
1678 fde->arg = arg;
1680 fdevent_register(fde);
1681 dump_fde(fde, "connect");
1682 fdevent_connect(fde);
1683 fde->state |= FDE_ACTIVE;
1686 void fdevent_remove(fdevent *fde)
1688 if(fde->state & FDE_PENDING) {
1689 fdevent_plist_remove(fde);
1692 if(fde->state & FDE_ACTIVE) {
1693 fdevent_disconnect(fde);
1694 dump_fde(fde, "disconnect");
1695 fdevent_unregister(fde);
1698 fde->state = 0;
1699 fde->events = 0;
1703 void fdevent_set(fdevent *fde, unsigned events)
1707 if((fde->state & FDE_EVENTMASK) == (int)events) return;
1709 if(fde->state & FDE_ACTIVE) {
1710 fdevent_update(fde, events);
1711 dump_fde(fde, "update");
1714 fde->state = (fde->state & FDE_STATEMASK) | events;
1716 if(fde->state & FDE_PENDING) {
1721 fde->events &= (~events);
1722 if(fde->events == 0) {
1723 fdevent_plist_remove(fde);
1724 fde->state &= (~FDE_PENDING);
1729 void fdevent_add(fdevent *fde, unsigned events)
1732 fde, (fde->state & FDE_EVENTMASK) | (events & FDE_EVENTMASK));
1735 void fdevent_del(fdevent *fde, unsigned events)
1738 fde, (fde->state & FDE_EVENTMASK) & (~(events & FDE_EVENTMASK)));
1743 fdevent *fde;
1751 while((fde = fdevent_plist_dequeue())) {
1752 unsigned events = fde->events;
1753 fde->events = 0;
1754 fde->state &= (~FDE_PENDING);
1755 dump_fde(fde, "callback");
1756 fde->func(fde->fd, events, fde->arg);