Blame contrib/mfs/mfs_file.c

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