On Sat, Jun 21, 2014 at 12:39:12PM +0300, Riku Voipio wrote: > > @@ -1526,6 +1555,7 @@ static abi_long do_getsockopt(int sockfd, int level, int optname, > > abi_long ret; > > int len, val; > > socklen_t lv; > > + int (*translate_result)(int val) = NULL; > > > > switch(level) { > > case TARGET_SOL_SOCKET: > > @@ -1578,6 +1608,7 @@ static abi_long do_getsockopt(int sockfd, int level, int optname, > > optname = SO_REUSEADDR; > > goto int_case; > > case TARGET_SO_TYPE: > > + translate_result = host_to_target_sock_type; > > optname = SO_TYPE; > > goto int_case; > > case TARGET_SO_ERROR: > > @@ -1636,6 +1667,8 @@ static abi_long do_getsockopt(int sockfd, int level, int optname, > > ret = get_errno(getsockopt(sockfd, level, optname, &val, &lv)); > > if (ret < 0) > > return ret; > > + if (translate_result) > > + val = translate_result(val); > > perhaps instead: > > if (optname == SO_TYPE) > val = host_to_target_sock_type(val); > > Then we avoid the need of function pointer. Fair enough, perhaps I was making it too generic for my own good :) Thanks, Paul