1#!/usr/bin/python2 2 3def 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 50def 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 56for 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) 64