home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frostbyte's 1980s DOS Shareware Collection
/
floppyshareware.zip
/
floppyshareware
/
DOOG
/
CBASE09.ZIP
/
LSEQ.ZIP
/
LSSETVBU.C
< prev
next >
Wrap
Text File
|
1989-08-30
|
2KB
|
90 lines
/* Copyright (c) 1989 Citadel */
/* All Rights Reserved */
/* #ident "lssetvbu.c 1.1 - 89/07/03" */
#include <blkio.h>
#include <errno.h>
#include "lseq_.h"
/*man---------------------------------------------------------------------------
NAME
lssetvbuf - assign buffering to an lseq
SYNOPSIS
#include <lseq.h>
int lssetvbuf(lsp, buf, bufcnt)
lseq_t *lsp;
void *buf;
size_t bufcnt;
DESCRIPTION
The lssetvbuf function is used to assign buffering to an lseq. If
buf is not the NULL pointer, the storage area it points to will be
used for buffering instead of an automatically allocated buffer.
bufcnt specifies the number of nodes to be buffered. If bufcnt has
a value of 0, the lseq will be completely unbuffered and buf is
ignored.
The size of the storage area needed can be obtained using the
LSBUFSIZE() macro:
char buf[LSBUFSIZE(RECSIZE, BUFCNT)];
.
.
.
lssetvbuf(lsp, (void *)buf, BUFCNT);
where RECSIZE is the size of the records in the lseq, and BUFCNT
is the number of records to buffer.
Any previously buffered data is flushed before installing the new
buffer area, so lssetvbuf may be called more than once. This allows
the buffer size to be varied with the file size.
lssetvbuf will fail if one or more of the following is true:
[EINVAL] lsp is not a valid lseq pointer.
[LSENOPEN] lsp is not open.
SEE ALSO
lssetbuf, lssync.
DIAGNOSTICS
Upon successful completion, a value of 0 is returned. Otherwise, a
value of -1 is returned, and errno set to indicate the error.
------------------------------------------------------------------------------*/
int lssetvbuf(lsp, buf, bufcnt)
lseq_t * lsp;
void * buf;
size_t bufcnt;
{
int rs = 0;
errno = 0;
/* validate arguments */
if (!ls_valid(lsp)) {
errno = EINVAL;
return -1;
}
/* check if not open */
if (!(lsp->flags & LSOPEN)) {
errno = LSENOPEN;
return -1;
}
/* set buffering */
rs = bsetvbuf(lsp->bp, buf, ls_blksize(lsp), bufcnt);
if (rs == -1) {
LSEPRINT;
return -1;
}
errno = 0;
return 0;
}