From: Yan, Zheng Date: Wed, 10 May 2017 00:13:52 +0000 (+0800) Subject: pybind: fix open flags calculation X-Git-Tag: v11.2.1~24^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ac9aed9c2c46bd64384ae047f461b990cb3f6ffe;p=ceph.git pybind: fix open flags calculation (O_WRONLY | O_RDWR) is invaild open flags Fixes: http://tracker.ceph.com/issues/19890 Signed-off-by: "Yan, Zheng" (cherry picked from commit 2c25c99cb4572ffae97555a56b24a4c4097dcdec) --- diff --git a/src/pybind/cephfs/cephfs.pyx b/src/pybind/cephfs/cephfs.pyx index 37e79b50093..06991c68b8e 100644 --- a/src/pybind/cephfs/cephfs.pyx +++ b/src/pybind/cephfs/cephfs.pyx @@ -632,16 +632,26 @@ cdef class LibCephFS(object): if flags == '': cephfs_flags = os.O_RDONLY else: + access_flags = 0; for c in flags: if c == 'r': - cephfs_flags |= os.O_RDONLY + access_flags = 1; elif c == 'w': - cephfs_flags |= os.O_WRONLY | os.O_TRUNC | os.O_CREAT - elif c == '+': - cephfs_flags |= os.O_RDWR + access_flags = 2; + cephfs_flags |= os.O_TRUNC | os.O_CREAT + elif access_flags > 0 and c == '+': + access_flags = 3; else: raise OperationNotSupported( "open flags doesn't support %s" % c) + + if access_flags == 1: + cephfs_flags |= os.O_RDONLY; + elif access_flags == 2: + cephfs_flags |= os.O_WRONLY; + else: + cephfs_flags |= os.O_RDWR; + elif isinstance(flags, int): cephfs_flags = flags else: