summaryrefslogtreecommitdiff
path: root/util/cpt_upgraders/process-fdmap-rename.py
blob: 6bbbd5459a3e1de0ee34d931ad5f23c55b88e6e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# http://stackoverflow.com/questions/15069127/python-configparser-module-\
# rename-a-section
def rename_section(cp, section_from, section_to):
    items = cp.items(section_from)
    cp.add_section(section_to)
    for item in items:
        cp.set(section_to, item[0], item[1])
    cp.remove_section(section_from)

# Checkpoint version F renames an internal member of Process class.
def upgrader(cpt):
    import re
    for sec in cpt.sections():
        fdm = 'FdMap'
        fde = 'FDEntry'
        if re.match('.*\.%s.*' % fdm, sec):
            rename = re.sub(fdm, fde, sec)
            split = re.split(fde, rename)

            # rename the section and add the 'mode' field
            rename_section(cpt, sec, rename)
            cpt.set(rename, 'mode', "0") # no proper value to set :(

            # add in entries 257 to 1023
            if split[1] == "0":
                for x in range(257, 1024):
                    seq = (split[0], fde, "%s" % x)
                    section = "".join(seq)
                    cpt.add_section(section)
                    cpt.set(section, 'fd', '-1')

legacy_version = 15