int pid, n; 
int pid, n, err; 
static int tuntap_open_tramp(char *gate, int *fd_out, int me, int remote,			     char *buffer, int buffer_len, int *used_out){	struct tuntap_pre_exec_data data;	char version_buf[sizeof("nnnnn\0")];	char *argv[] = { "uml_net", version_buf, "tuntap", "up", gate,			 NULL };	char buf[CMSG_SPACE(sizeof(*fd_out))];	struct msghdr msg;	struct cmsghdr *cmsg;	struct iovec iov;	int pid, n;	sprintf(version_buf, "%d", UML_NET_VERSION);	data.stdout = remote;	data.close_me = me;	pid = run_helper(tuntap_pre_exec, &data, argv, NULL);	if(pid < 0) return(-pid);	os_close_file(remote);	msg.msg_name = NULL;	msg.msg_namelen = 0;	if(buffer != NULL){		iov = ((struct iovec) { buffer, buffer_len });		msg.msg_iov = &iov;		msg.msg_iovlen = 1;	}	else {		msg.msg_iov = NULL;		msg.msg_iovlen = 0;	}	msg.msg_control = buf;	msg.msg_controllen = sizeof(buf);	msg.msg_flags = 0;	n = recvmsg(me, &msg, 0);	*used_out = n;	if(n < 0){		printk("tuntap_open_tramp : recvmsg failed - errno = %d\n", 		       errno);		return(-errno);	}	CATCH_EINTR(waitpid(pid, NULL, 0));	cmsg = CMSG_FIRSTHDR(&msg);	if(cmsg == NULL){		printk("tuntap_open_tramp : didn't receive a message\n");		return(-EINVAL);	}	if((cmsg->cmsg_level != SOL_SOCKET) || 	   (cmsg->cmsg_type != SCM_RIGHTS)){		printk("tuntap_open_tramp : didn't receive a descriptor\n");		return(-EINVAL);	}	*fd_out = ((int *) CMSG_DATA(cmsg))[0];	return(0);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/b4fd310e163477236a241580b3b8c29aee65f4cc/tuntap_user.c/clean/arch/um/os-Linux/drivers/tuntap_user.c