#!/bin/sh # SPDX-License-Identifier: GPL-2.0 set -e ret=0 do_splice() { filename="$1" bytes="$2" expected="$3" out=$(./splice_read "$filename" "$bytes" | cat) if [ "$out" = "$expected" ] ; then echo "ok: $filename $bytes" else echo "FAIL: $filename $bytes" ret=1 fi } test_splice() { filename="$1" full=$(cat "$filename") two=$(echo "$full" | grep -m1 . | cut -c-2) # Make sure full splice has the same contents as a standard read. do_splice "$filename" 4096 "$full" # Make sure a partial splice see the first two characters. do_splice "$filename" 2 "$two" } # proc_single_open(), seq_read() test_splice /proc/$$/limits # special open, seq_read() test_splice /proc/$$/comm # proc_handler, proc_dointvec_minmax test_splice /proc/sys/fs/nr_open # proc_handler, proc_dostring test_splice /proc/sys/kernel/modprobe # proc_handler, special read test_splice /proc/sys/kernel/version if ! [ -d /sys/module/test_module/sections ] ; then modprobe test_module fi # kernfs, attr test_splice /sys/module/test_module/coresize # kernfs, binattr test_splice /sys/module/test_module/sections/.init.text exit $ret