mirror of
https://github.com/sysprog21/lkmpg.git
synced 2024-11-25 09:41:47 +08:00
Fix switch-case condition error in sample code (#245)
The code 'case -EINPROGRESS || -EBUSY: ' is the same as 'case -115 || -16 :' at compiler time, as both error code are implemented with macro like '#define EBUSY 16'. The code above is essentially the same as 'case 1:'. In C, there is no real boolean value. Boolean-like value will be converted to 1 or 0. It does not matter too much if the '-EINPROGRESS || -EBUSY' is calculated at build time or at runtime. In both case, it will compare the 'rc' with 1 in the switch expression. It will not compare the 'rc' with any real error code number. When the code is really '-EBUSY', the execution will fallback to the default branch. And in practice, most of the compilers will do this simple compile-time static calculation, and generate code like static int test_skcipher_result(struct skcipher_def *sk, int rc) { switch (rc) { case 0: break; case 1: rc = wait_for_completion_interruptible(&sk->result.completion); /* code removed for conciseness */ break; default: pr_info("skcipher encrypt returned with %d result %d\n", rc, sk->result.err); break; } init_completion(&sk->result.completion); return rc; }
This commit is contained in:
parent
391f111d8a
commit
470fbcd97d
|
@ -46,7 +46,8 @@ static int test_skcipher_result(struct skcipher_def *sk, int rc)
|
||||||
switch (rc) {
|
switch (rc) {
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
case -EINPROGRESS || -EBUSY:
|
case -EINPROGRESS:
|
||||||
|
case -EBUSY:
|
||||||
rc = wait_for_completion_interruptible(&sk->result.completion);
|
rc = wait_for_completion_interruptible(&sk->result.completion);
|
||||||
if (!rc && !sk->result.err) {
|
if (!rc && !sk->result.err) {
|
||||||
reinit_completion(&sk->result.completion);
|
reinit_completion(&sk->result.completion);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user