#endif 
#endif 
static inline int sx_set_serial_info(struct specialix_port * port,                                     struct serial_struct __user * newinfo){	struct serial_struct tmp;	struct specialix_board *bp = port_Board(port);	int change_speed;	func_enter();	/*	if (!access_ok(VERIFY_READ, (void *) newinfo, sizeof(tmp))) {		func_exit();		return -EFAULT;	}	*/	if (copy_from_user(&tmp, newinfo, sizeof(tmp))) {		func_enter();		return -EFAULT;	}	#if 0		if ((tmp.irq != bp->irq) ||	    (tmp.port != bp->base) ||	    (tmp.type != PORT_CIRRUS) ||	    (tmp.baud_base != (SX_OSCFREQ + CD186x_TPC/2) / CD186x_TPC) ||	    (tmp.custom_divisor != 0) ||	    (tmp.xmit_fifo_size != CD186x_NFIFO) ||	    (tmp.flags & ~SPECIALIX_LEGAL_FLAGS)) {		func_exit();		return -EINVAL;	}#endif		change_speed = ((port->flags & ASYNC_SPD_MASK) !=			(tmp.flags & ASYNC_SPD_MASK));	change_speed |= (tmp.custom_divisor != port->custom_divisor);		if (!capable(CAP_SYS_ADMIN)) {		if ((tmp.close_delay != port->close_delay) ||		    (tmp.closing_wait != port->closing_wait) ||		    ((tmp.flags & ~ASYNC_USR_MASK) !=		     (port->flags & ~ASYNC_USR_MASK))) {			func_exit();			return -EPERM;		}		port->flags = ((port->flags & ~ASYNC_USR_MASK) |		                  (tmp.flags & ASYNC_USR_MASK));		port->custom_divisor = tmp.custom_divisor;	} else {		port->flags = ((port->flags & ~ASYNC_FLAGS) |		                  (tmp.flags & ASYNC_FLAGS));		port->close_delay = tmp.close_delay;		port->closing_wait = tmp.closing_wait;		port->custom_divisor = tmp.custom_divisor;	}	if (change_speed) {		sx_change_speed(bp, port);	}	func_exit();	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/d61780c0d384939ef31c46b47442854d5def4623/specialix.c/buggy/drivers/char/specialix.c