--- Lib/xattr/__init__.py.orig 2007-04-14 18:06:15.000000000 -0700
+++ Lib/xattr/__init__.py 2008-09-03 14:14:58.000000000 -0700
@@ -106,19 +106,13 @@
return len(self.list())
def __delitem__(self, item):
- try:
- self.remove(item)
- except IOError:
- raise KeyError(item)
+ self.remove(item)
def __setitem__(self, item, value):
self.set(item, value)
def __getitem__(self, item):
- try:
- return self.get(item)
- except IOError:
- raise KeyError(item)
+ return self.get(item)
def iterkeys(self):
return iter(self.list())
@@ -128,7 +122,7 @@
def has_key(self, item):
try:
self.get(item)
- except IOError:
+ except:
return False
else:
return True
@@ -149,10 +143,8 @@
return dict(self.iteritems())
def setdefault(self, k, d=''):
- try:
- d = self.get(k)
- except IOError:
- self[k] = d
+ d = self.get(k)
+ self[k] = d
return d
def keys(self):
--- Modules/xattr/_xattr.c.orig 2007-01-24 14:18:12.000000000 -0800
+++ Modules/xattr/_xattr.c 2008-09-03 14:31:02.000000000 -0700
@@ -353,19 +353,27 @@
#define xattr_flistxattr flistxattr
#endif
-static PyObject *xattr_error(void);
-static PyObject *xattr_error_with_filename(char *name);
+static PyObject *xattr_error(const char *name);
+static PyObject *xattr_error_with_filename(const char *file, const char *name);
static PyObject *
-xattr_error(void)
+xattr_error(const char *name)
{
+ if (name && errno == ENOATTR) {
+ PyErr_SetString(PyExc_KeyError, name);
+ return NULL;
+ }
return PyErr_SetFromErrno(PyExc_IOError);
}
static PyObject *
-xattr_error_with_filename(char *name)
+xattr_error_with_filename(const char *file, const char *name)
{
- return PyErr_SetFromErrnoWithFilename(PyExc_IOError, name);
+ if (name && errno == ENOATTR) {
+ PyErr_SetString(PyExc_KeyError, name);
+ return NULL;
+ }
+ return PyErr_SetFromErrnoWithFilename(PyExc_IOError, (char *)file);
}
PyDoc_STRVAR(pydoc_getxattr,
@@ -398,7 +406,7 @@
res = xattr_getxattr((const char *)path, (const char *)name, NULL, 0, position, options);
Py_END_ALLOW_THREADS
if (res == -1) {
- PyObject *tmp = xattr_error_with_filename(path);
+ PyObject *tmp = xattr_error_with_filename(path, name);
PyMem_Free(path);
PyMem_Free(name);
return tmp;
@@ -415,7 +423,7 @@
res = xattr_getxattr((const char *)path, (const char *)name, (void *)PyString_AS_STRING(buffer), size, position, options);
Py_END_ALLOW_THREADS
if (res == -1) {
- PyObject *tmp = xattr_error_with_filename(path);
+ PyObject *tmp = xattr_error_with_filename(path, name);
Py_DECREF(buffer);
PyMem_Free(path);
PyMem_Free(name);
@@ -460,7 +468,7 @@
Py_END_ALLOW_THREADS
if (res == -1) {
PyMem_Free(name);
- return xattr_error();
+ return xattr_error(name);
}
size = res;
}
@@ -475,7 +483,7 @@
PyMem_Free(name);
if (res == -1) {
Py_DECREF(buffer);
- return xattr_error();
+ return xattr_error(name);
}
if (res != size) {
_PyString_Resize(&buffer, (int)res);
@@ -513,7 +521,7 @@
res = xattr_setxattr((const char *)path, (const char *)name, (void *)value, size, position, options);
Py_END_ALLOW_THREADS
if (res) {
- result = xattr_error_with_filename(path);
+ result = xattr_error_with_filename(path, name);
} else {
Py_INCREF(Py_None);
result = Py_None;
@@ -553,7 +561,7 @@
Py_END_ALLOW_THREADS
PyMem_Free(name);
if (res) {
- return xattr_error();
+ return xattr_error(name);
}
Py_INCREF(Py_None);
return Py_None;
@@ -584,7 +592,7 @@
res = xattr_removexattr((const char *)path, (const char *)name, options);
Py_END_ALLOW_THREADS
if (res) {
- result = xattr_error_with_filename(path);
+ result = xattr_error_with_filename(path, name);
} else {
Py_INCREF(Py_None);
result = Py_None;
@@ -619,7 +627,7 @@
Py_END_ALLOW_THREADS
PyMem_Free(name);
if (res) {
- return xattr_error();
+ return xattr_error(name);
}
Py_INCREF(Py_None);
return Py_None;
@@ -648,7 +656,7 @@
res = xattr_listxattr((const char *)path, NULL, 0, options);
Py_END_ALLOW_THREADS
if (res == -1) {
- PyObject *tmp = xattr_error_with_filename(path);
+ PyObject *tmp = xattr_error_with_filename(path, NULL);
PyMem_Free(path);
return tmp;
}
@@ -661,7 +669,7 @@
res = xattr_listxattr((const char *)path, (void *)PyString_AS_STRING(buffer), (size_t)PyString_GET_SIZE(buffer), options);
Py_END_ALLOW_THREADS
if (res == -1) {
- PyObject *tmp = xattr_error_with_filename(path);
+ PyObject *tmp = xattr_error_with_filename(path, NULL);
Py_DECREF(buffer);
PyMem_Free(path);
return tmp;
@@ -696,7 +704,7 @@
res = xattr_flistxattr(fd, NULL, 0, options);
Py_END_ALLOW_THREADS
if (res == -1) {
- return xattr_error();
+ return xattr_error(NULL);
}
buffer = PyString_FromStringAndSize((char *)NULL, (int)res);
if (buffer == NULL) {
@@ -707,7 +715,7 @@
Py_END_ALLOW_THREADS
if (res == -1) {
Py_DECREF(buffer);
- return xattr_error();
+ return xattr_error(NULL);
}
if (res != (ssize_t)PyString_GET_SIZE(buffer)) {
_PyString_Resize(&buffer, (int)res);