#!/usr/bin/env python # -*- mode: python -*- import sys from optparse import OptionParser, IndentedHelpFormatter from fat import FAT, FatError class HelpFormatter(IndentedHelpFormatter): def format_description(self, description): return description class Script: def __init__(self): self.parser = OptionParser(usage='usage: %prog [options] command args', formatter = HelpFormatter()) self.parser.add_option('-d', '--device', dest='device', default='/dev/sdb1', help='the device where your filesystem is located') self.parser.set_description("""Commands: ln SRC DEST make a hard link from SRC to DEST. DEST must be an already present empty file. unlink FILE remove the directory entry associated to FILE, without marking its clusters as free.""") def main(self): self.options, args = self.parser.parse_args() if not args: self.parser.error('Invalid number of arguments') cmd, args = args[0], args[1:] f = file(self.options.device, 'r+b') self.fat = FAT(f) meth = getattr(self, cmd) meth(args) def check_argnum(self, args, n): if len(args) != n: self.parser.error('Invalid number of arguments') def print_fat(self, args): self.check_argnum(args, 0) for i in range(16): print '%2x --> %2x' % (i, self.fat.read_fat(i)) return 0 def ln(self, args): self.check_argnum(args, 2) self.fat.hard_link(*args) def unlink(self, args): self.check_argnum(args, 1) self.fat.unlink(*args) if __name__ == '__main__': script = Script() try: sys.exit(script.main()) except (IOError, FatError), e: print >> sys.stderr, e