# deck.fs: FS interaction helpers (WIP) # Created by Luxferre in 2025, released into public domain import os MCU_STORAGE = False try: import storage MCU_STORAGE = True except: pass def unlock_rootfs(): if MCU_STORAGE: storage.remount("/", readonly=False) def lock_rootfs(): if MCU_STORAGE: storage.remount("/", readonly=True) # TODO: switch to buffered copying to avoid RAM overflow def copy(p1, p2): with open(p1, 'rb') as f1: content = f1.read() with open(p2, 'wb') as f2: f2.write(content) cp = copy # shortcut export # Some shortcut export bindings to corresponding os functions sep = pathsep = os.sep cwd = pwd = os.getcwd ls = listdir = os.listdir md = mkdir = os.mkdir cd = chdir = os.chdir rd = rmdir = os.rmdir rm = remove = os.remove mv = rename = move = os.rename try: sync = os.sync except: def sync(): pass env = getenv = os.getenv rnd = urandom = os.urandom # adapted statistics methods # for a file def stat(path): st_mode, _, _, _, _, _, \ st_size, st_atime, st_mtime, st_ctime = os.stat(path) return { 'mode': st_mode, 'size': st_size, 'atime': st_atime, 'mtime': st_mtime, 'ctime': st_ctime } # for a filesystem def statvfs(path): f_bsize, f_frsize, f_frags, f_bfree, f_bavail, f_files, \ f_ffree, f_favail, f_flag, f_namemax = os.statvfs(path) return { 'block_size': f_bsize, 'fragment_size': f_frsize, 'fragments': f_frags, 'blocks_free': f_bfree, 'blocks_avail': f_bavail, 'inodes': f_files, 'inodes_free': f_ffree, 'inodes_avail': f_favail, 'mount_flags': f_flag, 'max_name_len': f_namemax } du = stat # shortcut export df = statvfs # shortcut export