- 论坛徽章:
- 0
|
void wsc_supplicant_rx(void *ctx, const u8 *src_addr, const u8 *buf, size_t len)
{
......
struct wsc_drv *wsc_drv = (struct wsc_drv *) ctx;
......
switch(wsc_drv->state)
{
case A:
...
case B:
...
case C:
...
}
wsc_supplicant_rx被调用处
wsc_drv->l2 = l2_packet_init(wsc_drv->ifname, wpa_drv_get_mac_addr(wsc_drv),
ETH_P_EAPOL, wsc_supplicant_rx, wsc_drv, 0);
struct l2_packet_data * l2_packet_init(
const char *ifname, const u8 *own_addr, unsigned short protocol,
void (*rx_callback)(void *ctx, const u8 *src_addr,
const u8 *buf, size_t len),
void *rx_callback_ctx, int l2_hdr)
{
struct l2_packet_data *l2;
.....
l2->rx_callback = rx_callback;
.....
}
调试证明进入case C,但是看以上代码并没有可能,除非调用wsc_supplicant_rx时将wsc_drv->state=C通过ctx代入,可是看上去在调用wsc_supplicant_rx时并没有代入实参,这是怎么回事?
请问:调用一个回调函数(函数指针)时,看上去没有代入任何实参,回调函数怎么起作用呢?
[ 本帖最后由 todayrw 于 2009-4-23 11:17 编辑 ] |
|