tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

make_epoll_table.py (1807B)


      1 #!/usr/bin/python2
      2 
      3 def get(old,wc,rc,cc):
      4    if ('xxx' in (rc, wc, cc)):
      5        return "0",255
      6 
      7    if ('add' in (rc, wc, cc)):
      8        events = []
      9        if rc == 'add' or (rc != 'del' and 'r' in old):
     10            events.append("EPOLLIN")
     11        if wc == 'add' or (wc != 'del' and 'w' in old):
     12            events.append("EPOLLOUT")
     13        if cc == 'add' or (cc != 'del' and 'c' in old):
     14            events.append("EPOLLRDHUP")
     15 
     16        if old == "0":
     17            op = "EPOLL_CTL_ADD"
     18        else:
     19            op = "EPOLL_CTL_MOD"
     20        return "|".join(events), op
     21 
     22    if ('del' in (rc, wc, cc)):
     23        delevents = []
     24        modevents = []
     25        op = "EPOLL_CTL_DEL"
     26 
     27        if 'r' in old:
     28            modevents.append("EPOLLIN")
     29        if 'w' in old:
     30            modevents.append("EPOLLOUT")
     31        if 'c' in old:
     32            modevents.append("EPOLLRDHUP")
     33 
     34        for item, event in [(rc,"EPOLLIN"),
     35                            (wc,"EPOLLOUT"),
     36                            (cc,"EPOLLRDHUP")]:
     37            if item == 'del':
     38                delevents.append(event)
     39                if event in modevents:
     40                    modevents.remove(event)
     41 
     42        if modevents:
     43            return "|".join(modevents), "EPOLL_CTL_MOD"
     44        else:
     45            return "|".join(delevents), "EPOLL_CTL_DEL"
     46 
     47    return 0, 0
     48 
     49 
     50 def fmt(op, ev, old, wc, rc, cc):
     51    entry = "{ %s, %s },"%(op, ev)
     52    print "\t/* old=%3s, write:%3s, read:%3s, close:%3s */\n\t%s" % (
     53        old, wc, rc, cc, entry)
     54    return len(entry)
     55 
     56 for old in ('0','r','w','rw','c','cr','cw','crw'):
     57    for wc in ('0', 'add', 'del', 'xxx'):
     58        for rc in ('0', 'add', 'del', 'xxx'):
     59            for cc in ('0', 'add', 'del', 'xxx'):
     60 
     61                op,ev = get(old,wc,rc,cc)
     62 
     63                fmt(op, ev, old, wc, rc, cc)