memcpy(&pollfds[i], &pollfds[i + 1], (pollfds_num - i - 1) * sizeof(pollfds[0])); 
static void free_irq_by_cb(int (*test)(struct irq_fd *, void *), void *arg){	struct irq_fd **prev;	unsigned long flags;	int i = 0;	flags = irq_lock();	prev = &active_fds;	while(*prev != NULL){		if((*test)(*prev, arg)){			struct irq_fd *old_fd = *prev;			if((pollfds[i].fd != -1) && 			   (pollfds[i].fd != (*prev)->fd)){				printk("free_irq_by_cb - mismatch between "				       "active_fds and pollfds, fd %d vs %d\n",				       (*prev)->fd, pollfds[i].fd);				goto out;			}			memcpy(&pollfds[i], &pollfds[i + 1],			       (pollfds_num - i - 1) * sizeof(pollfds[0]));			pollfds_num--;			if(last_irq_ptr == &old_fd->next) 				last_irq_ptr = prev;			*prev = (*prev)->next;			if(old_fd->type == IRQ_WRITE) 				ignore_sigio_fd(old_fd->fd);			kfree(old_fd);			continue;		}		prev = &(*prev)->next;		i++;	} out:	irq_unlock(flags);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/8f332287bc3f2801ba43682fd79baf24dc8ac1ce/irq_user.c/buggy/arch/um/kernel/irq_user.c