Hi,

a <loushanguan2...@sina.com> wrote:
> it fails: cp: error reading
> 'DCIM/ScreenRecorder/Screenrecorder-2022-01-30-12-29-58-111.mp4': Invalid
> argument
>
> i run "ls -l", about 2G has been copied

> i use bullseye for i386, intel core2 Q8200 2.33G

That's a machine whiere type "long" has 32 bit. I.e. the non-negative
range is 0 to 2,147,483,647.

2 GB limits are usually due to call fseek(3)

       int fseek(FILE *stream, long offset, int whence);
       ...
       EINVAL The whence argument to fseek() was not  SEEK_SET,  SEEK_END,  or
              SEEK_CUR.  Or: the resulting file offset would be negative.

So it would match the error message if the fseek offset value surpassed
2,147,483,647 bytes.

The seek() method of jmtpfs class MtpLocalFileCopy uses fseek(3):
  
https://sources.debian.org/src/jmtpfs/0.5-3/src/MtpLocalFileCopy.cpp/?hl=90#L90
It is used by the Read() method of MtpFile
  https://sources.debian.org/src/jmtpfs/0.5-3/src/MtpFile.cpp/?hl=71#L71
So it would be plausible that this is the place where "Invalid argument"
comes from.


What happens if you try a program that is less suspicious of using
random access reading ?
Like:

  cat </the/jmtpfs/file/path >/the/ext4/file/path


Have a nice day :)

Thomas

Reply via email to