Re: [Yaffs] Bug in yaffsfs.c

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Charles Manning
Date:  
To: yaffs
Subject: Re: [Yaffs] Bug in yaffsfs.c
On Friday 25 June 2010 00:41:35 Amir Comforti wrote:
> Dear Charles,
>
> I think I've found a bug in yaffsfs.c in function yaffsfs_do_write(int fd,
> const void *vbuf, unsigned int nbyte, int isPwrite, int offset) In this
> function there is the following section -
>
>             if(!h || !obj){
>                         // bad handle
>                         yaffsfs_SetError(-EBADF);
>                         totalWritten = -1;
>             } else if( h && obj && (h->readOnly || obj->myDev->readOnly)){
>                         yaffsfs_SetError(-EINVAL);
>                         totalWritten=-1;
>             } else if( h && obj){
>                         if(isPwrite)
>                                     startPos = offset;
>                         else if(h->append)
>                                     startPos =
> yaffs_GetObjectFileLength(obj); else
>                                     startPos = h->position;



Thank you for pointing this error out. I fixed it, but slightly differently.

--- a/direct/yaffsfs.c
+++ b/direct/yaffsfs.c
@@ -826,10 +826,10 @@ int yaffsfs_do_write(int fd, const void *vbuf, unsigned 
in
                yaffsfs_SetError(-EINVAL);
                totalWritten=-1;
        } else if( h && obj){
-               if(isPwrite)
-                       startPos = offset;
                if(h->append)
                        startPos = yaffs_GetObjectFileLength(obj);
+               else if(isPwrite)
+                       startPos = offset;
                else
                        startPos = h->position;


The reason for fixing it this way is that if the handle has been opened with
O_APPEND then pwrite() should ignore the offset and append the write.

NB that bold does not make it through ASCII emails. It is better to use diff
format.


Thanks

Charles