From 9b6b44cdf08b59551ce06a97859d7beb4bb578c8 Mon Sep 17 00:00:00 2001 From: Mark Glines Date: Fri, 15 Feb 2002 06:18:29 +0000 Subject: [PATCH] fixed read(), finally! --- perl/Fuse.xs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/perl/Fuse.xs b/perl/Fuse.xs index 9d0fa9b..23f87ae 100644 --- a/perl/Fuse.xs +++ b/perl/Fuse.xs @@ -435,7 +435,7 @@ int _PLfuse_open (const char *file, int flags) { int _PLfuse_read (const char *file, char *buf, size_t buflen, off_t off) { int rv; char *rvstr; - dXSARGS; + dSP; DEBUGf("read begin: %i\n",sp-PL_stack_base); ENTER; SAVETMPS; @@ -445,7 +445,6 @@ int _PLfuse_read (const char *file, char *buf, size_t buflen, off_t off) { XPUSHs(sv_2mortal(newSViv(off))); PUTBACK; rv = call_sv(_PLfuse_callbacks[15],G_SCALAR); - DEBUGf("k\n"); SPAGAIN; if(!rv) rv = -ENOENT; @@ -454,7 +453,12 @@ int _PLfuse_read (const char *file, char *buf, size_t buflen, off_t off) { if(SvTYPE(mysv) == SVt_NV || SvTYPE(mysv) == SVt_IV) rv = SvIV(mysv); else { - if(buflen < (rv = SvCUR(mysv))) + if(SvPOK(mysv)) { + rv = SvCUR(mysv); + } else { + rv = 0; + } + if(rv > buflen) croak("read() handler returned more than buflen! (%i > %i)",rv,buflen); if(rv) memcpy(buf,SvPV_nolen(mysv),rv); -- 2.30.2