scripts/qom-fuse: ensure QOMFuse.read always returns bytes

- Use FuseOSError to signal ENOENT instead of returning it
- Wrap qom-get in str(), as we don't always know its type
- The empty return should be b'', not ''.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-id: 20210603003719.1321369-15-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
John Snow 2021-06-02 20:37:14 -04:00
parent 9ec8a38694
commit 2cea713462

View File

@ -127,19 +127,19 @@ class QOMFuse(QOMCommand, Operations):
def read(self, path, size, offset, fh): def read(self, path, size, offset, fh):
if not self.is_property(path): if not self.is_property(path):
return -ENOENT raise FuseOSError(ENOENT)
path, prop = path.rsplit('/', 1) path, prop = path.rsplit('/', 1)
if path == '': if path == '':
path = '/' path = '/'
try: try:
data = self.qmp.command('qom-get', path=path, property=prop) data = str(self.qmp.command('qom-get', path=path, property=prop))
data += '\n' # make values shell friendly data += '\n' # make values shell friendly
except QMPResponseError as err: except QMPResponseError as err:
raise FuseOSError(EPERM) from err raise FuseOSError(EPERM) from err
if offset > len(data): if offset > len(data):
return '' return b''
return bytes(data[offset:][:size], encoding='utf-8') return bytes(data[offset:][:size], encoding='utf-8')