예제 #1
0
byte static read()
{
	while (!focus_buf.key_stroke);
	
	byte chr_ret = read_sys();
	if (changing_shell)
	{
		select_shell( !(chr_ret-'0') ? 9 : chr_ret - '0' - 1);
		changing_shell = 0;
		return 0;
	}
	return chr_ret;
}
예제 #2
0
void update_interfaces()
{
    struct int_sock *new_list=NULL;
    struct int_sock *i=NULL,*j,*prev;
    struct int_sock *new_int=NULL;
    int i_fd,o_fd;

    /* if all interfaces are '+'-interfaces, we bridge broadcast */
    do_broadcast_bridging=1;
    update_interface_trigger=0;
    syslog(LOG_DEBUG,"rechecking interfaces");

    if (read_sys(&new_list))
        return;

    for (i=select_set.i_s_list; i; i=i->next) {
        if (!interface_in_list(i,new_list)) {
            /* remove interface i */
            j=select_set.i_s_list;
            prev=NULL;
            while (j) {
                if (!strncmp(j->dev_name,i->dev_name,
                             DEV_NAME_LEN)) {
                    if (!prev) {
                        select_set.i_s_list=j->next;
                    } else {
                        prev->next=j->next;
                    }
                    prev=j;
                    j=j->next;
                    free(j);
                } else {
                    j=j->next;
                }
            }
            /* and close the socket */
            close(i->i_fd);
            close(i->o_fd);
            syslog(LOG_INFO,"removed interface %s",i->dev_name);
        }
    }

    for (i=new_list; i; i=i->next) {
        if (!interface_in_list(i,select_set.i_s_list)) {
            /* add interface i */
            new_int=malloc(sizeof(struct int_sock));
            if (!new_int) {
                syslog(LOG_ERR,"can't add interface %s -- " \
                       "no memory",i->dev_name);
                continue;
            }

            i_fd=open_incoming_socket(i->dev_name);
            if (i_fd==-1) {
                free(new_int);
                continue;
            }

            o_fd=open_outgoing_socket(i->dev_name);
            if (o_fd==-1) {
                close(i_fd);
                free(new_int);
                continue;
            }

            strncpy(new_int->dev_name,i->dev_name,DEV_NAME_LEN);
            new_int->i_fd=i_fd;
            new_int->o_fd=o_fd;
            new_int->features=i->features;
            new_int->next=select_set.i_s_list;
            select_set.i_s_list=new_int;
            syslog(LOG_INFO,"added interface %s",i->dev_name);
        }
    }

    /* kill temporary new_list */
    while (new_list) {
        i=new_list->next;
        free(new_list);
        new_list=i;
    }

    /* prepare the fd_set for select */
    FD_ZERO(&select_set.fds);
    for (i=select_set.i_s_list; i; i=i->next) {
        FD_SET(i->i_fd,&select_set.fds);
        select_set.highest_fd=(i->i_fd>select_set.highest_fd)?
                              i->i_fd:select_set.highest_fd;
    }
}
예제 #3
0
byte static read_ch()
{
	if (!focus_buf.key_stroke)
		return -1;
	return read_sys();
}