Diff

Differences From Artifact [833dbdb173]:

To Artifact [f1fa196b14]:


1
2
3
4
5
6











7
8





9
10
11
12
13
14
15
16
17
18
19
20
21
22
23













24
25


26















27
28


















29

30
31
#! /usr/bin/env bash

cd "$(dirname "${BASH_SOURCE[0]}")" || exit 1

cat libcackey_wrap.c.in












grep '^CK_DEFINE_FUNCTION' ../cackey.c | while IFS='' read -r line; do
	function="$(echo "${line}" | cut -f 2 -d , | cut -f 1 -d ')' | sed 's@ *@@g')"





	args="$(echo "${line}" | cut -f 3 -d '(' | cut -f 1 -d ')' | tr ',' $'\n' | sed 's@^ *@@')"
	argNames=()
	while read argType argName; do
		argNames=("${argNames[@]}" "${argName}")
	done <<<"${args}"

	argNamesList=''
	for argName in "${argNames[@]}"; do
		argNamesList="${argNamesList}, ${argName}"
	done
	argNamesList="$(echo "${argNamesList}" | cut -c 3-)"

	echo ''
	echo "${line}"
	echo $'\t'"CK_RV (*func)($(echo "${args}" | tr $'\n' ',' | sed 's@,*$@@;s@,@, @g'));"













	echo ''
	echo $'\t''libcackey_wrap_init();'


	echo ''















	echo $'\t'"func = dlsym(libcackey_wrap_handle, \"${function}\");"
	echo ''


















	echo $'\t'"return(func($argNamesList));"

	echo '}'
done






>
>
>
>
>
>
>
>
>
>
>


>
>
>
>
>















>
>
>
>
>
>
>
>
>
>
>
>
>


>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>


>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#! /usr/bin/env bash

cd "$(dirname "${BASH_SOURCE[0]}")" || exit 1

cat libcackey_wrap.c.in

functionList=()
while IFS='' read -r line; do
	function="$(echo "${line}" | cut -f 2 -d , | cut -f 1 -d ')' | sed 's@ *@@g')"

	if [ "${function}" = 'C_LoginMutexArg' ]; then
		continue
	fi

	functionList=("${functionList[@]}" "${function}")
done < <(grep '^CK_DEFINE_FUNCTION' ../cackey.c)

grep '^CK_DEFINE_FUNCTION' ../cackey.c | while IFS='' read -r line; do
	function="$(echo "${line}" | cut -f 2 -d , | cut -f 1 -d ')' | sed 's@ *@@g')"

	if [ "${function}" = 'C_LoginMutexArg' ]; then
		continue
	fi

	args="$(echo "${line}" | cut -f 3 -d '(' | cut -f 1 -d ')' | tr ',' $'\n' | sed 's@^ *@@')"
	argNames=()
	while read argType argName; do
		argNames=("${argNames[@]}" "${argName}")
	done <<<"${args}"

	argNamesList=''
	for argName in "${argNames[@]}"; do
		argNamesList="${argNamesList}, ${argName}"
	done
	argNamesList="$(echo "${argNamesList}" | cut -c 3-)"

	echo ''
	echo "${line}"
	echo $'\t'"CK_RV (*func)($(echo "${args}" | tr $'\n' ',' | sed 's@,*$@@;s@,@, @g'));"
	case "${function}" in
		C_Finalize)
			echo $'\t''CK_RV retval;'
			;;
		C_Initialize)
			echo $'\t''CK_C_INITIALIZE_ARGS CK_PTR args, localargs;'
			;;
		C_GetFunctionList)
			echo $'\t''CK_RV retval;'
			echo $'\t''CK_FUNCTION_LIST_PTR pFunctionList;'
			;;
	esac

	echo ''
	echo $'\t''libcackey_wrap_init();'

	if [ "${function}" = 'C_Initialize' ]; then
		echo ''
		echo $'\t''if (pInitArgs) {'
		echo $'\t\t''args = pInitArgs;'
		echo $'\t\t''if ((args->flags & CKF_OS_LOCKING_OK) == CKF_OS_LOCKING_OK) {'
#echo 'fprintf(stderr, "replacing=%p\n", pInitArgs); fflush(stderr); abort();'
		echo $'\t\t\t''memcpy(&localargs, args, sizeof(*args));'
		echo $'\t\t\t''localargs.CreateMutex = libcackey_wrap_createmutex;'
		echo $'\t\t\t''localargs.DestroyMutex = libcackey_wrap_destroymutex;'
		echo $'\t\t\t''localargs.LockMutex = libcackey_wrap_lockmutex;'
		echo $'\t\t\t''localargs.UnlockMutex = libcackey_wrap_unlockmutex;'
		echo $'\t\t\t''localargs.flags &= ~CKF_OS_LOCKING_OK;'
		echo $'\t\t\t''pInitArgs = &localargs;'
		echo $'\t\t''}'
		echo $'\t''}'
	fi
	echo ''
	echo $'\t'"func = dlsym(libcackey_wrap_handle, \"${function}\");"
	echo ''
	if [ "${function}" = 'C_Finalize' ]; then
		echo $'\t'"retval = func($argNamesList);"
		echo ''
		echo $'\t''libcackey_wrap_fini();'
		echo ''
		echo $'\t''return(retval);'
	elif [ "${function}" = 'C_GetFunctionList' ]; then
		echo $'\t'"retval = func($argNamesList);"
		echo ''
		echo $'\t''if (retval == CKR_OK) {'
		echo $'\t\t''pFunctionList = *ppFunctionList;'
		for function in "${functionList[@]}"; do
			echo $'\t\t'"pFunctionList->${function} = ${function};"
		done
		echo $'\t''}'
		echo ''
		echo $'\t''return(retval);'
	else
		echo $'\t'"return(func($argNamesList));"
	fi
	echo '}'
done