public inbox for ecos-discuss@sourceware.org
 help / color / mirror / Atom feed
From: Savin Zlobec <savin@elatec.si>
To: Gratian Crisan <nelu@iv.ro>
Cc: ecos-discuss@ecos.sourceware.org
Subject: Re: [ECOS] fatfs lseek EOF bug
Date: Tue, 10 May 2005 12:30:00 -0000	[thread overview]
Message-ID: <428091CE.20300@elatec.si> (raw)
In-Reply-To: <200505101258.48354.nelu@iv.ro>

[-- Attachment #1: Type: text/plain, Size: 1509 bytes --]

Gratian Crisan wrote:

>Hi,
>
>please see my answers below:
>
>On Tuesday 10 May 2005 09:48, Savin Zlobec wrote:
>  
>
>>Gratian Crisan wrote:
>>    
>>
>>>Hi all,
>>>
>>>I think I've found a bug in the ecos FAT implementation for lseek
>>>function. (fatfs_fo_lseek).
>>>When calling the function like this 'lseek(fd, 0,  SEEK_CUR)' to get the
>>>current file position and the postion is right at the end of the file the
>>>fat lseek function returns end of file error EEOF. I've looked at the
>>>other filesystems from ecos and did a test in linux and the correct
>>>behavior seems to be to return the current position of the end of file if
>>>the read/write pointer is at the end of file (equal with the file size).
>>>This bug occurs for example when creating a new file, writing some data in
>>>it and calling lseek(fd, 0, SEEK_CUR) to get the current file position.
>>>
>>>Suggestions?
>>>
[snip]

>	See the file attached. The test is for an MMC driver but should be pretty 
>straight forward to adapt (only the mount command should be changed).
>The test creates a file and writes blocks of data into it while printing the 
>current file offset. In a new file after writing the first block, for which 
>the value returned is 0, the value returned by lseek function is -1. The 
>strange thing is that if you overwrite an existing file the lseek function 
>correctly returns the current file offset (equal to EOF).
>  
>
Found the BUG -- Please try the attached patch and let me know if it works.

savin


[-- Attachment #2: fatfs.diff --]
[-- Type: text/plain, Size: 1189 bytes --]

Index: src/fatfs_supp.c
===================================================================
RCS file: /cvs/ecos/ecos/packages/fs/fat/current/src/fatfs_supp.c,v
retrieving revision 1.3
diff -u -r1.3 fatfs_supp.c
--- src/fatfs_supp.c	22 Oct 2004 14:10:23 -0000	1.3
+++ src/fatfs_supp.c	10 May 2005 10:43:14 -0000
@@ -1172,8 +1172,10 @@
     // Err could be EEOF wich means that the given 
     // offset if out of given file (cluster chain)
 
-    if (ENOERR == err)
-        *pos = new_pos; 
+    if (EEOF == err)
+        new_pos.cluster_pos = disk->cluster_size; 
+    
+    *pos = new_pos; 
     
     return err;
 } 
@@ -2056,11 +2058,18 @@
              fatfs_data_pos_t  *pos,
              cyg_uint32         offset)
 {
+    int err;
+    
     CYG_CHECK_DATA_PTRC(disk);
     CYG_CHECK_DATA_PTRC(file);
     CYG_CHECK_DATA_PTRC(pos);
     
-    return get_position_from_off(disk, file->cluster, offset, pos, CO_NONE);
+    err = get_position_from_off(disk, file->cluster, offset, pos, CO_NONE);
+
+    if (EEOF == err && offset == file->size)
+        return ENOERR;
+    else
+        return err;
 }
 
 // -------------------------------------------------------------------------


[-- Attachment #3: Type: text/plain, Size: 148 bytes --]

-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

  reply	other threads:[~2005-05-10 10:51 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-05-09 11:25 Gratian Crisan
2005-05-10 10:51 ` Savin Zlobec
2005-05-10 12:05   ` Gratian Crisan
2005-05-10 12:30     ` Savin Zlobec [this message]
2005-05-10 13:00       ` Gratian Crisan
2005-05-11  9:32         ` Savin Zlobec

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=428091CE.20300@elatec.si \
    --to=savin@elatec.si \
    --cc=ecos-discuss@ecos.sourceware.org \
    --cc=nelu@iv.ro \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).