summaryrefslogtreecommitdiffstats
path: root/dvb-t/fi-Perho
diff options
context:
space:
mode:
authorJonathan McCrohan <jmccrohan@gmail.com>2014-04-05 16:45:35 +0100
committerJonathan McCrohan <jmccrohan@gmail.com>2014-04-05 16:45:35 +0100
commit54c854a4adf8697afc0dd9305af3455bde37b24c (patch)
tree041088d50c1c0013b840c44d445a13f6ec0b0def /dvb-t/fi-Perho
parent5f073d088cc2004ab56df8db500045b31f6f223d (diff)
parent8ba2155000fb193a9f99d9065066159513e4a109 (diff)
downloaddtv-scan-tables-54c854a4adf8697afc0dd9305af3455bde37b24c.tar.gz
Merge tag 'upstream/0+git20140326.cfc2975'
Upstream version 0+git20140326.cfc2975
Diffstat (limited to '')
0 files changed, 0 insertions, 0 deletions
666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
#include <stdlib.h>
#include <unistd.h>
#include <sys/time.h>
#include "dllist.h"
#include "misc.h"
#include "fdset.h"

struct fdset fds[1];		/* global fd list */


int fdset_init(struct fdset *fds)
{
    dl_init(fds->list);
    fds->del_count = 0;
    return 0;
}


int fdset_add_fd(struct fdset *fds, int fd, void *handler, void *data)
{
    struct fdset_node *fn;

    if (fd < 0)
	return -1;
    if (handler == 0)
	return -1;

    for (fn = PTR fds->list->first; fn->node->next; fn = PTR fn->node->next)
	if (fn->fd == fd)
	    return -1;

    if (not(fn = malloc(sizeof(*fn))))
	return -1;
    fn->fd = fd;
    fn->handler = handler;
    fn->data = data;
    dl_insert_last(fds->list, fn->node);
    return 0;
}


int fdset_del_fd(struct fdset *fds, int fd)
{
    struct fdset_node *fn;

    for (fn = PTR fds->list->first; fn->node->next; fn = PTR fn->node->next)
	if (fn->fd == fd)
	{
	    dl_remove(fn->node);
	    free(fn);
	    fds->del_count++;
	    return 0;
	}
    return -1;
}


int fdset_select(struct fdset *fds, int timeout)
{
    struct fdset_node *fn;
    fd_set rfds[1];
    struct timeval tv[1], *tvp = 0;
    int max_fd, x, del_count;

    FD_ZERO(rfds);
    max_fd = 0;
    for (fn = PTR fds->list->first; fn->node->next; fn = PTR fn->node->next)
    {
	FD_SET(fn->fd, rfds);
	if (fn->fd >= max_fd)
	    max_fd = fn->fd + 1;
    }

    if (timeout >= 0)
    {
	tv->tv_sec = timeout/1000;
	tv->tv_usec = timeout%1000*1000;
	tvp = tv;
    }

    x = select(max_fd, rfds, 0, 0, tvp);
    if (x <= 0)
	return x;

    /* A little bit complicated. A called handler may modify the fdset... */
restart:
    del_count = fds->del_count;
    for (fn = PTR fds->list->first; fn->node->next; fn = PTR fn->node->next)
	if (FD_ISSET(fn->fd, rfds))
	{
	    FD_CLR(fn->fd, rfds);
	    fn->handler(fn->data, fn->fd);
	    if (fds->del_count != del_count)
		goto restart;
	}
    return 1;
}