CasperSecurity

Current Path : /usr/src/linux-headers-5.15.0-174/scripts/atomic/
Upload File :
Current File : //usr/src/linux-headers-5.15.0-174/scripts/atomic/atomic-tbl.sh

#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# helpers for dealing with atomics.tbl

#meta_in(meta, match)
meta_in()
{
	case "$1" in
	[$2]) return 0;;
	esac

	return 1
}

#meta_has_ret(meta)
meta_has_ret()
{
	meta_in "$1" "bBiIfFlR"
}

#meta_has_acquire(meta)
meta_has_acquire()
{
	meta_in "$1" "BFIlR"
}

#meta_has_release(meta)
meta_has_release()
{
	meta_in "$1" "BFIRs"
}

#meta_has_relaxed(meta)
meta_has_relaxed()
{
	meta_in "$1" "BFIR"
}

#find_fallback_template(pfx, name, sfx, order)
find_fallback_template()
{
	local pfx="$1"; shift
	local name="$1"; shift
	local sfx="$1"; shift
	local order="$1"; shift

	local base=""
	local file=""

	# We may have fallbacks for a specific case (e.g. read_acquire()), or
	# an entire class, e.g. *inc*().
	#
	# Start at the most specific, and fall back to the most general. Once
	# we find a specific fallback, don't bother looking for more.
	for base in "${pfx}${name}${sfx}${order}" "${name}"; do
		file="${ATOMICDIR}/fallbacks/${base}"

		if [ -f "${file}" ]; then
			printf "${file}"
			break
		fi
	done
}

#gen_ret_type(meta, int)
gen_ret_type() {
	local meta="$1"; shift
	local int="$1"; shift

	case "${meta}" in
	[sv]) printf "void";;
	[bB]) printf "bool";;
	[aiIfFlR]) printf "${int}";;
	esac
}

#gen_ret_stmt(meta)
gen_ret_stmt()
{
	if meta_has_ret "${meta}"; then
		printf "return ";
	fi
}

# gen_param_name(arg)
gen_param_name()
{
	# strip off the leading 'c' for 'cv'
	local name="${1#c}"
	printf "${name#*:}"
}

# gen_param_type(arg, int, atomic)
gen_param_type()
{
	local type="${1%%:*}"; shift
	local int="$1"; shift
	local atomic="$1"; shift

	case "${type}" in
	i) type="${int} ";;
	p) type="${int} *";;
	v) type="${atomic}_t *";;
	cv) type="const ${atomic}_t *";;
	esac

	printf "${type}"
}

#gen_param(arg, int, atomic)
gen_param()
{
	local arg="$1"; shift
	local int="$1"; shift
	local atomic="$1"; shift
	local name="$(gen_param_name "${arg}")"
	local type="$(gen_param_type "${arg}" "${int}" "${atomic}")"

	printf "${type}${name}"
}

#gen_params(int, atomic, arg...)
gen_params()
{
	local int="$1"; shift
	local atomic="$1"; shift

	while [ "$#" -gt 0 ]; do
		gen_param "$1" "${int}" "${atomic}"
		[ "$#" -gt 1 ] && printf ", "
		shift;
	done
}

#gen_args(arg...)
gen_args()
{
	while [ "$#" -gt 0 ]; do
		printf "$(gen_param_name "$1")"
		[ "$#" -gt 1 ] && printf ", "
		shift;
	done
}

#gen_proto_order_variants(meta, pfx, name, sfx, ...)
gen_proto_order_variants()
{
	local meta="$1"; shift
	local pfx="$1"; shift
	local name="$1"; shift
	local sfx="$1"; shift

	gen_proto_order_variant "${meta}" "${pfx}" "${name}" "${sfx}" "" "$@"

	if meta_has_acquire "${meta}"; then
		gen_proto_order_variant "${meta}" "${pfx}" "${name}" "${sfx}" "_acquire" "$@"
	fi
	if meta_has_release "${meta}"; then
		gen_proto_order_variant "${meta}" "${pfx}" "${name}" "${sfx}" "_release" "$@"
	fi
	if meta_has_relaxed "${meta}"; then
		gen_proto_order_variant "${meta}" "${pfx}" "${name}" "${sfx}" "_relaxed" "$@"
	fi
}

#gen_proto_variants(meta, name, ...)
gen_proto_variants()
{
	local meta="$1"; shift
	local name="$1"; shift
	local pfx=""
	local sfx=""

	meta_in "${meta}" "fF" && pfx="fetch_"
	meta_in "${meta}" "R" && sfx="_return"

	gen_proto_order_variants "${meta}" "${pfx}" "${name}" "${sfx}" "$@"
}

#gen_proto(meta, ...)
gen_proto() {
	local meta="$1"; shift
	for m in $(echo "${meta}" | grep -o .); do
		gen_proto_variants "${m}" "$@"
	done
}
Hacker Blog, Shell İndir, Sql İnjection, XSS Attacks, LFI Attacks, Social Hacking, Exploit Bot, Proxy Tools, Web Shell, PHP Shell, Alfa Shell İndir, Hacking Training Set, DDoS Script, Denial Of Service, Botnet, RFI Attacks, Encryption
Telegram @BIBIL_0DAY