tag 407695 + patch
thanks
Passing on this "quick" patch to upstream...
--Seb
On Sun, Jan 21, 2007 at 02:36:50PM +0800, gary ng wrote:
> Package: python-fuse
> Version: 2.5-5
> Followup-For: Bug #407695
>
> Below is a diff of the quick patch I made. It does not interfere with
> existing applications if they work within the existing 2*31 -1 size limit. If
> they do, the change would mean read/write/truncate would receive the correct
> offset size and it is their responsibility to handle it properly. The problem
> I see is the C wrapper of getattr still expect a 32 bit signed integer so it
> cannot be returned as stored. As a result, I use "-1" as an indicator
> that field is invalid and two extra fields at the end of the tuple is needed
> to construct the > 32 bit size. See the getattr C wrapper for how to
> construct it.
>
>
> --- _fusemodule.c.old 2006-02-04 11:21:38.000000000 +0800
> +++ _fusemodule.c 2007-01-21 14:26:17.000000000 +0800
> @@ -85,6 +85,14 @@
> st->st_mtime= PyInt_AsLong(PySequence_GetItem(v, 8));
> st->st_ctime= PyInt_AsLong(PySequence_GetItem(v, 9));
>
> +#ifdef HAVE_LONG_LONG
> +if (st->st_size < 0) {
> + off_t xx = PyInt_AsLong(PySequence_GetItem(v, 10));
> + off_t yy = PyInt_AsLong(PySequence_GetItem(v, 11));
> + st->st_size = (xx << 31) + yy;
> +}
> +#endif
> +
> /* Fill in fields not provided by Python lstat() */
> st->st_blksize= 4096;
> st->st_blocks= (st->st_size + 511)/512;
> @@ -258,7 +266,11 @@
>
> static int truncate_func(const char *path, off_t o)
> {
> +#ifdef HAVE_LONG_LONG
> + PyObject *v = PyObject_CallFunction(truncate_cb, "sL", path, o);
> +#else
> PyObject *v = PyObject_CallFunction(truncate_cb, "si", path, o);
> +#endif
> PROLOGUE
> EPILOGUE
> }
> @@ -278,7 +290,11 @@
>
> static int read_func(const char *path, char *buf, size_t s, off_t off)
> {
> +#ifdef HAVE_LONG_LONG
> + PyObject *v = PyObject_CallFunction(read_cb, "siL", path, s, off);
> +#else
> PyObject *v = PyObject_CallFunction(read_cb, "sii", path, s, off);
> +#endif
> PROLOGUE
> if(PyString_Check(v)) {
> if(PyString_Size(v) > s) goto OUT_DECREF;
> @@ -292,7 +308,11 @@
>
> static int write_func(const char *path, const char *buf, size_t t, off_t off)
> {
> +#ifdef HAVE_LONG_LONG
> + PyObject *v = PyObject_CallFunction(write_cb,"ss#L", path, buf, t, off);
> +#else
> PyObject *v = PyObject_CallFunction(write_cb,"ss#i", path, buf, t, off);
> +#endif
> PROLOGUE
> EPILOGUE
> }
> -- System Information:
> Debian Release: 4.0
> APT prefers testing
> APT policy: (500, 'testing')
> Architecture: i386 (i686)
> Shell: /bin/sh linked to /bin/bash
> Kernel: Linux 2.6.17-co-0.8
> Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
>
> Versions of packages python-fuse depends on:
> ii libfuse2 2.5.3-4.1 Filesystem in USErspace library
> ii python 2.4.4-2 An interactive high-level
> object-o
> ii python-central 0.5.12 register and build utility for
> Pyt
>
> python-fuse recommends no packages.
>
> -- no debconf information
>
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]