diff options
Diffstat (limited to 'src/vfs/extfs/helpers')
-rw-r--r-- | src/vfs/extfs/helpers/Makefile.in | 2 | ||||
-rw-r--r-- | src/vfs/extfs/helpers/iso9660.in | 1 | ||||
-rw-r--r-- | src/vfs/extfs/helpers/lslR.in | 1 | ||||
-rw-r--r-- | src/vfs/extfs/helpers/mailfs.in | 3 | ||||
-rw-r--r-- | src/vfs/extfs/helpers/patchfs.in | 5 | ||||
-rw-r--r-- | src/vfs/extfs/helpers/s3+.in | 18 | ||||
-rw-r--r--[-rwxr-xr-x] | src/vfs/extfs/helpers/uc1541 | 152 |
7 files changed, 56 insertions, 126 deletions
diff --git a/src/vfs/extfs/helpers/Makefile.in b/src/vfs/extfs/helpers/Makefile.in index 0a240fb..95e5375 100644 --- a/src/vfs/extfs/helpers/Makefile.in +++ b/src/vfs/extfs/helpers/Makefile.in @@ -135,7 +135,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \ - $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \ + $(top_srcdir)/m4.include/vfs/mc-vfs-shell.m4 \ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \ diff --git a/src/vfs/extfs/helpers/iso9660.in b/src/vfs/extfs/helpers/iso9660.in index 5a6f1d5..f78db61 100644 --- a/src/vfs/extfs/helpers/iso9660.in +++ b/src/vfs/extfs/helpers/iso9660.in @@ -132,6 +132,7 @@ mcisofs_list () { *.lz) MYCAT="lzip -dc";; *.lz4) MYCAT="lz4 -dc";; *.lzma) MYCAT="lzma -dc";; + *.lzo) MYCAT="lzop -dc";; *.xz) MYCAT="xz -dc";; *.zst) MYCAT="zstd -dc";; *.bz2) MYCAT="bzip2 -dc";; diff --git a/src/vfs/extfs/helpers/lslR.in b/src/vfs/extfs/helpers/lslR.in index 69b663b..f568c02 100644 --- a/src/vfs/extfs/helpers/lslR.in +++ b/src/vfs/extfs/helpers/lslR.in @@ -15,6 +15,7 @@ case "$1" in *.lz) MYCAT="lzip -dc";; *.lz4) MYCAT="lz4 -dc";; *.lzma) MYCAT="lzma -dc";; + *.lzo) MYCAT="lzop -dc";; *.xz) MYCAT="xz -dc";; *.zst) MYCAT="zstd -dc";; *.bz2) MYCAT="bzip2 -dc";; diff --git a/src/vfs/extfs/helpers/mailfs.in b/src/vfs/extfs/helpers/mailfs.in index 5bb373b..20cfae3 100644 --- a/src/vfs/extfs/helpers/mailfs.in +++ b/src/vfs/extfs/helpers/mailfs.in @@ -11,6 +11,7 @@ $bzcat="bzip2 -dc"; # bunzip2 to stdout $lzipcat="lzip -dc"; # unlzip to stdout $lz4cat="lz4 -dc"; # unlz4 to stdout $lzcat="lzma -dc"; # unlzma to stdout +$lzocat="lzop -dc"; # unlzo to stdout $xzcat="xz -dc"; # unxz to stdout $zstdcat="zstd -dc"; # unzstd to stdout $file="file"; # "file" command @@ -194,6 +195,8 @@ if (/gzip/) { exit 1 unless (open IN, "$lz4cat $mbox_qname|"); } elsif (/lzma/) { exit 1 unless (open IN, "$lzcat $mbox_qname|"); +} elsif (/lzo/) { + exit 1 unless (open IN, "$lzocat $mbox_qname|"); } elsif (/xz/) { exit 1 unless (open IN, "$xzcat $mbox_qname|"); } elsif (/zst/) { diff --git a/src/vfs/extfs/helpers/patchfs.in b/src/vfs/extfs/helpers/patchfs.in index ee1e651..59fdde1 100644 --- a/src/vfs/extfs/helpers/patchfs.in +++ b/src/vfs/extfs/helpers/patchfs.in @@ -17,6 +17,7 @@ use File::Temp 'tempfile'; my $lzip = 'lzip'; my $lz4 = 'lz4'; my $lzma = 'lzma'; +my $lzo = 'lzop'; my $xz = 'xz'; my $zstd = 'zstd'; my $bzip = 'bzip2'; @@ -88,6 +89,8 @@ sub myin return "$lzip -dc $qfname"; } elsif (/^'*lzma/) { return "$lzma -dc $qfname"; + } elsif (/^'*lzo/) { + return "$lzo -dc $qfname"; } elsif (/^'*xz/) { return "$xz -dc $qfname"; } elsif (/^'*zst/) { @@ -114,6 +117,8 @@ sub myout return "$lzip -c $sep $qfname"; } elsif (/^'*lzma/) { return "$lzma -c $sep $qfname"; + } elsif (/^'*lzo/) { + return "$lzo -c $sep $qfname"; } elsif (/^'*xz/) { return "$xz -c $sep $qfname"; } elsif (/^'*zst/) { diff --git a/src/vfs/extfs/helpers/s3+.in b/src/vfs/extfs/helpers/s3+.in index f5e4b90..6436ba7 100644 --- a/src/vfs/extfs/helpers/s3+.in +++ b/src/vfs/extfs/helpers/s3+.in @@ -153,16 +153,16 @@ def threadmap(fun, iterable, maxthreads=16): Propagates exception safely. """ from threading import Thread - import Queue + import queue items = list(iterable) nitems = len(items) if nitems < 2: - return map(fun, items) + return list(map(fun, items)) # Create and fill input queue - input = Queue.Queue() - output = Queue.Queue() + input = queue.Queue() + output = queue.Queue() for i,item in enumerate(items): input.put( (i,item) ) @@ -181,7 +181,7 @@ def threadmap(fun, iterable, maxthreads=16): output.put( (i,result) ) except: output.put( (None,sys.exc_info()) ) - except Queue.Empty: + except queue.Empty: return # Start threads @@ -196,8 +196,8 @@ def threadmap(fun, iterable, maxthreads=16): try: i,res = output.get() if i == None: - raise res[0],res[1],res[2] - except Queue.Empty: + raise res[0](res[1]).with_traceback(res[2]) + except queue.Empty: break ret.append(res) @@ -241,7 +241,7 @@ def get_bucket(name): b = s3.get_bucket(name, validate=False) b.get_location() # just to raise an exception on error return b - except boto.exception.S3ResponseError, e: + except boto.exception.S3ResponseError as e: # Seems this is the only proper way to switch to the bucket's region. # Requesting of the default region for "?location" does not work unfortunately. m = re.search(r'<Region>(.*?)</Region>', e.body) @@ -340,7 +340,7 @@ if cmd == 'list': expr = re.compile(r'^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})\.\d{3}Z$') def convDate(awsdatetime): m = expr.match(awsdatetime) - ye,mo,da,ho,mi,se = map(int,m.groups()) + ye,mo,da,ho,mi,se = list(map(int,m.groups())) dt = datetime.datetime(ye,mo,da,ho,mi,se, tzinfo=pytz.utc) return dt.astimezone(tz).strftime('%m-%d-%Y %H:%M') diff --git a/src/vfs/extfs/helpers/uc1541 b/src/vfs/extfs/helpers/uc1541 index dc15b42..abb86ea 100755..100644 --- a/src/vfs/extfs/helpers/uc1541 +++ b/src/vfs/extfs/helpers/uc1541 @@ -1,24 +1,25 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ UC1541 Virtual filesystem Author: Roman 'gryf' Dobosz <gryf73@gmail.com> -Date: 2019-09-20 -Version: 3.3 +Date: 2023-10-04 +Version: 3.6 Licence: BSD source: https://bitbucket.org/gryf/uc1541 mirror: https://github.com/gryf/uc1541 """ - -import sys -import re -import os +import argparse import gzip -from subprocess import Popen, PIPE +import logging +import os +import re +import subprocess +import sys + +LOG = logging.getLogger('UC1541') if os.getenv('UC1541_DEBUG'): - import logging - LOG = logging.getLogger('UC1541') LOG.setLevel(logging.DEBUG) FILE_HANDLER = logging.FileHandler("/tmp/uc1541.log") FILE_FORMATTER = logging.Formatter("%(asctime)s %(levelname)-8s " @@ -26,47 +27,11 @@ if os.getenv('UC1541_DEBUG'): FILE_HANDLER.setFormatter(FILE_FORMATTER) FILE_HANDLER.setLevel(logging.DEBUG) LOG.addHandler(FILE_HANDLER) -else: - class LOG(object): - """ - Dummy logger object. Does nothing. - """ - @classmethod - def debug(*args, **kwargs): - pass - - @classmethod - def info(*args, **kwargs): - pass - - @classmethod - def warning(*args, **kwargs): - pass - - @classmethod - def error(*args, **kwargs): - pass - - @classmethod - def critical(*args, **kwargs): - pass SECLEN = 256 -def _ord(string_or_int): - """ - Return an int value for the (possible) string passed in argument. This - function is for compatibility between python2 and python3, where single - element in byte string array is a string or an int respectively. - """ - try: - return ord(string_or_int) - except TypeError: - return string_or_int - - def _get_raw(dimage): """ Try to get contents of the D64 image either it's gzip compressed or not. @@ -160,10 +125,10 @@ class Disk(object): filename = list() for chr_ in string: - if _ord(chr_) == 160: # shift+space character; $a0 + if chr_ == 160: # shift+space character; $a0 break - character = D64.CHAR_MAP.get(_ord(chr_), '?') + character = D64.CHAR_MAP.get(chr_, '?') filename.append(character) # special cases @@ -204,8 +169,8 @@ class Disk(object): if not self.current_sector_data: return False - self.next_track = _ord(self.current_sector_data[0]) - self.next_sector = _ord(self.current_sector_data[1]) + self.next_track = self.current_sector_data[0] + self.next_sector = self.current_sector_data[1] if (self.next_track, self.next_sector) in self._already_done: # Just a failsafe. Endless loop is not what is expected. @@ -239,7 +204,7 @@ class Disk(object): sector = self.current_sector_data for dummy in range(8): entry = sector[:32] - ftype = _ord(entry[2]) + ftype = entry[2] if ftype == 0: # deleted sector = sector[32:] @@ -247,12 +212,12 @@ class Disk(object): type_verbose = self._get_ftype(ftype) - protect = _ord(entry[2]) & 64 and "<" or " " + protect = entry[2] & 64 and "<" or " " fname = entry[5:21] if ftype == 'rel': - size = _ord(entry[23]) + size = entry[23] else: - size = _ord(entry[30]) + _ord(entry[31]) * 226 + size = entry[30] + entry[31] * 226 self._dir_contents.append({'fname': self._map_filename(fname), 'ftype': type_verbose, @@ -392,7 +357,7 @@ class Uc1541(object): """ Class for interact with c1541 program and MC """ - PRG = re.compile(r'(\d+)\s+"([^"]*)".+?\s(del|prg|rel|seq|usr)([\s<])') + PRG = re.compile(r'(\d+)\s+"([^"]*)".+?(del|prg|rel|seq|usr)([\s<])') def __init__(self, archname): self.arch = archname @@ -430,11 +395,7 @@ class Uc1541(object): """ LOG.info("Removing file %s", dst) dst = self._get_masked_fname(dst) - - if not self._call_command('delete', dst=dst): - return self._show_error() - - return 0 + return self._call_command('delete', dst=dst) def copyin(self, dst, src): """ @@ -442,11 +403,7 @@ class Uc1541(object): """ LOG.info("Copy into D64 %s as %s", src, dst) dst = self._correct_fname(dst) - - if not self._call_command('write', src=src, dst=dst): - return self._show_error() - - return 0 + return self._call_command('write', src=src, dst=dst) def copyout(self, src, dst): """ @@ -459,10 +416,7 @@ class Uc1541(object): src = self._get_masked_fname(src) - if not self._call_command('read', src=src, dst=dst): - return self._show_error() - - return 0 + return self._call_command('read', src=src, dst=dst) def mkdir(self, dirname): """Not supported""" @@ -523,8 +477,9 @@ class Uc1541(object): uid = os.getuid() gid = os.getgid() - if not self._call_command('list'): - return self._show_error() + res = self._call_command('list') + if res != 0: + return res idx = 0 for line in self.out.split("\n"): @@ -540,7 +495,7 @@ class Uc1541(object): if '/' in display_name: display_name = display_name.replace('/', '|') - # workaround for space and dash at the beginning of the + # workaround for space and dash at the beggining of the # filename char_map = {' ': '~', '-': '_'} @@ -593,13 +548,16 @@ class Uc1541(object): universal_newlines = True if cmd in ['delete', 'write']: universal_newlines = False - self.out, self.err = Popen(command, - universal_newlines=universal_newlines, - stdout=PIPE, stderr=PIPE).communicate() + (self.out, + self.err) = subprocess.Popen(command, + universal_newlines=universal_newlines, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE).communicate() if self.err: LOG.debug('an err: %s', self.err) - return not self.err + return self._show_error() + return 0 CALL_MAP = {'list': lambda a: Uc1541(a.arch).list(), @@ -612,7 +570,7 @@ CALL_MAP = {'list': lambda a: Uc1541(a.arch).list(), def parse_args(): """Use ArgumentParser to check for script arguments and execute.""" - parser = ArgumentParser() + parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(help='supported commands', dest='subcommand') subparsers.required = True @@ -659,44 +617,6 @@ def parse_args(): return args.func(args) -def no_parse(): - """Failsafe argument "parsing". Note, that it blindly takes positional - arguments without checking them. In case of wrong arguments it will - silently exit""" - try: - if sys.argv[1] not in ('list', 'copyin', 'copyout', 'rm', 'mkdir', - "run"): - sys.exit(2) - except IndexError: - sys.exit(2) - - class Arg(object): - """Mimic argparse object""" - dst = None - src = None - arch = None - - arg = Arg() - - try: - arg.arch = sys.argv[2] - if sys.argv[1] in ('copyin', 'copyout'): - arg.src = sys.argv[3] - arg.dst = sys.argv[4] - elif sys.argv[1] in ('rm', 'run', 'mkdir'): - arg.dst = sys.argv[3] - except IndexError: - sys.exit(2) - - return CALL_MAP[sys.argv[1]](arg) - - if __name__ == "__main__": LOG.debug("Script params: %s", str(sys.argv)) - try: - from argparse import ArgumentParser - PARSE_FUNC = parse_args - except ImportError: - PARSE_FUNC = no_parse - - sys.exit(PARSE_FUNC()) + sys.exit(parse_args()) |