diff options
| author | Mattias Andrée <maandree@operamail.com> | 2014-06-14 19:24:33 +0200 |
|---|---|---|
| committer | Mattias Andrée <maandree@operamail.com> | 2014-06-14 19:24:33 +0200 |
| commit | b8c1d03fcfad278612dc5948d2e6278393242040 (patch) | |
| tree | 65db93cb8fcef3dd9a65c2e0135eb655dbc323e1 | |
| parent | common api for posix and sysv ipc (diff) | |
| download | cmdipc-b8c1d03fcfad278612dc5948d2e6278393242040.tar.gz cmdipc-b8c1d03fcfad278612dc5948d2e6278393242040.tar.bz2 cmdipc-b8c1d03fcfad278612dc5948d2e6278393242040.tar.xz | |
fix small errors
Signed-off-by: Mattias Andrée <maandree@operamail.com>
| -rwxr-xr-x | src/cmdipc | 75 | ||||
| -rw-r--r-- | src/unified_posix_ipc.py | 13 | ||||
| -rw-r--r-- | src/unified_sysv_ipc.py | 3 |
3 files changed, 49 insertions, 42 deletions
@@ -81,7 +81,6 @@ if parser.opts['--help'] is not None: if parser.opts['--posix'] is not None: import unified_posix_ipc as ipc use_posix = True - else: import unified_sysv_ipc as ipc use_posix = False @@ -94,7 +93,7 @@ try: elif parser.opts['--mqueue'] is not None: key, flags, mode, size, type, timeout = None, 0, 0o600, 2048, None, None if parser.opts['--nonblocking'] is not None: timeout = 0 - if parser.opts['--key'] is not None: key = keysep(parser.opts['--key'][0]) + if parser.opts['--key'] is not None: key = ipc.keysep(parser.opts['--key'][0])[0] if parser.opts['--create'] is not None: flags = ipc.CREAT if parser.opts['--exclusive'] is not None: flags = ipc.CREAT | ipc.EXCL if parser.opts['--mode'] is not None: mode = int(parser.opts['--mode'][0], 8) @@ -104,7 +103,7 @@ try: if parser.opts['--timeout'] is not None: timeout = float(parser.opts['--timeout'][0]) q = ipc.MessageQueue(key, flags, mode, size) if key is None: - print('key: %s' % keycat(q.key)) + print('key: %s' % ipc.keycat(q.key)) nocmd = False if (len(parser.files) > 1) and (parser.files[0] == 'send'): if type is None: @@ -121,17 +120,17 @@ try: sys.stdout.buffer.flush() elif key is not None: nocmd = True - q.close() if parser.opts['--remove'] is not None: q.remove() elif nocmd: + q.close() print('Invalid command given', file = sys.stderr) sys.exit(1) elif parser.opts['--semaphore'] is not None: key, flags, mode, initial, timeout, delta = None, 0, 0o600, 0, None, 1 if parser.opts['--nonblocking'] is not None: timeout = 0 - if parser.opts['--key'] is not None: key = keysep(parser.opts['--key'][0]) + if parser.opts['--key'] is not None: key = ipc.keysep(parser.opts['--key'][0])[0] if parser.opts['--create'] is not None: flags = ipc.CREAT if parser.opts['--exclusive'] is not None: flags = ipc.CREAT | ipc.EXCL if parser.opts['--mode'] is not None: mode = int(parser.opts['--mode'][0], 8) @@ -140,7 +139,7 @@ try: if parser.opts['--delta'] is not None: delta = int(parser.opts['--delta'][0]) s = ipc.Semaphore(key, flags, mode, initial) if key is None: - print('key: %s' % keycat(s.key)) + print('key: %s' % ipc.keycat(s.key)) nocmd = False if (len(parser.files) == 1) and (parser.files[0] == 'p'): s.P(timeout, delta) elif (len(parser.files) == 1) and (parser.files[0] == 'v'): s.V(delta) @@ -149,16 +148,16 @@ try: elif (len(parser.files) == 2) and (parser.files[0] == 'set'): s.set_value(int(parser.files[1])) elif key is not None: nocmd = True - s.close() if parser.opts['--remove'] is not None: s.remove() elif nocmd: + s.close() print('Invalid command given', file = sys.stderr) sys.exit(1) elif parser.opts['--shm'] is not None: key, flags, mode, size, length, offset = None, 0, 0o600, None, 0, 0 - if parser.opts['--key'] is not None: key = keysep(parser.opts['--key'][0]) + if parser.opts['--key'] is not None: key = ipc.keysep(parser.opts['--key'][0])[0] if parser.opts['--create'] is not None: flags = ipc.CREAT if parser.opts['--exclusive'] is not None: flags = ipc.CREAT | ipc.EXCL if parser.opts['--mode'] is not None: mode = int(parser.opts['--mode'][0], 8) @@ -170,7 +169,7 @@ try: else: m = ipc.SharedMemory(key, flags, mode, size) if key is None: - print('key: %s' % keycat(m.key)) + print('key: %s' % ipc.keycat(m.key)) nocmd = False if (len(parser.files) > 1) and (parser.files[0] == 'write'): m.write(' '.join(parser.files[1:]).encode('utf-8'), offset) @@ -180,40 +179,40 @@ try: sys.stdout.buffer.flush() elif key is not None: nocmd = True - m.close() if parser.opts['--remove'] is not None: m.remove() elif nocmd: + m.close() print('Invalid command given', file = sys.stderr) sys.exit(1) elif parser.opts['--mutex'] is not None: key, flags, mode, timeout = None, 0, 0o600, None if parser.opts['--nonblocking'] is not None: timeout = 0 - if parser.opts['--key'] is not None: key = keysep(parser.opts['--key'][0]) + if parser.opts['--key'] is not None: key = ipc.keysep(parser.opts['--key'][0])[0] if parser.opts['--create'] is not None: flags = ipc.CREAT if parser.opts['--exclusive'] is not None: flags = ipc.CREAT | ipc.EXCL if parser.opts['--mode'] is not None: mode = int(parser.opts['--mode'][0], 8) if parser.opts['--timeout'] is not None: timeout = float(parser.opts['--timeout'][0]) s = ipc.Semaphore(key, flags, mode, 1) if key is None: - print('key: %s' % keycat(s.key)) + print('key: %s' % ipc.keycat(s.key)) nocmd = False if (len(parser.files) == 1) and (parser.files[0] == 'enter'): s.P(timeout) elif (len(parser.files) == 1) and (parser.files[0] == 'leave'): s.V() elif key is not None: nocmd = True - s.close() if parser.opts['--remove'] is not None: s.remove() elif nocmd: + s.close() print('Invalid command given', file = sys.stderr) sys.exit(1) elif parser.opts['--condition'] is not None: key, flags, mode, timeout = [None, None, None], 0, 0o600, None if parser.opts['--nonblocking'] is not None: timeout = 0 - if parser.opts['--key'] is not None: key = keysep(parser.opts['--key'][0]) + if parser.opts['--key'] is not None: key = ipc.keysep(parser.opts['--key'][0]) if parser.opts['--create'] is not None: flags = ipc.CREAT if parser.opts['--exclusive'] is not None: flags = ipc.CREAT | ipc.EXCL if parser.opts['--mode'] is not None: mode = int(parser.opts['--mode'][0], 8) @@ -222,7 +221,7 @@ try: c = ipc.Semaphore(key[1], flags, mode, 0) q = ipc.Semaphore(key[2], flags, mode, 0) if key[0] is None: - print('key: %s' % keycat(s.key, c.key, q.key)) + print('key: %s' % ipc.keycat(s.key, c.key, q.key)) nocmd = False if len(parser.files) == 1: if parser.files[0] == 'enter': s.P(timeout) @@ -239,21 +238,21 @@ try: q.V() elif key[0] is not None: nocmd = True - s.close() - c.close() - q.close() if parser.opts['--remove'] is not None: s.remove() c.remove() q.remove() elif nocmd: + s.close() + c.close() + q.close() print('Invalid command given', file = sys.stderr) sys.exit(1) elif (not use_posix) and (parser.opts['--barrier'] is not None): key, flags, mode, timeout = [None, None], 0, 0o600, None if parser.opts['--nonblocking'] is not None: timeout = 0 - if parser.opts['--key'] is not None: key = keysep(parser.opts['--key'][0]) + if parser.opts['--key'] is not None: key = ipc.keysep(parser.opts['--key'][0]) if parser.opts['--create'] is not None: flags = ipc.CREAT if parser.opts['--exclusive'] is not None: flags = ipc.CREAT | ipc.EXCL if parser.opts['--mode'] is not None: mode = int(parser.opts['--mode'][0], 8) @@ -268,14 +267,14 @@ try: s = ipc.Semaphore(key[0], flags, mode, threshold) m = ipc.Semaphore(key[1], flags, mode, 1) if key[0] is None: - print('key: %s' % keycat(s.key, m.key)) + print('key: %s' % ipc.keycat(s.key, m.key)) nocmd = False if (len(parser.files) == 2) and (parser.files[1] == 'enter'): s.P(timeout) s.Z(timeout) try: m.P(0) - except BusyError: + except ipc.BusyError: pass else: if s.value == 0: @@ -283,19 +282,19 @@ try: m.V() elif key[0] is not None: nocmd = True - s.close() - m.close() if parser.opts['--remove'] is not None: s.remove() m.remove() elif nocmd: + s.close() + m.close() print('Invalid command given', file = sys.stderr) sys.exit(1) elif parser.opts['--shared-lock'] is not None: key, flags, mode, timeout = [None, None, None], 0, 0o600, None if parser.opts['--nonblocking'] is not None: timeout = 0 - if parser.opts['--key'] is not None: key = keysep(parser.opts['--key'][0]) + if parser.opts['--key'] is not None: key = ipc.keysep(parser.opts['--key'][0]) if parser.opts['--create'] is not None: flags = ipc.CREAT if parser.opts['--exclusive'] is not None: flags = ipc.CREAT | ipc.EXCL if parser.opts['--mode'] is not None: mode = int(parser.opts['--mode'][0], 8) @@ -304,7 +303,7 @@ try: s = ipc.Semaphore(key[1], flags, mode, 0) m = ipc.Semaphore(key[2], flags, mode, 1) if key[0] is None: - print('key: %s' % keycat(x.key, s.key, m.key)) + print('key: %s' % ipc.keycat(x.key, s.key, m.key)) nocmd = False verb = ' '.join(parser.files) if verb == 'shared lock': @@ -325,21 +324,21 @@ try: x.V() elif key[0] is not None: nocmd = True - x.close() - s.close() - m.close() if parser.opts['--remove'] is not None: x.remove() s.remove() m.remove() elif nocmd: + x.close() + s.close() + m.close() print('Invalid command given', file = sys.stderr) sys.exit(1) elif (not use_posix) and (parser.opts['--rendezvous'] is not None): key, flags, mode, size, timeout = [None, None, None], 0, 0o600, 2048, None if parser.opts['--nonblocking'] is not None: timeout = 0 - if parser.opts['--key'] is not None: key = keysep(parser.opts['--key'][0]) + if parser.opts['--key'] is not None: key = ipc.keysep(parser.opts['--key'][0]) if parser.opts['--create'] is not None: flags = ipc.CREAT if parser.opts['--exclusive'] is not None: flags = ipc.CREAT | ipc.EXCL if parser.opts['--mode'] is not None: mode = int(parser.opts['--mode'][0], 8) @@ -349,7 +348,7 @@ try: i = ipc.Semaphore(key[1], flags, mode, 0) q = ipc.MessageQueue(key[2], flags, mode, size) if key[0] is None: - print('key: %s' % keycat(m.key, i.key, q.key)) + print('key: %s' % ipc.keycat(m.key, i.key, q.key)) nocmd = False if len(parser.files) > 0: send_message = ' '.join(parser.files).encode('utf-8') @@ -370,14 +369,14 @@ try: sys.stdout.buffer.flush() elif key[0] is not None: nocmd = True - m.close() - i.close() - q.close() if parser.opts['--remove'] is not None: m.remove() i.remove() q.remove() elif nocmd: + m.close() + i.close() + q.close() print('Invalid command given', file = sys.stderr) sys.exit(1) @@ -385,9 +384,9 @@ try: print('No command given', file = sys.stderr) sys.exit(1) -except SignalError: sys.exit(5) -except PermissionsError: sys.exit(4) -except ExistentialError: sys.exit(3) -except BusyError: sys.exit(2) -except: sys.exit(1) +except ipc.SignalError: sys.exit(5) +except ipc.PermissionsError: sys.exit(4) +except ipc.ExistentialError: sys.exit(3) +except ipc.BusyError: sys.exit(2) +except: sys.exit(1) diff --git a/src/unified_posix_ipc.py b/src/unified_posix_ipc.py index cf60362..b73ff45 100644 --- a/src/unified_posix_ipc.py +++ b/src/unified_posix_ipc.py @@ -38,25 +38,29 @@ def keysep(keys): class Semaphore(posix_ipc.Semaphore): def __init__(self, *args, **kwargs): posix_ipc.Semaphore.__init__(self, *args, **kwargs) - def P(timeout = None): + self.key = self.name + def P(self, timeout = None): self.acquire(timeout) - def V(): + def V(self): self.release() def set_value(self, value): for _ in range(value): self.V() def remove(self): self.unlink() + self.close() class SharedMemory(posix_ipc.SharedMemory): def __init__(self, *args, **kwargs): posix_ipc.SharedMemory.__init__(self, *args, **kwargs) + self.key = self.name def read(self, byte_count = 0, offset = 0): rc = [] + byte_count = self.size if byte_count == 0 else byte_count byte_count = min(byte_count, self.size - offset) os.lseek(self.fd, offset, os.SEEK_SET) while len(rc) < byte_count: - rc += list(os.read(self.fd), byte_count - len(rc)) + rc += list(os.read(self.fd, byte_count - len(rc))) return bytes(rc) def write(self, s, offset = 0): s = s[:min(len(s), self.size - offset)] @@ -67,10 +71,13 @@ class SharedMemory(posix_ipc.SharedMemory): self.close_fd() def remove(self): self.unlink() + self.close() class MessageQueue(posix_ipc.MessageQueue): def __init__(self, *args, **kwargs): posix_ipc.MessageQueue.__init__(self, *args, **kwargs) + self.key = self.name def remove(self): self.unlink() + self.close() diff --git a/src/unified_sysv_ipc.py b/src/unified_sysv_ipc.py index 4a26130..f8738fa 100644 --- a/src/unified_sysv_ipc.py +++ b/src/unified_sysv_ipc.py @@ -26,7 +26,8 @@ PermissionsError = sysv_ipc.PermissionsError ExistentialError = sysv_ipc.ExistentialError BusyError = sysv_ipc.BusyError class SignalError(Exception): - pass + def __init__(self, *argv, **kwargs): + Exception.__init__(self, *argv, **kwargs) CREAT = sysv_ipc.IPC_CREAT EXCL = sysv_ipc.IPC_EXCL |
