libsmbclient smbc_lseek works wrong?
randoman at xfo.org.ru
Wed Jan 12 19:09:35 GMT 2005
RS> On Wed, 12 Jan 2005, Jelmer Vernooij wrote:
>> On Wed, Jan 12, 2005 at 07:18:36PM +0600, RandoMan wrote about
>> 'libsmbclient smbc_lseek works wrong?':
>> > As far as I understand, the call of smbc_lseek() should set the
>> > current position of file and return the resulting position in the
>> > file. I trying to use following code:
>> > int sfd=smbc_open(filename,O_RDONLY,0644);
>> > off_t cur_pos=smbc_lseek(sfd,start,SEEK_SET);
>> > and cur_pos sets to zero.
>> > The file I tried to open exists, and has length 43 bytes, the
>> > following smbc_read lists the content of this file, but smbc_lseek
>> > doesn't set the position to read.
>> > What I do wrong? :-/
>> Make sure you compile your application with the same flags as
>> Samba was compiled. off_t is different in size when compiled with 64
>> bit support enabled.
RS> Hmmm, actually, I suspect the problem might be related to the protocol.
RS> While the server keeps state about the client, one thing it does not keep
RS> is the current offset into the file that the user is up to. That is
RS> because all requests to read or write a file are accompanied with the
RS> offset that you want to read from or write to.
RS> When I wrote the code initially, I didn't think of this aspect.
RS> I suspect that we will need to update all READ and WRITE requests
RS> (smbc_read and smbc_write) to update curpos for the file handle after the
RS> read/write completes.
Hm, some time ago using samba-3.0.7 I wrote a code for LUFS - it was a
buggy implementation of smbbrowsefs (because libsmbclient is not
thread-safe), but smbc_lseek was fine. The only thing is that I used
Linux Slackware instead with possible other flags of compilation...
I'll try to dig in this direction...
RandoMan mailto:randoman at xfo.org.ru
More information about the samba-technical