| #!/bin/sh |
| |
| # Copyright 2015-2023 Rivoreo |
| |
| # Permission is hereby granted, free of charge, to any person obtaining a copy |
| # of this software and associated documentation files (the "Software"), to |
| # deal in the Software without restriction, including without limitation the |
| # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
| # sell copies of the Software, and to permit persons to whom the Software is |
| # furnished to do so, subject to the following conditions: |
| |
| # The above copyright notice and this permission notice shall be included in |
| # all copies or substantial portions of the Software. |
| |
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
| # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR |
| # IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| # SOFTWARE. |
| |
| |
| set -e |
| PROGRAM_DIR="${0%/*}" |
| [ "$PROGRAM_DIR" = "$0" ] && PROGRAM_DIR="$PWD" |
| blank= |
| first_blank= |
| IFS= |
| while read -r line; do case "$line" in |
| "#!"*) |
| continue |
| ;; |
| "") |
| echo |
| [ -n "$blank" ] && break |
| blank=1 |
| if [ -z "$first_blank" ]; then |
| echo "# Automatically generated fileflags functions" |
| first_blank=1 |
| fi |
| ;; |
| "# "*) |
| printf %s\\n "$line" |
| blank= |
| ;; |
| esac done < "$0" |
| sed -E -e '/^ *#[! ]/d' -e '/^$/d' "$PROGRAM_DIR/which.sh" |
| echo |
| echo "unalias chflags > /dev/null 2>&1 || true" |
| echo "chflags() {" |
| echo " local EXT2_IOC_GETFLAGS EXT2_IOC_SETFLAGS EXT2_IMMUTABLE_FL EXT2_APPEND_FL" |
| echo " local no_fail no_follow verbose recursive recursive_follow ioctl_program_path elf_ident set_flags clear_flags replace_flags flags" |
| sed -E \ |
| -e '/^ *#[! ]/d' \ |
| -e "/^PROGRAM_DIR=/d" \ |
| -e '/^\. /d' \ |
| -e 's/(^| | )exit($| )/\1return\2/' \ |
| -e 's/( | )(get|set)_flags(\(\)| )/\1_ext2_\2_flags\3/' \ |
| -e 's/^( *)(print_usage|parse_flags_string)/\1_chflags_\2/' \ |
| -e "/ exec 2> /d" \ |
| -e '/^$/d' \ |
| -e "s/^/ /" \ |
| -e 's/^ \}"$/\}"/' \ |
| -e '/^ while getopts /i\ |
| OPTIND=0' \ |
| -e 's#^ chflags_loop 0 (.+)# if [ -n "$no_fail" ]; then\ |
| chflags_loop 0 \1 2> /dev/null\ |
| else\ |
| chflags_loop 0 \1\ |
| fi\ |
| unset chflags_loop#' \ |
| "$PROGRAM_DIR/chflags.common.sh" "$PROGRAM_DIR/chflags.ext2ioctl.sh" |
| echo "}" |