For example, if splitting to 4G files (max on VFAT for example), and `split` is built without large file support, then we would have only failed after about 2G was written. If the input is currently less than that, we won't know about the issue until later.
I'm not planning to apply for this release, but will if anyone thinks it's important enough. cheers, Pádraig.
>From 682e4ab510599a6c2d1bf9e09ee06c9ff61c78a1 Mon Sep 17 00:00:00 2001 From: =?utf-8?q?P=C3=A1draig=20Brady?= <[email protected]> Date: Sun, 7 Nov 2010 03:09:38 +0000 Subject: [PATCH] split: fail immediately if impossible to create a large file * src/split.c (main): Error if -[bC] values > OFF_T_MAX * tests/misc/split-fail: Adjust for the new lower limits --- src/split.c | 10 ++++++++++ tests/misc/split-fail | 3 ++- 2 files changed, 12 insertions(+), 1 deletions(-) diff --git a/src/split.c b/src/split.c index 61ae265..a391ecc 100644 --- a/src/split.c +++ b/src/split.c @@ -432,6 +432,13 @@ main (int argc, char **argv) error (0, 0, _("%s: invalid number of bytes"), optarg); usage (EXIT_FAILURE); } + /* If input is a pipe, we could get more data than is possible + to write to a single file, so indicate that immediately + rather than having possibly future invocations fail. */ + if (OFF_T_MAX < n_units) + error (EXIT_FAILURE, EFBIG, + _("%s: invalid number of bytes"), optarg); + break; case 'l': @@ -456,6 +463,9 @@ main (int argc, char **argv) error (0, 0, _("%s: invalid number of bytes"), optarg); usage (EXIT_FAILURE); } + if (OFF_T_MAX < n_units) + error (EXIT_FAILURE, EFBIG, + _("%s: invalid number of bytes"), optarg); break; case '0': diff --git a/tests/misc/split-fail b/tests/misc/split-fail index 68c9d73..0ce6f57 100755 --- a/tests/misc/split-fail +++ b/tests/misc/split-fail @@ -45,7 +45,8 @@ split -1 in 2> /dev/null || fail=1 split -0 in 2> /dev/null && fail=1 split --lines=$UINTMAX_MAX in || fail=1 -split --bytes=$UINTMAX_MAX in || fail=1 +split --bytes=$OFF_T_MAX in || fail=1 +split --line-bytes=$OFF_T_OFLOW 2> /dev/null in && fail=1 split --line-bytes=$SIZE_OFLOW 2> /dev/null in && fail=1 # Make sure that a huge obsolete option evokes the right failure. -- 1.6.2.5
