Blame contrib/mfs/mfs_file.c

Packit 7838c8
/*
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
-   Module      :   mem_file.c
Packit 7838c8
-   Description :   A general purpose library for manipulating a memory area
Packit 7838c8
-                   as if it were a file.
Packit 7838c8
-                   mfs_ stands for memory file system.
Packit 7838c8
-   Author      :   Mike Johnson - Banctec AB 03/07/96
Packit 7838c8
-                   
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
/* 
Packit 7838c8
Packit 7838c8
Copyright (c) 1996 Mike Johnson
Packit 7838c8
Copyright (c) 1996 BancTec AB
Packit 7838c8
Packit 7838c8
Permission to use, copy, modify, distribute, and sell this software
Packit 7838c8
for any purpose is hereby granted without fee, provided
Packit 7838c8
that (i) the above copyright notices and this permission notice appear in
Packit 7838c8
all copies of the software and related documentation, and (ii) the names of
Packit 7838c8
Mike Johnson and BancTec may not be used in any advertising or
Packit 7838c8
publicity relating to the software.
Packit 7838c8
Packit 7838c8
THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
Packit 7838c8
EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
Packit 7838c8
WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
Packit 7838c8
Packit 7838c8
IN NO EVENT SHALL MIKE JOHNSON OR BANCTEC BE LIABLE FOR
Packit 7838c8
ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
Packit 7838c8
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
Packit 7838c8
WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
Packit 7838c8
LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
Packit 7838c8
OF THIS SOFTWARE.
Packit 7838c8
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
-   Includes
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
#include    <stdio.h>
Packit 7838c8
#include    <stdlib.h>
Packit 7838c8
#include    <string.h>
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
-   Definitions
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
#define MAX_BUFFS   20
Packit 7838c8
#define FALSE       0
Packit 7838c8
#define TRUE        1
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
-   Globals
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
static char *buf[MAX_BUFFS];        /* Memory for each open buf */
Packit 7838c8
static long  buf_off[MAX_BUFFS];    /* File pointer for each buf */
Packit 7838c8
static long  buf_size[MAX_BUFFS];   /* Count of bytes allocated for each buf */
Packit 7838c8
static long  fds[MAX_BUFFS];        /* File descriptor status */
Packit 7838c8
static int   buf_mode[MAX_BUFFS];   /* Mode of buffer (r, w, a) */
Packit 7838c8
Packit 7838c8
static int library_init_done = FALSE;
Packit 7838c8
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
-   Function prototypes
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
int mfs_open (void *ptr, int size, char *mode);
Packit 7838c8
int mfs_lseek (int fd, int offset, int whence);
Packit 7838c8
int mfs_read (int fd, void *buf, int size);
Packit 7838c8
int mfs_write (int fd, void *buf, int size);
Packit 7838c8
int mfs_size (int fd);
Packit 7838c8
int mfs_map (int fd, char **addr, size_t *len);
Packit 7838c8
int mfs_unmap (int fd);
Packit 7838c8
int mfs_close (int fd);
Packit 7838c8
static int extend_mem_file (int fd, int size);
Packit 7838c8
static void mem_init ();
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
-   Function code
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
-   Function    :   mfs_open ()
Packit 7838c8
-
Packit 7838c8
-   Arguments   :   Pointer to allocated buffer, initial size of buffer, 
Packit 7838c8
-                   mode spec (r, w, a)
Packit 7838c8
-
Packit 7838c8
-   Returns     :   File descriptor or -1 if error.
Packit 7838c8
-
Packit 7838c8
-   Description :   Register this area of memory (which has been allocated
Packit 7838c8
-                   and has a file read into it) under the mem_file library.
Packit 7838c8
-                   A file descriptor is returned which can the be passed
Packit 7838c8
-                   back to TIFFClientOpen and used as if it was a disk
Packit 7838c8
-                   based fd.
Packit 7838c8
-                   If the call is for mode 'w' then pass (void *)NULL as
Packit 7838c8
-                   the buffer and zero size and the library will 
Packit 7838c8
-                   allocate memory for you.
Packit 7838c8
-                   If the mode is append then pass (void *)NULL and size
Packit 7838c8
-                   zero or with a valid address.
Packit 7838c8
-                   
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
int mfs_open (void *buffer, int size, char *mode)
Packit 7838c8
{
Packit 7838c8
    int ret, i;
Packit 7838c8
    void *tmp;
Packit 7838c8
Packit 7838c8
    if (library_init_done == FALSE)
Packit 7838c8
    {
Packit 7838c8
        mem_init ();
Packit 7838c8
        library_init_done = TRUE;
Packit 7838c8
    }
Packit 7838c8
Packit 7838c8
    ret = -1;
Packit 7838c8
Packit 7838c8
    /* Find a free fd */
Packit 7838c8
Packit 7838c8
    for (i = 0; i < MAX_BUFFS; i++)
Packit 7838c8
    {
Packit 7838c8
        if (fds[i] == -1)
Packit 7838c8
        {
Packit 7838c8
            ret = i;
Packit 7838c8
            break;
Packit 7838c8
        }
Packit 7838c8
    }
Packit 7838c8
Packit 7838c8
    if (i == MAX_BUFFS)     /* No more free descriptors */
Packit 7838c8
    {
Packit 7838c8
        ret = -1;
Packit 7838c8
        errno = EMFILE;
Packit 7838c8
    }
Packit 7838c8
Packit 7838c8
    if (ret >= 0 && *mode == 'r')
Packit 7838c8
    {
Packit 7838c8
        if (buffer == (void *)NULL)
Packit 7838c8
        {
Packit 7838c8
            ret = -1;
Packit 7838c8
            errno = EINVAL;
Packit 7838c8
        }
Packit 7838c8
        else
Packit 7838c8
        {
Packit 7838c8
            buf[ret] = (char *)buffer;
Packit 7838c8
            buf_size[ret] = size;
Packit 7838c8
            buf_off[ret] = 0;
Packit 7838c8
        }
Packit 7838c8
    }
Packit 7838c8
    else if (ret >= 0 && *mode == 'w')
Packit 7838c8
    {
Packit 7838c8
Packit 7838c8
        if (buffer != (void *)NULL)
Packit 7838c8
        {
Packit 7838c8
            ret = -1;
Packit 7838c8
            errno = EINVAL;
Packit 7838c8
        }
Packit 7838c8
Packit 7838c8
        else
Packit 7838c8
        {
Packit 7838c8
            tmp = malloc (0);   /* Get a pointer */
Packit 7838c8
            if (tmp == (void *)NULL)
Packit 7838c8
            {
Packit 7838c8
                ret = -1;
Packit 7838c8
                errno = EDQUOT;
Packit 7838c8
            }
Packit 7838c8
            else
Packit 7838c8
            {
Packit 7838c8
                buf[ret] = (char *)tmp;
Packit 7838c8
                buf_size[ret] = 0;
Packit 7838c8
                buf_off[ret] = 0;
Packit 7838c8
            }
Packit 7838c8
        }
Packit 7838c8
    }
Packit 7838c8
    else if (ret >= 0 && *mode == 'a')
Packit 7838c8
    {
Packit 7838c8
        if (buffer == (void *) NULL)    /* Create space for client */
Packit 7838c8
        {
Packit 7838c8
            tmp = malloc (0);   /* Get a pointer */
Packit 7838c8
            if (tmp == (void *)NULL)
Packit 7838c8
            {
Packit 7838c8
                ret = -1;
Packit 7838c8
                errno = EDQUOT;
Packit 7838c8
            }
Packit 7838c8
            else
Packit 7838c8
            {
Packit 7838c8
                buf[ret] = (char *)tmp;
Packit 7838c8
                buf_size[ret] = 0;
Packit 7838c8
                buf_off[ret] = 0;
Packit 7838c8
            }
Packit 7838c8
        }
Packit 7838c8
        else                            /* Client has file read in already */
Packit 7838c8
        {
Packit 7838c8
            buf[ret] = (char *)buffer;
Packit 7838c8
            buf_size[ret] = size;
Packit 7838c8
            buf_off[ret] = 0;
Packit 7838c8
        }
Packit 7838c8
    }
Packit 7838c8
    else        /* Some other invalid combination of parameters */
Packit 7838c8
    {
Packit 7838c8
        ret = -1;
Packit 7838c8
        errno = EINVAL;
Packit 7838c8
    }
Packit 7838c8
Packit 7838c8
    if (ret != -1)
Packit 7838c8
    {
Packit 7838c8
        fds[ret] = 0;
Packit 7838c8
        buf_mode[ret] = *mode;
Packit 7838c8
    }
Packit 7838c8
Packit 7838c8
    return (ret);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
-   Function    :   mfs_lseek ()
Packit 7838c8
-
Packit 7838c8
-   Arguments   :   File descriptor, offset, whence
Packit 7838c8
-
Packit 7838c8
-   Returns     :   as per man lseek (2)
Packit 7838c8
-
Packit 7838c8
-   Description :   Does the same as lseek (2) except on a memory based file.
Packit 7838c8
-                   Note: the memory area will be extended if the caller
Packit 7838c8
-                   attempts to seek past the current end of file (memory).
Packit 7838c8
-                   
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
int mfs_lseek (int fd, int offset, int whence)
Packit 7838c8
{
Packit 7838c8
    int ret;
Packit 7838c8
    long test_off;
Packit 7838c8
Packit 7838c8
    if (fds[fd] == -1)  /* Not open */
Packit 7838c8
    {
Packit 7838c8
        ret = -1;
Packit 7838c8
        errno = EBADF;
Packit 7838c8
    }
Packit 7838c8
    else if (offset < 0 && whence == SEEK_SET)
Packit 7838c8
    {
Packit 7838c8
        ret = -1;
Packit 7838c8
        errno = EINVAL;
Packit 7838c8
    }
Packit 7838c8
    else
Packit 7838c8
    {
Packit 7838c8
        switch (whence)
Packit 7838c8
        {
Packit 7838c8
            case SEEK_SET:
Packit 7838c8
                if (offset > buf_size[fd])
Packit 7838c8
                    extend_mem_file (fd, offset);
Packit 7838c8
                buf_off[fd] = offset;
Packit 7838c8
                ret = offset;
Packit 7838c8
                break;
Packit 7838c8
Packit 7838c8
            case SEEK_CUR:
Packit 7838c8
                test_off = buf_off[fd] + offset;
Packit 7838c8
Packit 7838c8
                if (test_off < 0)
Packit 7838c8
                {
Packit 7838c8
                    ret = -1;
Packit 7838c8
                    errno = EINVAL;
Packit 7838c8
                }
Packit 7838c8
                else
Packit 7838c8
                {
Packit 7838c8
                    if (test_off > buf_size[fd])
Packit 7838c8
                        extend_mem_file (fd, test_off);
Packit 7838c8
                    buf_off[fd] = test_off;
Packit 7838c8
                    ret = test_off;
Packit 7838c8
                }
Packit 7838c8
                break;
Packit 7838c8
Packit 7838c8
            case SEEK_END:
Packit 7838c8
                test_off = buf_size[fd] + offset;
Packit 7838c8
Packit 7838c8
                if (test_off < 0)
Packit 7838c8
                {
Packit 7838c8
                    ret = -1;
Packit 7838c8
                    errno = EINVAL;
Packit 7838c8
                }
Packit 7838c8
                else
Packit 7838c8
                {
Packit 7838c8
                    if (test_off > buf_size[fd])
Packit 7838c8
                        extend_mem_file (fd, test_off);
Packit 7838c8
                    buf_off[fd] = test_off;
Packit 7838c8
                    ret = test_off;
Packit 7838c8
                }
Packit 7838c8
                break;
Packit 7838c8
Packit 7838c8
            default:
Packit 7838c8
                errno = EINVAL;
Packit 7838c8
                ret = -1;
Packit 7838c8
                break;
Packit 7838c8
        }
Packit 7838c8
    }
Packit 7838c8
Packit 7838c8
    return (ret);
Packit 7838c8
}   
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
-   Function    :   mfs_read ()
Packit 7838c8
-
Packit 7838c8
-   Arguments   :   File descriptor, buffer, size
Packit 7838c8
-
Packit 7838c8
-   Returns     :   as per man read (2)
Packit 7838c8
-
Packit 7838c8
-   Description :   Does the same as read (2) except on a memory based file.
Packit 7838c8
-                   Note: An attempt to read past the end of memory currently
Packit 7838c8
-                   allocated to the file will return 0 (End Of File)
Packit 7838c8
-                   
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
int mfs_read (int fd, void *clnt_buf, int size)
Packit 7838c8
{
Packit 7838c8
    int ret;
Packit 7838c8
Packit 7838c8
    if (fds[fd] == -1 || buf_mode[fd] != 'r')
Packit 7838c8
    {
Packit 7838c8
        /* File is either not open, or not opened for read */
Packit 7838c8
Packit 7838c8
        ret = -1;
Packit 7838c8
        errno = EBADF;
Packit 7838c8
    }
Packit 7838c8
    else if (buf_off[fd] + size > buf_size[fd])
Packit 7838c8
    {
Packit 7838c8
        ret = 0;        /* EOF */
Packit 7838c8
    }
Packit 7838c8
    else
Packit 7838c8
    {
Packit 7838c8
        memcpy (clnt_buf, (void *) (buf[fd] + buf_off[fd]), size);
Packit 7838c8
        buf_off[fd] = buf_off[fd] + size;
Packit 7838c8
        ret = size;
Packit 7838c8
    }
Packit 7838c8
Packit 7838c8
    return (ret);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
-   Function    :   mfs_write ()
Packit 7838c8
-
Packit 7838c8
-   Arguments   :   File descriptor, buffer, size
Packit 7838c8
-
Packit 7838c8
-   Returns     :   as per man write (2)
Packit 7838c8
-
Packit 7838c8
-   Description :   Does the same as write (2) except on a memory based file.
Packit 7838c8
-                   Note: the memory area will be extended if the caller
Packit 7838c8
-                   attempts to write past the current end of file (memory).
Packit 7838c8
-                   
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
int mfs_write (int fd, void *clnt_buf, int size)
Packit 7838c8
{
Packit 7838c8
    int ret;
Packit 7838c8
Packit 7838c8
    if (fds[fd] == -1 || buf_mode[fd] == 'r')
Packit 7838c8
    {
Packit 7838c8
        /* Either the file is not open or it is opened for reading only */
Packit 7838c8
Packit 7838c8
        ret = -1;
Packit 7838c8
        errno = EBADF;
Packit 7838c8
    }
Packit 7838c8
    else if (buf_mode[fd] == 'w')
Packit 7838c8
    {
Packit 7838c8
        /* Write */
Packit 7838c8
Packit 7838c8
        if (buf_off[fd] + size > buf_size[fd])
Packit 7838c8
        {       
Packit 7838c8
            extend_mem_file (fd, buf_off[fd] + size);
Packit 7838c8
            buf_size[fd] = (buf_off[fd] + size);
Packit 7838c8
        }
Packit 7838c8
Packit 7838c8
        memcpy ((buf[fd] + buf_off[fd]), clnt_buf, size);
Packit 7838c8
        buf_off[fd] = buf_off[fd] + size;
Packit 7838c8
Packit 7838c8
        ret = size;
Packit 7838c8
    }
Packit 7838c8
    else
Packit 7838c8
    {
Packit 7838c8
        /* Append */
Packit 7838c8
Packit 7838c8
        if (buf_off[fd] != buf_size[fd])
Packit 7838c8
            buf_off[fd] = buf_size[fd];
Packit 7838c8
Packit 7838c8
        extend_mem_file (fd, buf_off[fd] + size);
Packit 7838c8
        buf_size[fd] += size;
Packit 7838c8
Packit 7838c8
        memcpy ((buf[fd] + buf_off[fd]), clnt_buf, size);
Packit 7838c8
        buf_off[fd] = buf_off[fd] + size;
Packit 7838c8
Packit 7838c8
        ret = size;
Packit 7838c8
    }
Packit 7838c8
Packit 7838c8
    return (ret);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
-   Function    :   mfs_size ()
Packit 7838c8
-
Packit 7838c8
-   Arguments   :   File descriptor
Packit 7838c8
-
Packit 7838c8
-   Returns     :   integer file size
Packit 7838c8
-
Packit 7838c8
-   Description :   This function returns the current size of the file in bytes.
Packit 7838c8
-                   
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
int mfs_size (int fd)
Packit 7838c8
{
Packit 7838c8
    int ret;
Packit 7838c8
Packit 7838c8
    if (fds[fd] == -1)  /* Not open */
Packit 7838c8
    {
Packit 7838c8
        ret = -1;
Packit 7838c8
        errno = EBADF;
Packit 7838c8
    }
Packit 7838c8
    else
Packit 7838c8
        ret = buf_size[fd];
Packit 7838c8
Packit 7838c8
    return (ret);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
-   Function    :   mfs_map ()
Packit 7838c8
-
Packit 7838c8
-   Arguments   :   File descriptor, ptr to address, ptr to length
Packit 7838c8
-
Packit 7838c8
-   Returns     :   Map status (succeeded or otherwise)
Packit 7838c8
-
Packit 7838c8
-   Description :   This function tells the client where the file is mapped
Packit 7838c8
-                   in memory and what size the mapped area is. It is provided
Packit 7838c8
-                   to satisfy the MapProc function in libtiff. It pretends
Packit 7838c8
-                   that the file has been mmap (2)ped.
Packit 7838c8
-                   
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
int mfs_map (int fd, char **addr, size_t *len)
Packit 7838c8
{
Packit 7838c8
    int ret; 
Packit 7838c8
Packit 7838c8
    if (fds[fd] == -1)  /* Not open */
Packit 7838c8
    {
Packit 7838c8
        ret = -1;
Packit 7838c8
        errno = EBADF;
Packit 7838c8
    }
Packit 7838c8
    else
Packit 7838c8
    {
Packit 7838c8
        *addr = buf[fd];
Packit 7838c8
        *len = buf_size[fd];
Packit 7838c8
        ret = 0;
Packit 7838c8
    }
Packit 7838c8
Packit 7838c8
    return (ret);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
-   Function    :   mfs_unmap ()
Packit 7838c8
-
Packit 7838c8
-   Arguments   :   File descriptor
Packit 7838c8
-
Packit 7838c8
-   Returns     :   UnMap status (succeeded or otherwise)
Packit 7838c8
-
Packit 7838c8
-   Description :   This function does nothing as the file is always
Packit 7838c8
-                   in memory.
Packit 7838c8
-                   
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
int mfs_unmap (int fd)
Packit 7838c8
{
Packit 7838c8
    return (0);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
-   Function    :   mfs_close ()
Packit 7838c8
-
Packit 7838c8
-   Arguments   :   File descriptor
Packit 7838c8
-
Packit 7838c8
-   Returns     :   close status (succeeded or otherwise)
Packit 7838c8
-
Packit 7838c8
-   Description :   Close the open memory file. (Make fd available again.)
Packit 7838c8
-                   
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
int mfs_close (int fd)
Packit 7838c8
{
Packit 7838c8
    int ret; 
Packit 7838c8
Packit 7838c8
    if (fds[fd] == -1)  /* Not open */
Packit 7838c8
    {
Packit 7838c8
        ret = -1;
Packit 7838c8
        errno = EBADF;
Packit 7838c8
    }
Packit 7838c8
    else
Packit 7838c8
    {
Packit 7838c8
        fds[fd] = -1;
Packit 7838c8
        ret = 0;
Packit 7838c8
    }
Packit 7838c8
Packit 7838c8
    return (ret);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
-   Function    :   extend_mem_file ()
Packit 7838c8
-
Packit 7838c8
-   Arguments   :   File descriptor, length to extend to.
Packit 7838c8
-
Packit 7838c8
-   Returns     :   0 - All OK, -1 - realloc () failed.
Packit 7838c8
-
Packit 7838c8
-   Description :   Increase the amount of memory allocated to a file.
Packit 7838c8
-                   
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
static int extend_mem_file (int fd, int size)
Packit 7838c8
{
Packit 7838c8
    void *new_mem;
Packit 7838c8
    int ret;
Packit 7838c8
Packit 7838c8
    if ((new_mem = realloc (buf[fd], size)) == (void *) NULL)
Packit 7838c8
        ret = -1;
Packit 7838c8
    else
Packit 7838c8
    {
Packit 7838c8
        buf[fd] = (char *) new_mem;
Packit 7838c8
        ret = 0;
Packit 7838c8
    }
Packit 7838c8
Packit 7838c8
    return (ret);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
-   Function    :   mem_init ()
Packit 7838c8
-
Packit 7838c8
-   Arguments   :   None
Packit 7838c8
-
Packit 7838c8
-   Returns     :   void
Packit 7838c8
-
Packit 7838c8
-   Description :   Initialise the library.
Packit 7838c8
-                   
Packit 7838c8
--------------------------------------------------------------------------------
Packit 7838c8
*/
Packit 7838c8
Packit 7838c8
static void mem_init ()
Packit 7838c8
{
Packit 7838c8
    int i;
Packit 7838c8
Packit 7838c8
    for (i = 0; i < MAX_BUFFS; i++)
Packit 7838c8
    {
Packit 7838c8
        fds[i] = -1;
Packit 7838c8
        buf[i] = (char *)NULL;
Packit 7838c8
        buf_size[i] = 0;
Packit 7838c8
        buf_off[i] = 0;
Packit 7838c8
    }
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
 * Local Variables:
Packit 7838c8
 * mode: c
Packit 7838c8
 * c-basic-offset: 8
Packit 7838c8
 * fill-column: 78
Packit 7838c8
 * End:
Packit 7838c8
 */