aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2014-06-14 19:24:33 +0200
committerMattias Andrée <maandree@operamail.com>2014-06-14 19:24:33 +0200
commitb8c1d03fcfad278612dc5948d2e6278393242040 (patch)
tree65db93cb8fcef3dd9a65c2e0135eb655dbc323e1
parentcommon api for posix and sysv ipc (diff)
downloadcmdipc-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-xsrc/cmdipc75
-rw-r--r--src/unified_posix_ipc.py13
-rw-r--r--src/unified_sysv_ipc.py3
3 files changed, 49 insertions, 42 deletions
diff --git a/src/cmdipc b/src/cmdipc
index bb6159a..170303a 100755
--- a/src/cmdipc
+++ b/src/cmdipc
@@ -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