_add_pstore_log() { if [ $# -le 3 ]; then return fi local backend="$1" local event="$2" local date="$3" yesno "Include log of $event at $(date -d @$date +%c) stored by $backend?" yep if [ $REPLY != yep ]; then return fi echo >&3 echo "*** Log of $event at $(date -d @$date -Iseconds) from $backend" >&3 shift 3 for file in "$@"; do tail -n +2 "$file" | sed 's/^<.>//' >&3 done } add_pstore() { local backend local i local j local file local date local head local event local log_files if ! mountpoint -q /sys/fs/pstore; then return 0 fi set -- /sys/fs/pstore/dmesg-*-1 backend=${1#*/dmesg-} backend=${backend%-1} if [ "$backend" = '*' ]; then return 0 fi i=1 while [ -f /sys/fs/pstore/dmesg-$backend-$i ]; do file=/sys/fs/pstore/dmesg-$backend-$i head="$(head -1 "$file")" # Is this the first part of a log? if [ "x${head% Part1}" != "x$head" ]; then # Flush previous log, if any _add_pstore_log "$backend" "$event" "$date" $log_files event="${head% Part1}" date=$(stat -c %Y $file) log_files= j=1 fi if [ "x$head" = "x$event Part$j" ]; then # Each part is prepended to the list, because they're numbered # backward in log history log_files="$file $log_files" j=$((j + 1)) fi i=$((i + 1)) done # Flush last log, if any _add_pstore_log "$backend" "$event" "$date" $log_files } ask_pstore() { add_pstore }