summaryrefslogtreecommitdiff
path: root/scripts/nids-check-digest.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/nids-check-digest.py')
-rw-r--r--scripts/nids-check-digest.py52
1 files changed, 19 insertions, 33 deletions
diff --git a/scripts/nids-check-digest.py b/scripts/nids-check-digest.py
index 47a71d2..b386bb3 100644
--- a/scripts/nids-check-digest.py
+++ b/scripts/nids-check-digest.py
@@ -6,47 +6,33 @@
# Vita Development Suite Libraries
#
-import sys
from hashlib import sha1
from pathlib import Path
-from yaml import load
-try:
- from yaml import CLoader as Loader
-except ImportError:
- from yaml import SafeLoader as Loader
+import nids
def name2nid(n, s):
digest = sha1((n + s).encode('utf-8')).digest()
return int.from_bytes(digest[:4], byteorder='little')
-def print_ex_expect(exports, suffix):
- for name, nid in exports.items():
- computed_nid = name2nid(name, suffix)
+def module_cb(ud, modname, module):
+ ud[0] = modname
+
+def library_cb(ud, libname, library):
+ for suffix in ['', ud[0], libname]:
+ if library['nid'] == name2nid(libname, suffix):
+ print(f'{libname} [{suffix}]')
+ ud[1] = suffix
+ return
+ ud[1] = None
+
+def export_cb(ud, kind, name, nid):
+ if ud[1] is not None:
+ computed_nid = name2nid(name, ud[1])
if nid != computed_nid:
print(f' {nid:08X} ≠ {computed_nid:08X} {name}')
-def print_lib_expect(libname, lib, suffix):
- if lib['nid'] == name2nid(libname, suffix):
- print(f'{libname} [{suffix}]')
- if 'functions' in lib:
- print_ex_expect(lib['functions'], suffix)
- if 'variables' in lib:
- print_ex_expect(lib['variables'], suffix)
- return 1
- return 0
-
-def check_digest(d):
- for c in d.iterdir():
- if c.is_file():
- for modname, mod in load(c.read_bytes(), Loader=Loader)['modules'].items():
- for libname, lib in mod['libraries'].items():
- if not print_lib_expect(libname, lib, ''):
- if not print_lib_expect(libname, lib, libname):
- print_lib_expect(libname, lib, modname)
- elif c.is_dir():
- check_digest(c)
- else:
- sys.exit("Unexpected file type")
-
-check_digest(Path('nids'))
+def check_digest(f):
+ nids.process(f, module_cb=module_cb, library_cb=library_cb, export_cb=export_cb, user_data=[None, None])
+
+nids.iterdir('nids', check_digest)