diff options
Diffstat (limited to 'sys-fs/fuse-python/files')
-rw-r--r-- | sys-fs/fuse-python/files/fuse_python_accept_none.patch | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/sys-fs/fuse-python/files/fuse_python_accept_none.patch b/sys-fs/fuse-python/files/fuse_python_accept_none.patch new file mode 100644 index 0000000..9f71800 --- /dev/null +++ b/sys-fs/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 |