Exemplo n.º 1
0
NXStream *NXOpenMemory(const char *addr, int size, int mode)
{
    NXStream		*s;
    int			newMode = mode;

    if ((int)addr % vm_page_size && (mode != NX_READONLY))
	return 0;

    s = NXStreamCreate(newMode, FALSE);
    s->functions = &memory_functions;
    s->buf_base = (unsigned char *)addr;
    s->buf_size = size;
    s->buf_left = size;
    s->buf_ptr = (unsigned char *)addr;
    s->eof = size;
    s->flags |= NX_CANSEEK;
    if (addr)
	s->flags |= NX_USER_OWNS_BUF;
    else
	switch(mode) {
	    case NX_READONLY:
		break;
	    case NX_WRITEONLY:
		memory_flush(s);	/* get initial buffer */
		break;
	    case NX_READWRITE:
		if (s->flags & NX_READFLAG) {
		    NXChangeBuffer(s);
		    memory_flush(s);	/* get initial buffer */
		}
		break;
	}
    return (s);
}
Exemplo n.º 2
0
NXStream *NXOpenFile(int fd, int mode)
{
    NXStream       *s;
    struct file_info *fi;
    struct stat     statInfo;

    if (fstat(fd, &statInfo) == -1)
	return NULL;
    s = NXStreamCreate(mode, TRUE);
    s->functions = &file_functions;
    fi = (struct file_info *) malloc(sizeof(struct file_info));
    fi->fd = fd;
    s->info = (char *)fi;
    s->eof = statInfo.st_size;
    
    /*
     * Stream is only seekable if it's not a socket or a pipe.
     */
    if (   (statInfo.st_mode&S_IFMT) != S_IFSOCK
	&& (statInfo.st_mode&S_IFMT) != S_IFIFO)
	s->flags |= NX_CANSEEK;
    return s;
}
Exemplo n.º 3
0
/*
 *	NXOpenPort:
 *
 *	open a stream using a ipc descriptor.
 */
NXStream *
NXOpenPort(mach_port_t port, int mode)
{
#ifdef notyet
    NXStream *s;
    InlineMsg *msg;

/*??? set the flags */
    if (mode == NX_READWRITE)
	return NULL;
    s = NXStreamCreate(mode, FALSE);
    s->functions = &ipc_functions;
    msg = (InlineMsg *)malloc(sizeof(InlineMsg));
    s->info = (char *)msg;
    if (mode == NX_READONLY) {
	msg->header.msg_local_port = port;
	s->buf_left = 0;
    } else {
	msg->header.msg_simple = TRUE;
	msg->header.msg_type = MSG_TYPE_NORMAL;
	msg->header.msg_local_port = PORT_NULL;
	msg->header.msg_remote_port = port;
	msg->type.msg_type_header.msg_type_inline = TRUE;
	msg->type.msg_type_header.msg_type_longform = TRUE;
	msg->type.msg_type_header.msg_type_deallocate = FALSE;
	msg->type.msg_type_long_name = MSG_TYPE_CHAR;
	msg->type.msg_type_long_size = 8;
	s->buf_left = BUFSIZE;
    }
    s->buf_base = s->buf_ptr = msg->data;
    s->buf_size = BUFSIZE;
    s->flags &= ~NX_CANSEEK;
    return s;
#else
	return NULL;
#endif
}
Exemplo n.º 4
0
NXStream *NXOpenSmallMemory(int mode){
    NXStream		*s;
    int newMode = mode;
    char *addr;
    if (mode != NX_WRITEONLY && mode != NX_READWRITE)
	return NULL;
    addr = malloc(INITIAL_SIZE);
    s = NXStreamCreate(newMode, FALSE);
    s->functions = &cheap_functions;
    s->buf_base = (unsigned char *)addr;
    s->buf_size = INITIAL_SIZE;
    s->buf_left = INITIAL_SIZE;
    s->buf_ptr = (unsigned char *)addr;
    s->eof = 0;
    s->flags |= NX_CANSEEK;
    switch(mode) {
	case NX_READWRITE:
	    if (s->flags & NX_READFLAG) {
		NXChangeBuffer(s);
	    }
	    break;
    }
    return (s);
}