Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 26 Feb 2001 10:37:32 -0500
From:      "Yonny Cardenas B." <ycardena@yahoo.com>
To:        questions@freebsd.org
Subject:   proc struct changes the value returned by return()
Message-ID:  <3A9A783C.86B67887@yahoo.com>

next in thread | raw e-mail | index | archive | help
Hello 

Why p_retval[0] of the proc struct changes the value 
returned by return()?

I am making a system call and need return succeeds (zero) 
or error (-1) and set errno appropriately. 

I have the following fragment code:

int _sys_connect_socket(socktype skt, 
	struct sockaddr_in * psa, struct proc *p)
{
        int error;
        struct file *fp;
        register struct socket *so;
	/* .... */
        error = socreate(AF_INET, &so, type, 0 , p);

        if (error) {
                fdp->fd_ofiles[fd] = 0;
                ffree(fp);
        } else {
                fp->f_data = (caddr_t)so;
                fp->f_flag = FREAD|FWRITE;
                fp->f_ops = &socketops;
                fp->f_type = DTYPE_SOCKET;
                p->p_retval[0] = fd;
        }
        return (error);    
}

When it executes the sentence "p->p_retval[0] = fd", 
it changes the value returned by called, for example:

int probe (){
 int err;
 err = _sys_connect_socket(...);
 return (0);
}
 
The function probe() returns the value of fd in 
"p->p_retval[0] = fd" (3 or 4) and not zero.

Thanks

Yonny Cardenas B.
ycardena@yahoo.com

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3A9A783C.86B67887>