#include <stdio.h>
int (*func_A)(void);
int (*func_B)(void);
int (*func_C)(void);
int
func_C_ ()
{
return 1;
}
int
func_B_ ()
{
return 0;
}
int
func_A_ ()
{
/*The code is writen to always call func_B*/
return func_B();
}
int (*func_A)(void) = func_A_;
int (*func_B)(void) = func_B_;
int (*func_C)(void) = func_C_;
int main()
{
int result;
result = func_A ();
//here result = 0 as expected.
/*Do some magic*/
func_B = func_C;
result = func_A ();
//result should be 1
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgKCpmdW5jX0EpKHZvaWQpOwppbnQgKCpmdW5jX0IpKHZvaWQpOwppbnQgKCpmdW5jX0MpKHZvaWQpOwoKIGludApmdW5jX0NfICgpCnsKICAgIHJldHVybiAxOwp9CmludApmdW5jX0JfICgpCnsKICAgcmV0dXJuIDA7Cn0KaW50CmZ1bmNfQV8gKCkKewogICAgLypUaGUgY29kZSBpcyB3cml0ZW4gdG8gYWx3YXlzIGNhbGwgZnVuY19CKi8KICAgIHJldHVybiBmdW5jX0IoKTsKfQppbnQgKCpmdW5jX0EpKHZvaWQpID0gZnVuY19BXzsKaW50ICgqZnVuY19CKSh2b2lkKSA9IGZ1bmNfQl87CmludCAoKmZ1bmNfQykodm9pZCkgPSBmdW5jX0NfOwoKCmludCBtYWluKCkKewogIGludCByZXN1bHQ7CiAgcmVzdWx0ID0gZnVuY19BICgpOwogIHByaW50ZigiJWRcbiIsIHJlc3VsdCk7CiAgLy9oZXJlIHJlc3VsdCA9IDAgYXMgZXhwZWN0ZWQuCiAgLypEbyBzb21lIG1hZ2ljKi8KICBmdW5jX0IgPSBmdW5jX0M7CgogIHJlc3VsdCA9IGZ1bmNfQSAoKTsKICBwcmludGYoIiVkXG4iLCByZXN1bHQpOwogIC8vcmVzdWx0IHNob3VsZCBiZSAxCn0K