]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
pybind: fix open flags calculation
authorYan, Zheng <zyan@redhat.com>
Wed, 10 May 2017 00:13:52 +0000 (08:13 +0800)
committerYan, Zheng <zyan@redhat.com>
Wed, 10 May 2017 01:46:59 +0000 (09:46 +0800)
(O_WRONLY | O_RDWR) is invaild open flags

Fixes: http://tracker.ceph.com/issues/19890
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
src/pybind/cephfs/cephfs.pyx

index 94df1b21a995c91fecad29f71003f8c5fdd7c681..e7b4ec1e97e55b3120a1340d78eb0d6d6520d5c3 100644 (file)
@@ -659,16 +659,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: