author | Vladimir Marek <Vladimir.Marek@oracle.com> |
Mon, 10 Apr 2017 11:54:32 -0700 | |
branch | s11u3-sru |
changeset 7853 | 87236a3c36b4 |
parent 3114 | f0074f08c8db |
permissions | -rw-r--r-- |
3114
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
1 |
Patch needed for xattr to build properly on Solaris, with Studio compilers. |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
2 |
|
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
3 |
Merged as of 0.7.6. |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
4 |
|
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
5 |
diff --git a/xattr/lib.py b/xattr/lib.py |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
6 |
index 0466d30..390c333 100644 |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
7 |
--- a/xattr/lib.py |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
8 |
+++ b/xattr/lib.py |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
9 |
@@ -29,12 +29,13 @@ lib = ffi.verify(""" |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
10 |
#include "Python.h" |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
11 |
#ifdef __FreeBSD__ |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
12 |
#include <sys/extattr.h> |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
13 |
-#elif defined(__SUN__) || defined(__sun__) || defined(sun) |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
14 |
+#elif defined(__SUN__) || defined(__sun__) || defined(__sun) |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
15 |
#include <sys/types.h> |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
16 |
#include <sys/stat.h> |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
17 |
#include <fcntl.h> |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
18 |
#include <unistd.h> |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
19 |
#include <dirent.h> |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
20 |
+#include <alloca.h> |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
21 |
#else |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
22 |
#include <sys/xattr.h> |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
23 |
#endif |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
24 |
@@ -59,7 +60,7 @@ static void convert_bsd_list(char *namebuf, size_t size) |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
25 |
while(offset < size) { |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
26 |
int length = (int) namebuf[offset]; |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
27 |
memmove(namebuf+offset, namebuf+offset+1, length); |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
28 |
- namebuf[offset+length] = '\0'; |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
29 |
+ namebuf[offset+length] = '\\0'; |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
30 |
offset += length+1; |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
31 |
} |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
32 |
} |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
33 |
@@ -260,7 +261,7 @@ static ssize_t xattr_flistxattr(int fd, char *namebuf, size_t size, int options) |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
34 |
return rv; |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
35 |
} |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
36 |
|
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
37 |
-#elif defined(__SUN__) || defined(__sun__) || defined(sun) |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
38 |
+#elif defined(__SUN__) || defined(__sun__) || defined(__sun) |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
39 |
|
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
40 |
/* Solaris 9 and later compatibility API */ |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
41 |
#define XATTR_XATTR_NOFOLLOW 0x0001 |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
42 |
@@ -268,6 +269,9 @@ static ssize_t xattr_flistxattr(int fd, char *namebuf, size_t size, int options) |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
43 |
#define XATTR_XATTR_REPLACE 0x0004 |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
44 |
#define XATTR_XATTR_NOSECURITY 0x0008 |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
45 |
|
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
46 |
+#define XATTR_CREATE 0x1 |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
47 |
+#define XATTR_REPLACE 0x2 |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
48 |
+ |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
49 |
#ifndef u_int32_t |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
50 |
#define u_int32_t uint32_t |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
51 |
#endif |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
52 |
@@ -429,7 +433,7 @@ static ssize_t xattr_xflistxattr(int xfd, char *namebuf, size_t size, int option |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
53 |
snprintf((char *)(namebuf + nsize), esize + 1, |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
54 |
entry->d_name); |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
55 |
} |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
56 |
- nsize += esize + 1; /* +1 for \0 */ |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
57 |
+ nsize += esize + 1; /* +1 for \\0 */ |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
58 |
} |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
59 |
closedir(dirp); |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
60 |
return nsize; |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
61 |
@@ -438,7 +442,7 @@ static ssize_t xattr_flistxattr(int fd, char *namebuf, size_t size, int options) |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
62 |
{ |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
63 |
int xfd; |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
64 |
|
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
65 |
- xfd = openat(fd, ".", O_RDONLY); |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
66 |
+ xfd = openat(fd, ".", O_RDONLY | O_XATTR); |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
67 |
return xattr_xflistxattr(xfd, namebuf, size, options); |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
68 |
} |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
69 |
|
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
70 |
@@ -716,7 +720,7 @@ def _flistxattr(fd, options=0): |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
71 |
flistxattr(fd, options=0) -> str |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
72 |
""" |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
73 |
res = lib.xattr_flistxattr(fd, ffi.NULL, 0, options) |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
74 |
- if res == 1: |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
75 |
+ if res == -1: |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
76 |
raise error() |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
77 |
buf = ffi.new("char[]", res) |
f0074f08c8db
PSARC/2014/113 xattr: filesystem extended attribute support for Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff
changeset
|
78 |
res = lib.xattr_flistxattr(fd, buf, res, options) |