This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Avoid ARM SWI Seek when querying file position


On 31 August 2018 at 12:10, Andy Koppe wrote:
> Issuing an ARM semi-hosting Seek command when just querying file
> position with SEEK_CUR and offset zero is unnecessary, because unlike
> the lseek() Unix system call the Seek command does not actually return
> the file position. For that reason, syscalls.c for ARM keeps track of
> file position in the 'poslog', so we can just return that.
>
> Moreover, since the Seek command only accepts an absolute file position,
> SEEK_CUR operations are implemented by adding the relative offset to the
> position in the poslog. If the host implements non-binary files with
> implicit carriage return characters but doesn't discount those implicit
> CRs when implementing Seek (by just mapping straight to Windows file
> operations), this actually ended up wrongly changing file position when
> using SEEK_CUR with offset zero or functions like ftell() or fgetpos()
> that are based on that.
>
> The ARM semi-hosting Seek command is documented at
> http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0040d/BACDFGCG.html
>
> (There's a wider problem in that using the position returned by the
> likes of ftell() in a later seek operation gets you to the wrong place
> if the host adds implicit CRs without discounting them in Seek
> commands. Not sure there's anything that can be done about it on the
> newlib side though.)

Slightly amended patch attached: Use off_t rather than int for the poslog.

Attachment: 0001-Avoid-ARM-SWI-Seek-when-querying-file-position.patch
Description: Binary data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]