1#!/bin/sh
2# split must fail when given length/count of zero.
3
4# Copyright (C) 2003-2023 Free Software Foundation, Inc.
5
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
8# the Free Software Foundation, either version 3 of the License, or
9# (at your option) any later version.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14# GNU General Public License for more details.
15
16# You should have received a copy of the GNU General Public License
17# along with this program.  If not, see <https://www.gnu.org/licenses/>.
18
19. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
20print_ver_ split
21getlimits_
22
23touch in || framework_failure_
24
25
26split -a 0 in 2> /dev/null || fail=1
27returns_ 1 split -b 0 in 2> /dev/null || fail=1
28returns_ 1 split -C 0 in 2> /dev/null || fail=1
29returns_ 1 split -l 0 in 2> /dev/null || fail=1
30returns_ 1 split -n 0 in 2> /dev/null || fail=1
31returns_ 1 split -n 1/0 in 2> /dev/null || fail=1
32returns_ 1 split -n 0/1 in 2> /dev/null || fail=1
33returns_ 1 split -n 2/1 in 2> /dev/null || fail=1
34
35# Make sure -C doesn't create empty files.
36rm -f x?? || fail=1
37echo x | split -C 1 || fail=1
38test -f xaa && test -f xab || fail=1
39test -f xac && fail=1
40
41# Make sure that the obsolete -N notation still works
42split -1 in 2> /dev/null || fail=1
43
44# Then make sure that -0 evokes a failure.
45returns_ 1 split -0 in 2> /dev/null || fail=1
46
47split --lines=$UINTMAX_MAX in || fail=1
48split --bytes=$OFF_T_MAX in || fail=1
49split --line-bytes=$OFF_T_OFLOW in || fail=1
50split --line-bytes=$SIZE_OFLOW in || fail=1
51if truncate -s$SIZE_OFLOW large; then
52  # Ensure we can split chunks of a large file on 32 bit hosts
53  split --number=$SIZE_OFLOW/$SIZE_OFLOW large >/dev/null || fail=1
54fi
55split --number=r/$INTMAX_MAX/$UINTMAX_MAX </dev/null >/dev/null || fail=1
56returns_ 1 split --number=r/$UINTMAX_OFLOW </dev/null 2>/dev/null || fail=1
57
58# Make sure that a huge obsolete option does the right thing.
59split -99999999999999999991 in || fail=1
60
61Exit $fail
62