summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'dev-python/fuse-python/files/fuse_python_accept_none.patch')
-rw-r--r--dev-python/fuse-python/files/fuse_python_accept_none.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/dev-python/fuse-python/files/fuse_python_accept_none.patch b/dev-python/fuse-python/files/fuse_python_accept_none.patch
new file mode 100644
index 000000000000..9f7180050b9c
--- /dev/null
+++ b/dev-python/fuse-python/files/fuse_python_accept_none.patch
@@ -0,0 +1,75 @@
+--- fuseparts/_fusemodule.c.old 2007-06-18 16:20:09.000000000 +0200
++++ fuseparts/_fusemodule.c 2008-04-08 01:18:43.000000000 +0200
+@@ -182,8 +182,50 @@
+ * the getattr type functions.
+ */
+
+-#define fetchattr_soft_d(st, attr, defa) \
+- fetchattr_soft(st, attr) else st->attr = defa
++// <spaghetti_code> (sorry ...)
++
++#define good(attr) _GOOD_SPAGHETTI_ ## attr
++#define bad(attr) _BAD_SPAGHETTI_ ## attr
++
++/*
++ * This macro checks whether an attribute is available and not None.
++ * Success --> set attribute and goto _GOOD_SPAGHETTI
++ * Failure --> goto _BAD_SPAGHETTI
++ * Error --> goto OUT_DECREF
++ */
++#define fetchattr_soft_none_pre(st, attr) \
++ if (PyObject_HasAttrString(v, #attr)) { \
++ if (!(pytmp = PyObject_GetAttrString(v, #attr))) \
++ goto OUT_DECREF; \
++ else if (pytmp != Py_None) { \
++ py2attr(st, attr) \
++ goto good(attr); \
++ } \
++ else { \
++ Py_DECREF(pytmp); \
++ goto bad(attr); \
++ } \
++ } \
++ goto bad(attr);
++
++/**
++ * Calls fetchattr_soft_none_pre and ignores failure.
++ */
++#define fetchattr_soft_none(st, attr) \
++ fetchattr_soft_none_pre(st, attr); \
++ good(attr): ; \
++ bad(attr): ;
++
++/**
++ * Calls fetchattr_soft_none_pre and sets a default value on failure.
++ */
++#define fetchattr_soft_d(st, attr, defa) \
++ fetchattr_soft_none_pre(st, attr); \
++ bad(attr): \
++ st->attr = defa; \
++ good(attr): ;
++
++// </spaghetti_code>
+
+ #define FETCH_STAT_DATA() \
+ fetchattr(st, st_mode); \
+@@ -206,7 +248,7 @@
+ * autotools so we just dare to throw these in as is. \
+ */ \
+ \
+- fetchattr_soft(st, st_rdev); \
++ fetchattr_soft_none(st, st_rdev); \
+ fetchattr_soft_d(st, st_blksize, 4096); \
+ fetchattr_soft_d(st, st_blocks, (st->st_size + 511)/512)
+
+@@ -245,6 +287,10 @@
+ #endif
+
+ #undef fetchattr_soft_d
++#undef fetchattr_soft_none
++#undef fetchattr_soft_none_pre
++#undef good
++#undef bad
+ #undef FETCH_STAT_DATA
+
+ static int