OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [29k-share/] [udi/] [udr.c] - Diff between revs 107 and 1765

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 107 Rev 1765
/* This module supports sending and receiving data objects over a
/* This module supports sending and receiving data objects over a
   socket conection.
   socket conection.
 
 
   Copyright 1993 Free Software Foundation, Inc.
   Copyright 1993 Free Software Foundation, Inc.
 
 
   This file is part of GDB.
   This file is part of GDB.
 
 
   This program is free software; you can redistribute it and/or modify
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.
   (at your option) any later version.
 
 
   This program is distributed in the hope that it will be useful,
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
 
 
   You should have received a copy of the GNU General Public License
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 
static char udr_c[]="@(#)udr.c  2.8  Daniel Mann";
static char udr_c[]="@(#)udr.c  2.8  Daniel Mann";
static char udr_c_AMD[]="@(#)udr.c      2.3, AMD";
static char udr_c_AMD[]="@(#)udr.c      2.3, AMD";
/*
/*
*       All data is serialised into a character stream,
*       All data is serialised into a character stream,
*       and de-serialised back into the approproiate objects.
*       and de-serialised back into the approproiate objects.
********************************************************************** HISTORY
********************************************************************** HISTORY
*/
*/
/* This is all unneeded on DOS machines.  */
/* This is all unneeded on DOS machines.  */
#ifndef __GO32__
#ifndef __GO32__
 
 
#include <stdio.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/types.h>
 
 
/* This used to say sys/fcntl.h, but the only systems I know of that
/* This used to say sys/fcntl.h, but the only systems I know of that
   require that are old (pre-4.3, at least) BSD systems, which we
   require that are old (pre-4.3, at least) BSD systems, which we
   probably don't need to worry about.  */
   probably don't need to worry about.  */
#include <fcntl.h>
#include <fcntl.h>
 
 
#include <sys/socket.h>
#include <sys/socket.h>
#include "udiproc.h"
#include "udiproc.h"
#include "udisoc.h"
#include "udisoc.h"
 
 
extern  int     errno;
extern  int     errno;
extern  char*   malloc();
extern  char*   malloc();
 
 
/* local type decs. and macro defs. not in a .h  file ************* MACRO/TYPE
/* local type decs. and macro defs. not in a .h  file ************* MACRO/TYPE
*/
*/
 
 
/* global dec/defs. which are not in a .h   file ************* EXPORT DEC/DEFS
/* global dec/defs. which are not in a .h   file ************* EXPORT DEC/DEFS
*/
*/
int             udr_errno;              /* error occurs during UDR service */
int             udr_errno;              /* error occurs during UDR service */
 
 
/* local dec/defs. which are not in a .h   file *************** LOCAL DEC/DEFS
/* local dec/defs. which are not in a .h   file *************** LOCAL DEC/DEFS
*/
*/
 
 
/****************************************************************** UDR_CREATE
/****************************************************************** UDR_CREATE
* Build UDR structure for character stream processing.
* Build UDR structure for character stream processing.
*/
*/
int udr_create(udrs, sd, size)
int udr_create(udrs, sd, size)
UDR*    udrs;
UDR*    udrs;
int     sd;
int     sd;
int     size;
int     size;
{
{
    udrs->sd = sd;
    udrs->sd = sd;
    if(!udrs->buff) udrs->buff = malloc(size);
    if(!udrs->buff) udrs->buff = malloc(size);
    udrs->getbytes = udrs->buff;        /* set the buffer to the start */
    udrs->getbytes = udrs->buff;        /* set the buffer to the start */
    udrs->putbytes = udrs->buff;
    udrs->putbytes = udrs->buff;
    udrs->putend = udrs->buff;
    udrs->putend = udrs->buff;
    udrs->udr_op = -1;                  /* don't know the direction */
    udrs->udr_op = -1;                  /* don't know the direction */
    udrs->previous_op = -1;             /* don't know the direction */
    udrs->previous_op = -1;             /* don't know the direction */
    udrs->bufsize = size;
    udrs->bufsize = size;
    return 0;
    return 0;
}
}
 
 
/******************************************************************** UDR_FREE
/******************************************************************** UDR_FREE
* Free USR structure and close socket.
* Free USR structure and close socket.
*/
*/
int udr_free(udrs)
int udr_free(udrs)
UDR*    udrs;
UDR*    udrs;
{
{
    close(udrs->sd);
    close(udrs->sd);
    free(udrs->buff);
    free(udrs->buff);
    return 0;
    return 0;
}
}
 
 
/****************************************************************** UDR_SIGNAL
/****************************************************************** UDR_SIGNAL
* Send a signal to the process at the other end of the socket,
* Send a signal to the process at the other end of the socket,
* indicating that it should expect to recieve a new message shortly.
* indicating that it should expect to recieve a new message shortly.
*/
*/
int udr_signal(udrs)
int udr_signal(udrs)
UDR*    udrs;
UDR*    udrs;
{
{
    if(send(udrs->sd, "I", 1, MSG_OOB) == -1)
    if(send(udrs->sd, "I", 1, MSG_OOB) == -1)
    {   perror("ERROR, udr_signal(), send(...MSG_OOB)");
    {   perror("ERROR, udr_signal(), send(...MSG_OOB)");
        udr_errno =  UDIErrorIPCInternal;
        udr_errno =  UDIErrorIPCInternal;
        return -1;              /* return error code */
        return -1;              /* return error code */
    }
    }
    return 0;
    return 0;
}
}
 
 
/***************************************************************** UDR_SENDNOW
/***************************************************************** UDR_SENDNOW
* used to flush the current character stream buffer to
* used to flush the current character stream buffer to
* the associated socket.  */
* the associated socket.  */
int udr_sendnow(udrs)
int udr_sendnow(udrs)
UDR*    udrs;
UDR*    udrs;
{
{
    int size = (UDIUInt32)(udrs->putend) - (UDIUInt32)(udrs->buff);
    int size = (UDIUInt32)(udrs->putend) - (UDIUInt32)(udrs->buff);
    if(udrs->previous_op == 0)
    if(udrs->previous_op == 0)
    {   udr_errno =  UDIErrorIPCInternal;
    {   udr_errno =  UDIErrorIPCInternal;
        return -1;
        return -1;
    }
    }
    udrs->putbytes = udrs->buff;
    udrs->putbytes = udrs->buff;
    udrs->putend = udrs->buff;
    udrs->putend = udrs->buff;
    if (write(udrs->sd, udrs->buff, size) == -1)
    if (write(udrs->sd, udrs->buff, size) == -1)
    {   perror("ERROR, udr_sendnow(), write() call: ");
    {   perror("ERROR, udr_sendnow(), write() call: ");
        udr_errno =  UDIErrorIPCInternal;
        udr_errno =  UDIErrorIPCInternal;
        return -1;              /* return error code */
        return -1;              /* return error code */
    }
    }
    return 0;
    return 0;
}
}
 
 
/******************************************************************** UDR_WORK
/******************************************************************** UDR_WORK
* Function to send or recieve data from the buffers supporting
* Function to send or recieve data from the buffers supporting
* socket communication. The buffer contains serialised objects
* socket communication. The buffer contains serialised objects
* sent/recieved over a socket connection.
* sent/recieved over a socket connection.
*/
*/
int udr_work(udrs, object_p, size)
int udr_work(udrs, object_p, size)
UDR*    udrs;
UDR*    udrs;
void*   object_p;
void*   object_p;
int     size;
int     size;
{
{
    int     cnt, remain;
    int     cnt, remain;
 
 
    if(udrs->udr_op != udrs->previous_op)
    if(udrs->udr_op != udrs->previous_op)
    {   if(udrs->previous_op == 0)
    {   if(udrs->previous_op == 0)
        {   udr_errno =  UDIErrorIPCInternal;
        {   udr_errno =  UDIErrorIPCInternal;
            return -1;
            return -1;
        }
        }
        udrs->previous_op= udrs->udr_op;
        udrs->previous_op= udrs->udr_op;
        udrs->putbytes = udrs->buff;
        udrs->putbytes = udrs->buff;
        udrs->getbytes = udrs->buff;
        udrs->getbytes = udrs->buff;
    }
    }
 
 
    if(udrs->udr_op == UDR_ENCODE)
    if(udrs->udr_op == UDR_ENCODE)
    {                   /* write data into character stream buffer */
    {                   /* write data into character stream buffer */
        if( (UDIUInt32)(udrs->putbytes) + size >
        if( (UDIUInt32)(udrs->putbytes) + size >
            (UDIUInt32)(udrs->buff) + (UDIUInt32)(udrs->bufsize) )
            (UDIUInt32)(udrs->buff) + (UDIUInt32)(udrs->bufsize) )
        {   udr_errno =  UDIErrorIPCInternal;
        {   udr_errno =  UDIErrorIPCInternal;
            return -1;
            return -1;
        }
        }
        memcpy(udrs->putbytes, (char*)object_p, size);
        memcpy(udrs->putbytes, (char*)object_p, size);
        udrs->putbytes += size;
        udrs->putbytes += size;
        if(udrs->putbytes > udrs->putend) udrs->putend = udrs->putbytes;
        if(udrs->putbytes > udrs->putend) udrs->putend = udrs->putbytes;
    }
    }
    else if(udrs->udr_op == UDR_DECODE)
    else if(udrs->udr_op == UDR_DECODE)
    {
    {
        if( (UDIUInt32)(udrs->putbytes)-(UDIUInt32)(udrs->getbytes) < size )
        if( (UDIUInt32)(udrs->putbytes)-(UDIUInt32)(udrs->getbytes) < size )
        {                /* need more data in character stream buffer */
        {                /* need more data in character stream buffer */
            remain = (UDIUInt32)(udrs->bufsize) -
            remain = (UDIUInt32)(udrs->bufsize) -
                ( (UDIUInt32)(udrs->putbytes)-(UDIUInt32)(udrs->buff) );
                ( (UDIUInt32)(udrs->putbytes)-(UDIUInt32)(udrs->buff) );
            if( ((UDIUInt32)(udrs->bufsize) + (UDIUInt32)(udrs->buff)
            if( ((UDIUInt32)(udrs->bufsize) + (UDIUInt32)(udrs->buff)
                - (UDIUInt32)(udrs->getbytes)) < size)
                - (UDIUInt32)(udrs->getbytes)) < size)
            {   udr_errno =  UDIErrorIPCInternal;
            {   udr_errno =  UDIErrorIPCInternal;
                return -1;
                return -1;
            }
            }
            cnt = read(udrs->sd, (char*)udrs->putbytes, remain);
            cnt = read(udrs->sd, (char*)udrs->putbytes, remain);
            if(cnt == -1) perror("ERROR udr_work(),  read() failure: ");
            if(cnt == -1) perror("ERROR udr_work(),  read() failure: ");
            udrs->putbytes += cnt;
            udrs->putbytes += cnt;
            if( (UDIUInt32)(udrs->putbytes)-(UDIUInt32)(udrs->getbytes) < size )
            if( (UDIUInt32)(udrs->putbytes)-(UDIUInt32)(udrs->getbytes) < size )
            {   udr_errno =  UDIErrorIPCInternal;
            {   udr_errno =  UDIErrorIPCInternal;
                return -1;              /* return error code */
                return -1;              /* return error code */
            }
            }
        }               /* read data from character stream buffer */
        }               /* read data from character stream buffer */
        memcpy((char*)object_p,  udrs->getbytes, size);
        memcpy((char*)object_p,  udrs->getbytes, size);
        udrs->getbytes += size;
        udrs->getbytes += size;
    }
    }
    else
    else
    {   udr_errno =  UDIErrorIPCInternal;
    {   udr_errno =  UDIErrorIPCInternal;
        return -1;
        return -1;
    }
    }
    return 0;
    return 0;
}
}
 
 
/************************************************************* UDR_UDIResource
/************************************************************* UDR_UDIResource
*/
*/
int udr_UDIResource(udrs, object_p)
int udr_UDIResource(udrs, object_p)
UDR*    udrs;
UDR*    udrs;
UDIResource*    object_p;
UDIResource*    object_p;
{
{
    int retval;
    int retval;
 
 
    retval = udr_CPUSpace(udrs, &object_p->Space);
    retval = udr_CPUSpace(udrs, &object_p->Space);
    retval = retval |  udr_CPUOffset(udrs, &object_p->Offset);
    retval = retval |  udr_CPUOffset(udrs, &object_p->Offset);
    return retval;
    return retval;
}
}
 
 
/**************************************************************** UDR_UDIRange
/**************************************************************** UDR_UDIRange
*/
*/
int udr_UDIRange(udrs, object_p)
int udr_UDIRange(udrs, object_p)
UDR*            udrs;
UDR*            udrs;
UDIRange*       object_p;
UDIRange*       object_p;
{
{
    int retval;
    int retval;
 
 
    retval = udr_CPUOffset(udrs, &object_p->Low);
    retval = udr_CPUOffset(udrs, &object_p->Low);
    retval = retval | udr_CPUOffset(udrs, &object_p->High);
    retval = retval | udr_CPUOffset(udrs, &object_p->High);
    return retval;
    return retval;
}
}
 
 
/********************************************************** UDR_UDIMemoryRange
/********************************************************** UDR_UDIMemoryRange
*/
*/
int udr_UDIMemoryRange(udrs, object_p)
int udr_UDIMemoryRange(udrs, object_p)
UDR*            udrs;
UDR*            udrs;
UDIMemoryRange* object_p;
UDIMemoryRange* object_p;
{
{
    int retval;
    int retval;
 
 
    retval = udr_CPUSpace(udrs, &object_p->Space);
    retval = udr_CPUSpace(udrs, &object_p->Space);
    retval = retval | udr_CPUOffset(udrs, &object_p->Offset);
    retval = retval | udr_CPUOffset(udrs, &object_p->Offset);
    retval = retval | udr_CPUSizeT(udrs, &object_p->Size);
    retval = retval | udr_CPUSizeT(udrs, &object_p->Size);
    return retval;
    return retval;
}
}
 
 
/****************************************************************** UDR_string
/****************************************************************** UDR_string
*/
*/
int udr_string(udrs, sp)
int udr_string(udrs, sp)
UDR*    udrs;
UDR*    udrs;
char*   sp;
char*   sp;
{
{
    int len, retval;
    int len, retval;
 
 
    if(udrs->udr_op == UDR_ENCODE)
    if(udrs->udr_op == UDR_ENCODE)
    {
    {
        if(sp)
        if(sp)
        {   len = strlen(sp) + 1;
        {   len = strlen(sp) + 1;
            retval = udr_UDIInt32(udrs, &len);
            retval = udr_UDIInt32(udrs, &len);
            retval = retval | udr_work(udrs, sp, len);
            retval = retval | udr_work(udrs, sp, len);
        }
        }
        else    /* deal with NULL pointer */
        else    /* deal with NULL pointer */
        {   len = 0;
        {   len = 0;
            retval = udr_UDIInt32(udrs, &len);
            retval = udr_UDIInt32(udrs, &len);
        }
        }
    }
    }
    else if(udrs->udr_op == UDR_DECODE)
    else if(udrs->udr_op == UDR_DECODE)
    {
    {
        retval = udr_UDIInt32(udrs, &len);
        retval = udr_UDIInt32(udrs, &len);
        if(len)
        if(len)
            retval = retval | udr_work(udrs, sp, len);
            retval = retval | udr_work(udrs, sp, len);
        else    *sp = '\0';                     /* terminate string */
        else    *sp = '\0';                     /* terminate string */
    }
    }
    else
    else
    {   udr_errno =  UDIErrorIPCInternal;
    {   udr_errno =  UDIErrorIPCInternal;
        return -1;
        return -1;
    }
    }
    return retval;
    return retval;
}
}
 
 
/******************************************************************* UDR_BYTES
/******************************************************************* UDR_BYTES
*/
*/
int udr_bytes(udrs, ptr, len)
int udr_bytes(udrs, ptr, len)
UDR*    udrs;
UDR*    udrs;
char*   ptr;
char*   ptr;
int     len;
int     len;
{
{
    return udr_work(udrs, ptr, len);
    return udr_work(udrs, ptr, len);
}
}
 
 
/********************************************************************* UDR_INT
/********************************************************************* UDR_INT
*/
*/
int udr_int(udrs, int_p)
int udr_int(udrs, int_p)
UDR*    udrs;
UDR*    udrs;
int*    int_p;
int*    int_p;
{
{
    int ret_val;
    int ret_val;
    UDIInt32  udr_obj;                  /* object of know size */
    UDIInt32  udr_obj;                  /* object of know size */
 
 
    if(udrs->udr_op == UDR_ENCODE)
    if(udrs->udr_op == UDR_ENCODE)
    {
    {
        udr_obj = *int_p;               /* copy into know object size */
        udr_obj = *int_p;               /* copy into know object size */
        return udr_UDIInt32(udrs, &udr_obj);
        return udr_UDIInt32(udrs, &udr_obj);
    }
    }
    else if(udrs->udr_op == UDR_DECODE)
    else if(udrs->udr_op == UDR_DECODE)
    {
    {
        ret_val = udr_UDIInt32(udrs, &udr_obj); /* get object of known size */
        ret_val = udr_UDIInt32(udrs, &udr_obj); /* get object of known size */
        *int_p = udr_obj;
        *int_p = udr_obj;
        return ret_val;
        return ret_val;
    }
    }
    else
    else
    {   udr_errno =  UDIErrorIPCInternal;
    {   udr_errno =  UDIErrorIPCInternal;
        return -1;
        return -1;
    }
    }
}
}
 
 
/****************************************************************** UDR_INLINE
/****************************************************************** UDR_INLINE
*/
*/
char* udr_inline(udrs, size)
char* udr_inline(udrs, size)
UDR*    udrs;
UDR*    udrs;
int     size;
int     size;
{
{
    if(udrs->udr_op != udrs->previous_op)
    if(udrs->udr_op != udrs->previous_op)
    {   if(udrs->previous_op == 0)
    {   if(udrs->previous_op == 0)
        {   udr_errno =  UDIErrorIPCInternal;
        {   udr_errno =  UDIErrorIPCInternal;
            return 0;
            return 0;
        }
        }
        udrs->previous_op= udrs->udr_op;
        udrs->previous_op= udrs->udr_op;
        udrs->putbytes = udrs->buff;
        udrs->putbytes = udrs->buff;
        udrs->getbytes = udrs->buff;
        udrs->getbytes = udrs->buff;
    }
    }
    if(udrs->udr_op == UDR_ENCODE)
    if(udrs->udr_op == UDR_ENCODE)
    {
    {
        if(udrs->putbytes + size > udrs->bufsize + udrs->buff)
        if(udrs->putbytes + size > udrs->bufsize + udrs->buff)
           return 0;
           return 0;
        udrs->putbytes += size;
        udrs->putbytes += size;
        return udrs->putbytes - size;
        return udrs->putbytes - size;
    }
    }
    else if(udrs->udr_op == UDR_DECODE)
    else if(udrs->udr_op == UDR_DECODE)
    {
    {
        if(udrs->getbytes + size > udrs->bufsize + udrs->buff)
        if(udrs->getbytes + size > udrs->bufsize + udrs->buff)
           return 0;
           return 0;
        udrs->getbytes += size;
        udrs->getbytes += size;
        return udrs->getbytes - size;
        return udrs->getbytes - size;
    }
    }
    else
    else
    {   udr_errno =  UDIErrorIPCInternal;
    {   udr_errno =  UDIErrorIPCInternal;
        return 0;
        return 0;
    }
    }
}
}
 
 
/****************************************************************** UDR_GETPOS
/****************************************************************** UDR_GETPOS
*/
*/
char*   udr_getpos(udrs)
char*   udr_getpos(udrs)
UDR*    udrs;
UDR*    udrs;
{
{
    if(udrs->udr_op == UDR_ENCODE)
    if(udrs->udr_op == UDR_ENCODE)
    {
    {
        return udrs->putbytes;
        return udrs->putbytes;
    }
    }
    else if(udrs->udr_op == UDR_DECODE)
    else if(udrs->udr_op == UDR_DECODE)
    {
    {
        return udrs->getbytes;
        return udrs->getbytes;
    }
    }
    else
    else
    {   udr_errno =  UDIErrorIPCInternal;
    {   udr_errno =  UDIErrorIPCInternal;
        return 0;
        return 0;
    }
    }
}
}
 
 
/****************************************************************** UDR_SETPOS
/****************************************************************** UDR_SETPOS
*/
*/
int     udr_setpos(udrs, pos)
int     udr_setpos(udrs, pos)
UDR*    udrs;
UDR*    udrs;
char*   pos;
char*   pos;
{
{
    if( ((UDIUInt32)pos > (UDIUInt32)(udrs->buff) + (UDIUInt32)(udrs->bufsize))
    if( ((UDIUInt32)pos > (UDIUInt32)(udrs->buff) + (UDIUInt32)(udrs->bufsize))
     || ((UDIUInt32)pos < (UDIUInt32)(udrs->buff) ) )
     || ((UDIUInt32)pos < (UDIUInt32)(udrs->buff) ) )
    {   udr_errno =  UDIErrorIPCInternal;
    {   udr_errno =  UDIErrorIPCInternal;
        return 0;
        return 0;
    }
    }
    if(udrs->udr_op == UDR_ENCODE)
    if(udrs->udr_op == UDR_ENCODE)
    {
    {
        udrs->putbytes = pos;
        udrs->putbytes = pos;
        return 1;
        return 1;
    }
    }
    else if(udrs->udr_op == UDR_DECODE)
    else if(udrs->udr_op == UDR_DECODE)
    {
    {
        udrs->getbytes = pos;
        udrs->getbytes = pos;
        return 1;
        return 1;
    }
    }
    else
    else
    {   udr_errno =  UDIErrorIPCInternal;
    {   udr_errno =  UDIErrorIPCInternal;
        return 0;
        return 0;
    }
    }
}
}
 
 
/***************************************************************** UDR_READNOW
/***************************************************************** UDR_READNOW
* Try and ensure "size" bytes are available in the
* Try and ensure "size" bytes are available in the
* receive buffer character stream.
* receive buffer character stream.
*/
*/
int     udr_readnow(udrs, size)
int     udr_readnow(udrs, size)
UDR*    udrs;
UDR*    udrs;
int     size;
int     size;
{
{
    int cnt, remain;
    int cnt, remain;
 
 
    if(udrs->udr_op == UDR_ENCODE)
    if(udrs->udr_op == UDR_ENCODE)
    {
    {
        udr_errno =  UDIErrorIPCInternal;
        udr_errno =  UDIErrorIPCInternal;
        return -1;
        return -1;
    }
    }
    else if(udrs->udr_op == UDR_DECODE)
    else if(udrs->udr_op == UDR_DECODE)
    {
    {
        if( (UDIUInt32)(udrs->putbytes)-(UDIUInt32)(udrs->getbytes) < size )
        if( (UDIUInt32)(udrs->putbytes)-(UDIUInt32)(udrs->getbytes) < size )
        {                /* need more data in character stream buffer */
        {                /* need more data in character stream buffer */
            remain = (UDIUInt32)(udrs->bufsize) -
            remain = (UDIUInt32)(udrs->bufsize) -
                ( (UDIUInt32)(udrs->putbytes)-(UDIUInt32)(udrs->buff) );
                ( (UDIUInt32)(udrs->putbytes)-(UDIUInt32)(udrs->buff) );
            cnt = read(udrs->sd, (char*)udrs->putbytes, remain);
            cnt = read(udrs->sd, (char*)udrs->putbytes, remain);
            if(cnt == -1) perror("ERROR udr_work(),  read() failure: ");
            if(cnt == -1) perror("ERROR udr_work(),  read() failure: ");
            udrs->putbytes += cnt;
            udrs->putbytes += cnt;
            if( (UDIUInt32)(udrs->putbytes)-(UDIUInt32)(udrs->getbytes) < size )
            if( (UDIUInt32)(udrs->putbytes)-(UDIUInt32)(udrs->getbytes) < size )
            {  fprintf(stderr,"ERROR, udr_readnow() too few bytes in stream\n");
            {  fprintf(stderr,"ERROR, udr_readnow() too few bytes in stream\n");
               return -1;               /* return error code */
               return -1;               /* return error code */
            }
            }
        }
        }
    }
    }
    else
    else
    {   udr_errno =  UDIErrorIPCInternal;
    {   udr_errno =  UDIErrorIPCInternal;
        return -1;
        return -1;
    }
    }
    return 0;
    return 0;
}
}
 
 
/******************************************************************* UDR_ALIGN
/******************************************************************* UDR_ALIGN
*/
*/
int udr_align(udrs, size)
int udr_align(udrs, size)
UDR*    udrs;
UDR*    udrs;
int     size;
int     size;
{
{
    char*   align;
    char*   align;
    int     offset;
    int     offset;
 
 
    align = udr_getpos(udrs);
    align = udr_getpos(udrs);
    offset = size - ((int)align & (size -1));
    offset = size - ((int)align & (size -1));
    offset = offset & (size -1);
    offset = offset & (size -1);
    if(offset) udr_setpos(udrs, align + offset);
    if(offset) udr_setpos(udrs, align + offset);
}
}
#endif /* __GO32__ */
#endif /* __GO32__ */
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.