On Thu, Sep 05, 2019 at 01:31:52PM +0800, Jianhong.Yin wrote: > add update man page. > > Signed-off-by: Jianhong Yin <yin-jianhong@xxxxxxx> > --- I think these can be in one patch, but anyway... > io/copy_file_range.c | 7 +++++-- > man/man8/xfs_io.8 | 9 +++------ > 2 files changed, 8 insertions(+), 8 deletions(-) > > diff --git a/io/copy_file_range.c b/io/copy_file_range.c > index 283f5094..02d50e53 100644 > --- a/io/copy_file_range.c > +++ b/io/copy_file_range.c > @@ -72,6 +72,7 @@ copy_range_f(int argc, char **argv) > long long src = 0; > long long dst = 0; > size_t len = 0; > + int len_ommited = 1; > int opt; > int ret; > int fd; > @@ -103,6 +104,7 @@ copy_range_f(int argc, char **argv) > printf(_("invalid length -- %s\n"), optarg); > return 0; > } > + len_ommited = 0; > break; > case 'f': > src_file_nr = atoi(argv[1]); > @@ -128,7 +130,7 @@ copy_range_f(int argc, char **argv) > fd = filetable[src_file_nr].fd; > } > > - if (src == 0 && dst == 0 && len == 0) { > + if (len_ommited) { > off64_t sz; > > sz = copy_src_filesize(fd); > @@ -136,7 +138,8 @@ copy_range_f(int argc, char **argv) > ret = 1; > goto out; > } > - len = sz; > + if (sz > src) > + len = sz - src; What about file size < offset? Maybe we can do like this?: sz = copy_src_filesize(fd); if (sz < 0 || (unsigned long long)sz > SIZE_MAX || sz < src) { ret = 1; goto out; } len = sz - src; Thanks, Zorro > } > > ret = copy_file_range_cmd(fd, &src, &dst, len); > diff --git a/man/man8/xfs_io.8 b/man/man8/xfs_io.8 > index 6e064bdd..f5f1c4fc 100644 > --- a/man/man8/xfs_io.8 > +++ b/man/man8/xfs_io.8 > @@ -669,13 +669,10 @@ The source must be specified either by path > or as another open file > .RB ( \-f ). > If > -.I src_file > -.IR src_offset , > -.IR dst_offset , > -and > .I length > -are omitted the contents of src_file will be copied to the beginning of the > -open file, overwriting any data already there. > +is omitted will use > +.I src_file > +(file size - src_offset) instead. > .RS 1.0i > .PD 0 > .TP 0.4i > -- > 2.21.0 >