int channel_select_remove(channel *chan){ uvc_ctx *ctx=uvc_self(); //queue_t *node; queue_t *q = queue_head(&chan->readq); for (; q != queue_sentinel(&chan->readq); q = queue_next(&chan->readq)) { if(q->ext == ctx){ queue_remove(q); } } for (; q != queue_sentinel(&chan->writq); q = queue_next(&chan->writq)) { if(q->ext == ctx){ queue_remove(q); } } return 0; }
/* the stable insertion sort */ void queue_sort(queue_t *queue, int (*cmp)(const queue_t *, const queue_t *)) { queue_t *q, *prev, *next; q = queue_head(queue); if (q == queue_tail(queue)) { return; } for (q = queue_next(q); q != queue_sentinel(queue); q = next) { prev = queue_prev(q); next = queue_next(q); queue_remove(q); do { if (cmp(prev, q) <= 0) { break; } prev = queue_prev(prev); } while (prev != queue_sentinel(queue)); queue_insert_head(prev, q); } }
int httproute_call(HttpSession *session) { queue_t *route_queue=&session->server->routes; char *path=session->request.path; queue_t *q=NULL; HttpRoute *route; //printf("httproute_call in !\n"); if(queue_empty(route_queue))return 404; for(q = queue_prev(route_queue); q != queue_sentinel(route_queue); q = queue_last(q) ) { route = queue_data(q, HttpRoute, node); if(strcmp(path,route->path)==0 ) { TraceInfo("route callback found!\n"); return route->func(session,route->arg); } } TraceInfo("route callback not found!\n"); return 404; }